Yandex Managed Service for ClickHouse® integration with Oracle via ClickHouse® JDBC Bridge
With ClickHouse® JDBC Bridge
- Request data from an external Oracle database table using the JDBC table function
. - Use the JDBC table engine
to create tables in ClickHouse® which reference a table in an external Oracle database.
Get your cloud ready
Sign up for Yandex Cloud and create a billing account:
- Navigate to the management console
and log in to Yandex Cloud or create a new account. - On the Yandex Cloud Billing
page, make sure you have a billing account linked and it has theACTIVEorTRIAL_ACTIVEstatus. If you do not have a billing account, create one and link a cloud to it.
If you have an active billing account, you can create or select a folder for your infrastructure on the cloud page
Learn more about clouds and folders here.
Required paid resources
The solution support costs include:
- Fee for a Managed Service for ClickHouse® cluster: using computing resources allocated to hosts (including ZooKeeper hosts) and disk space (see Managed Service for ClickHouse® pricing).
- NAT gateway fee if public access is not enabled for cluster hosts (see Virtual Private Cloud pricing).
- Fee for using public IP addresses if public access is enabled for cluster hosts (see Virtual Private Cloud pricing).
Set up your infrastructure
-
Create a security group and configure it.
Also add a rule for outgoing traffic:
- Port range:
0-65535 - Protocol:
TCP - Source:
CIDR - CIDR blocks:
0.0.0.0/0
This rule allows all outgoing traffic, enabling ClickHouse® JDBC Bridge to connect to external databases including Oracle.
- Port range:
-
Create a Managed Service for ClickHouse® cluster.
When creating a cluster, specify the security group prepared earlier.
Under DBMS settings, click Settings and add the jdbcBridge option with the following parameters:
- Host: IP address of your Oracle database installation.
- Port:
9019.
-
If you do not use public access, create a NAT gateway for the subnet you want to create your Managed Service for ClickHouse® cluster in.
Prepare the external Oracle database
Warning
In the command below, all entities created for the Oracle database are specified in uppercase according to the Oracle naming rules
-
Make sure your external Oracle database installation allows connection via ports
9019and1521. -
Connect to your external Oracle database installation and download the ojdbc8
JDBC driver into the/opt/driversdirectory:sudo mkdir -p /opt/drivers && \ curl -s https://repo1.maven.org/maven2/com/oracle/database/jdbc/ojdbc8/ | grep -oP '(?<=href=")[0-9][^/]+(?=/")' | sort -V | tail -n1 | xargs -I{} sudo curl -o /opt/drivers/ojdbc8-{}.jar https://repo1.maven.org/maven2/com/oracle/database/jdbc/ojdbc8/{}/ojdbc8-{}.jar -
Install Docker Engine
. -
Run ClickHouse® JDBC Bridge:
docker run -d --name jdbc_bridge --network host -v /opt/drivers:/app/drivers clickhouse/jdbc-bridgeIf your container is already running, restart it to load the new drivers to ClickHouse® JDBC Bridge:
docker container restart jdbc_bridge -
Connect to the external Oracle database as an administrator
. For example, you can use SQL Plus if you are connecting locally:sqlplus / as sysdba -
Switch the session to the required PDB
, e.g., toPDB1:ALTER SESSION SET CONTAINER = PDB1; -
Create a user named
JDBC_USERfor connection from the Managed Service for ClickHouse® cluster:CREATE USER JDBC_USER IDENTIFIED BY <user_password> DEFAULT TABLESPACE USERS TEMPORARY TABLESPACE TEMP QUOTA UNLIMITED ON USERS;Where
<user_password>is your password for theJDBC_USERuser.Tip
To connect to different PDBs, create a common user
by adding theC##prefix to the username, e.g.,C##JDBC_USER. -
Grant permissions required for ClickHouse® JDBC Bridge to run:
GRANT CONNECT, RESOURCE TO JDBC_USER; -
Connect as the new user:
CONNECT JDBC_USER/<user_password>@<Oracle_DB_host>/PDB1;Where:
<password>:JDBC_USERuser password.<Oracle_DB_host>: IP address of your Oracle database installation.
-
Create a test table named
CUSTOMERS:CREATE TABLE CUSTOMERS ( NAME VARCHAR2(100), EMAIL VARCHAR2(100) ); -
Add the test data:
INSERT INTO CUSTOMERS (NAME, EMAIL) VALUES ('Angela Smith', 'angela@example.ru'); INSERT INTO CUSTOMERS (NAME, EMAIL) VALUES ('Bob Johnson', 'bob@example.ru'); INSERT INTO CUSTOMERS (NAME, EMAIL) VALUES ('Charlie Brown', 'charlie@example.ru'); COMMIT; -
Make sure the data has been written:
SELECT * FROM CUSTOMERS;
Query data using the JDBC table function
-
Run a query to the external Oracle database using the JDBC table function:
SELECT * FROM jdbc('jdbc:oracle:thin:JDBC_USER/<user_password>@<Oracle_DB_host>:1521/PDB1', 'SELECT * FROM CUSTOMERS');Where:
<password>:JDBC_USERuser password.<Oracle_DB_host>: IP address of your Oracle database installation.
If the query is successful, you will get data from the external Oracle database.
Create a table using the JDBC table engine
With the JDBC table engine, you can:
-
Query data via
SELECT. -
Add new values via
INSERT INTOwith the following limitations:- The table in the Managed Service for ClickHouse® cluster database must exactly mirror the structure of the table it references.
- The only available write operation is
INSERT INTO. You cannot useUPDATE,DELETE,ALTER, or other statements to modify the existing data. - If you add new records and do not specify their values for fields with automatic generation (
DEFAULT,GENERATED BY,SYSDATE, etc.), these values will not be generated.
To use the JDBC table engine:
-
Create a table with the JDBC table engine based on the table from the external Oracle database.
CREATE TABLE oracle_customers ENGINE = JDBC( 'jdbc:oracle:thin:JDBC_USER/<user_password>@<Oracle_DB_host>:1521/XEPDB1', 'JDBC_USER', 'CUSTOMERS' ) AS SELECT * FROM jdbc( 'jdbc:oracle:thin:JDBC_USER/<user_password>@<Oracle_DB_host>:1521/XEPDB1', 'JDBC_USER', 'SELECT * FROM CUSTOMERS' ) LIMIT 0;You can also create a table specifying only some fields, but in this case you will not be able to add new values via
INSERT INTO. -
Check the result:
SELECT * FROM oracle_customers; -
Insert a new row:
INSERT INTO oracle_customers (NAME, EMAIL) VALUES ('Alice Wonderland', 'alice@example.ru');ClickHouse® JDBC Bridge automatically opens and closes a transaction. You do not need to execute
COMMITseparately. -
Check the result again and compare it with the previous output:
SELECT * FROM oracle_customers;If the insertion was successful, you will see a new row in the returned output.
Delete the resources you created
Some resources are not free of charge. To avoid paying for them, delete the resources you no longer need:
ClickHouse® is a registered trademark of ClickHouse, Inc