9.3. Starburst Generic JDBC Connector#
The Generic JDBC connector allows querying and creating tables in an external database that Presto does not have a dedicated connector for. This can be used for proof-of-concept deployments of federation use-cases, enabling joining multiple data sources. For production deployments a dedicated supported connector should be used.
Due to its generic nature, this connector may or may not work with a particular database or deployment scenario. In particular, you should expect the connector to handle at most only a subset of data types available in the external database.
The Generic JDBC connector requires a JDBC 4.2 driver dedicated for the external database. No JDBC drivers are shipped with the connector. The installation steps assume you have the external database already running and that you have the appropriate JDBC driver jar.
generic-jdbcdirectory under Presto’s plugin directory. When Presto is installed from RPM, this is
- Add the appropriate JDBC driver jar file to the
etc/catalogdirectory containing configuration for Presto catalogs. When Presto is installed from RPM, this is
some_catalog.propertiesfile in the catalogs configuration directory (replace
some_catalogwith your database name or some other descriptive name of the catalog) with the following contents:
connector.name=generic-jdbc # the name of the Driver class. E.g. for Postgres this would be org.postgresql.Driver generic-jdbc.driver-class=FULLY_QUALIFIED_NAME_OF_THE_DRIVER_CLASS # JDBC connection URL. E.g. for Postgres this could be jdbc:postgresql://example.net:5432/database?defaultRowFetchSize=10000 connection-url=JDBC_CONNECTION_URL_AS_APPROPRIATE_FOR_THE_EXTERNAL_DATABASE_DRIVER # connection credentials connection-user=USERNAME connection-password=PASSWORD # additional configuration case-insensitive-name-matching=true
- Perform the above steps on every Presto cluster node.
- Restart Presto on every node.
If you want to connect to multiple external databases using the Generic JDBC connector, follow these steps:
- Add appropriate JDBC driver jars to the
generic-jdbcdirectory under Presto’s plugin directory for all database servers you are going to connect to. If two external databases use the same driver jar, you do not need to add the driver jar twice.
- Define additional catalogs in Presto catalogs configuration directory, by creating
some_additional_catalogwith some descriptive name of the catalog).
Generic JDBC Connector provides best-effort compatibility with older JDBC drivers, including drivers implementing version 3 of JDBC specification (JDBC 3).
The best-effort compatibility can be turned on with:
Generic JDBC Connector supports user impersonation.
User impersonation can be enabled in the catalog file:
User impersonation in Generic JDBC connector is based on
Support for data types depends on the data types in the external database and how the data types are reported by the JDBC driver of the external database. Actual support may vary from database to database. The Generic JDBC connector will hide columns which data type it considered unsupported. In the extreme case, this may mean that no columns are visible, if all data types being used are unsupported.
If you want to query data with unsupported types, you can define a view in your external database,
converting unsupported data types to supported ones (converting to
varchar is usually a good choice).
Then you should query this view from Presto, instead of the underlying table.