Currently, I'm unable to access objects in other schemas. In a PostgreSQL database in Neon, I have a sample from their postgres_air <https://neon.tech/docs/import/import-sample-data#postgres-air-database> sample data set. The database has the public schema, but it also has a postgres_air schema, the latter of which has the actual sample tables. The public schema is largely empty, though I did create a simple person table for testing purposes. In Java, with a connection to PostgreSQL via the PostgreSQL JDBC driver, these work:
- ✅ "select * from person" - ✅ "select * from public.person" - ✅ "select * from \"public\".\"person\"" - ✅ "select * from postgres_air.person" - ✅ "select * from \"postgres_air\".\"aircraft\"" With a connection to PostgreSQL via the Calcite driver, it runs into a little trouble: - ✅ "select * from person" - ❌ "select * from public.person" - ❌ "select * from \"public\".\"person\"" - ❌ "select * from postgres_air.aircraft" - ❌ "select * from \"postgres_air\".\"aircraft\"" I guess it's safe to say that I don't know how to query objects (tables, views, etc.) using a fully-qualified name that includes the schema, and that includes knowing how to quote the objects. ¯\_(ツ)_/¯ Sorry to be a trouble, but are there any clues about how to surmount this obstacle? Thanks so much. Best, David Trying to find On Wed, Aug 21, 2024 at 3:46 PM David Ventimiglia < davidaventimig...@hasura.io> wrote: > Hey Stamatis, > > Thanks! That helped. I tried Gavin's script to download the Jar files, > but it turns out it wasn't entirely necessary. I don't know about SQirreL, > but DBeaver accepts Maven dependencies and will download the dependencies > transitively. DBeaver ships with an "Apache Calcite" connection template, > but it only has the org.apache.calcite.avatica.:avatica-core artifact. It > doesn't have the org.apache.calcite:calcite-core artifact. I added that > and asked DBeaver then to "Download/Update" its dependencies, at which > point it retrieved all of the Jar files that Gavin's script did. I also had > to change the Driver class from org.apache.calcite.avatica.remote.Driver to > org.apache.calcite.jdbc.Driver, and of course I had to add the artifact for > the PostgreSQL JDBC driver as well. > > With that, I was able to connect to a PostgreSQL database through Apache > Calcite, via DBeaver. Unfortunately, I haven't been able to access any > tables or views, as I haven't yet coaxed Calcite into making them > available. Perhaps the trouble lies in the model.json file (shown below): > > { > version: "1.0", > defaultSchema: "postgres_air", > schemas: [ > { > name: "postgres_air", > type: "custom", > factory: "org.apache.calcite.adapter.jdbc.JdbcSchema$Factory", > operand: { > jdbcDriver: "org.postgresql.Driver", > jdbcUrl: > "jdbc:postgresql://<redacted>/postgres_air?sslmode=require", > jdbcUser: "<redacted>", > jdbcPassword: "<redacted>" > } > } > ] > } > > My JDBC URL is: jdbc:calcite:model=<redacted>/model.json > > Anyway, I'll keep poking at it! Thanks > > > > > > On Wed, Aug 21, 2024 at 12:33 AM Stamatis Zampetakis <zabe...@gmail.com> > wrote: > >> Hey David, >> >> Your understanding so far is correct and you are pretty close in making >> it work. >> >> Indeed, the JDBC URL should start with "jdbc:calcite" if you are to >> use the Calcite JDBC driver but for this to happen the driver needs to >> be loaded. If you are using some of the recent Calcite versions and >> Java version >= 6 normally the registration should happen >> transparently since Calcite is using the automatic driver registration >> features of JDBC 4 which relies on Java SPI. >> >> The Calcite JDBC driver itself is in the core module but the latter is >> not self-contained and has dependencies on other libraries and >> modules. For things to work all required dependencies must be in the >> classpath as well otherwise you will encounter ClassNotFoundException >> and other similar errors; it is plausible that some errors are already >> happening in the background and that's why the driver is not loaded. >> >> Sometime ago Gavin wrote a nice post on how to make Calcite work with >> SQuirreL [1] which seems pretty close to what you are trying to >> achieve. >> >> Best, >> Stamatis >> >> [1] https://gist.github.com/GavinRay97/44fcd0f17e5c62ed6e7880fed0b0042e >> >> On Wed, Aug 21, 2024 at 1:11 AM David Ventimiglia >> <davidaventimig...@hasura.io.invalid> wrote: >> > >> > Hello! >> > >> > The Calcite tutorial <https://calcite.apache.org/docs/tutorial.html> >> shows >> > how to use a custom sqlline to connect to the Calcite JDBC driver with a >> > model.json to use a simple adapter that makes a directory of CSV files >> > appear to be a schema containing tables. Later, the tutorial shows >> what I >> > think is a model.json file for using the JDBC Adapter >> > <https://calcite.apache.org/docs/tutorial.html#jdbc-adapter> but I >> don't >> > really understand how to use it. Evidently, there's a Calcite JDBC >> driver >> > that can handle JDBC URLs of the form "jdbc:calcite:model=model.json". >> > Given that, I feel like using the JDBC adapter might be as easy as >> > substituting a suitable model.json file, like the one for MySQL in the >> > tutorial, but that might be overly optimistic. For that really to work, >> > the Calcite JDBC driver would have to be on the classpath as well as the >> > MySQL driver (or PostgreSQL driver, or whatever) and I can't figure out >> how >> > to arrange that. It's easy enough to put the database drivers into the >> > CLASSPATH environment variable, but where is the Calcite JDBC driver? I >> > tried adding calcite/core/build/libs/calcite-core-1.38.0-SNAPSHOT.jar to >> > CLASSPATH and using the stock (unmodified) sqlline, but it failed to >> pick >> > up the driver, and now I'm wondering if this is even the right approach. >> > I'm really kinda lost here and any help would be appreciated. Thanks! >> > >> > Best, >> > David >> >