Connecting to a database in a ClickHouse cluster
You can connect to Managed Service for ClickHouse cluster hosts:
-
Over the internet, if you configured public access for the appropriate host. You can only connect to such hosts over an SSL connection.
-
From Nebius AI virtual machines located in the same cloud network. If there is no public access to a host, connections from this type of virtual machine don't need to be over SSL.
You can connect to a cluster both using encryption via ports 9440
for clickhouse-client8443
for the HTTP interface9000
and 8123
, respectively.
Getting your SSL certificate
To use an encrypted connection, get your SSL certificate:
sudo mkdir --parents /usr/local/share/ca-certificates/NebiusAI/ && \
sudo wget "https://storage.nemax.nebius.cloud/certs/CA.pem" \
--output-document /usr/local/share/ca-certificates/NebiusAI/NebiusAICA.crt && \
sudo chmod 655 /usr/local/share/ca-certificates/NebiusAI/NebiusAICA.crt && \
sudo update-ca-certificates
The certificate will be saved to the /usr/local/share/ca-certificates/NebiusAI/NebiusAICA.crt
file.
sudo mkdir -p /usr/local/share/ca-certificates/NebiusAI/ && \
sudo wget "https://storage.nemax.nebius.cloud/certs/CA.pem" \
--output-document /usr/local/share/ca-certificates/NebiusAI/NebiusAICA.crt && \
sudo chmod 655 /usr/local/share/ca-certificates/NebiusAI/NebiusAICA.crt && \
security import /usr/local/share/ca-certificates/NebiusAI/NebiusAICA.crt -k ~/Library/Keychains/login.keychain
The certificate will be saved to the /usr/local/share/ca-certificates/NebiusAI/NebiusAICA.crt
file.
-
Download and import the certificate:
mkdir -Force $HOME\.nebius; ` curl.exe https://storage.nemax.nebius.cloud/certs/CA.pem ` --output $HOME\.nebius\NebiusAICA.crt; ` Import-Certificate ` -FilePath $HOME\.nebius\NebiusAICA.crt ` -CertStoreLocation cert:\CurrentUser\Root
-
Agree to install the certificate in the
Trusted Root Certification Authorities
store.
The certificate will be saved to the $HOME\.nebius\NebiusAICA.crt
file.
To use graphical IDEs, save a certificate
Connecting to cluster hosts from graphical IDEs
Connections were tested in the following environment:
- Ubuntu 20.04, DBeaver:
22.2.4
. - MacOS Big Sur 11.3:
- JetBrains DataGrip:
2021.1
. - DBeaver Community:
21.0.5
.
- JetBrains DataGrip:
- Windows 10 Pro 21H1 with SQL Server Management Studio
18.9.1
.
You can only use graphical IDEs to connect to public cluster hosts using SSL certificates.
To avoid connection errors, save the certificate
- Create a data source:
- Select File → New → Data Source → ClickHouse.
- On the General tab:
- Specify the connection parameters:
- Host: Any ClickHouse host FQDN or a special FQDN.
- Port:
8443
. - User, Password: DB user's name and password.
- Database: Name of the DB to connect to.
- Click Download to download the connection driver.
- Specify the connection parameters:
- On the SSH/SSL tab:
- Enable the Use SSL setting.
- Specify the path to the directory that contains the file with the downloaded SSL certificate for the connection.
- Click Test Connection to test the connection. If the connection is successful, you'll see the connection status and information about the DBMS and driver.
- Click OK to save the data source.
- Create a new DB connection:
- In the Database menu, select New connection.
- Select ClickHouse from the DB list.
- Click Next.
- Specify the connection parameters on the Main tab:
- Host: FQDN of any ClickHouse host or a special FQDN.
- Port:
8443
. - DB/Schema: Name of the DB to connect to.
- Under Authentication, specify the DB user's name and password.
- On the Driver properties tab:
- Click Download in a new window with an invitation to download the driver files.
- Specify the SSL connection parameters in the driver property list:
ssl:true
.sslrootcert:<path to the saved SSL certificate file>
.
- Click Test connection ... to test the connection. If the connection is successful, you'll see the connection status and information about the DBMS and driver.
- Click Ready to save the database connection settings.
Connecting from a Docker container
You can only use Docker containers to connect to public cluster hosts with your SSL certificate.
To connect to a Managed Service for ClickHouse cluster, add the following lines to the Dockerfile:
# Connect the DEB repository.
RUN apt-get update && \
apt-get install wget --yes apt-transport-https ca-certificates dirmngr && \
apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv 8919F6BD2B48D754 && \
echo "deb https://packages.clickhouse.com/deb stable main" | tee \
/etc/apt/sources.list.d/clickhouse.list && \
# Install dependencies.
apt-get update && \
apt-get install wget clickhouse-client --yes && \
# Upload a configuration file for clickhouse-client.
mkdir -p ~/.clickhouse-client && \
wget "https://storage.ai.nebius.cloud/doc-files/clickhouse-client.conf.example" \
--output-document ~/.clickhouse-client/config.xml && \
# Get SSL certificates.
mkdir --parents /usr/local/share/ca-certificates/NebiusAI/ && \
wget "https://storage.nemax.nebius.cloud/certs/CA.pem" \
--output-document /usr/local/share/ca-certificates/NebiusAI/NebiusAICA.crt && \
chmod 655 /usr/local/share/ca-certificates/NebiusAI/NebiusAICA.crt && \
update-ca-certificates
To connect to a cluster host from the built-in SQL editor, specify the following in the browser address bar:
https://<FQDN of any ClickHouse host>:8443/play
You can only connect to publicly accessible cluster hosts.
To connect to a cluster by selecting an available host automatically, use the following URL:
https://c-<cluster ID>.rw.mdb.nemax.nebius.cloud:8443/play
to connect to the available cluster host.https://<shard name>.c-<cluster ID>.rw.mdb.nemax.nebius.cloud:8443/play
to connect to the available shard host.
To make a query to the database, specify the username and password in the upper-right corner.
Sample connection strings
The Linux examples were tested in the following environment:
- A virtual machine running Ubuntu 20.04 LTS.
- Bash:
5.0.16
. - Python:
3.8.2
; pip3:20.0.2
. - PHP:
7.4.3
. - OpenJDK:
11.0.8
; Maven:3.6.3
. - Node.JS:
10.19.0
, npm:6.14.4
. - Go:
1.13.8
. - Ruby:
2.7.0p0
. - unixODBC:
2.3.6
.
The Windows examples were tested in the following environment:
- A local machine with Windows 10 Pro build
19042.1052
. - PowerShell:
5.1.19041
. - cURL:
7.55.1 WinSSL
.
You can only connect to public ClickHouse cluster hosts with your SSL certificate. Before connecting, prepare your certificate.
In the examples below, it is assumed that the NebiusAICA.crt
certificate:
- Is located in the
/usr/local/share/ca-certificates/NebiusAI/
directory (for Ubuntu). - Is imported to the Trusted Root Certificate store (for Windows).
Connecting without any SSL certificate is only supported for hosts that are not publicly accessible. For connections to the database, traffic inside the virtual network is not encrypted in this case.
To view an example of the command with the host FQDN filled in, open the cluster page in the management console
If the connection to the cluster and the test query are successful, the ClickHouse version is output.
clickhouse-client
Before connecting:
-
Connect the DEB repository
ClickHouse:sudo apt update && sudo apt install --yes apt-transport-https ca-certificates dirmngr && \ sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv 8919F6BD2B48D754 && \ echo "deb https://packages.clickhouse.com/deb stable main" | sudo tee \ /etc/apt/sources.list.d/clickhouse.list
-
Install the dependencies:
sudo apt update && sudo apt install --yes clickhouse-client
-
Download the configuration file for
clickhouse-client
:mkdir -p ~/.clickhouse-client && \ wget "https://storage.ai.nebius.cloud/doc-files/clickhouse-client.conf.example" \ --output-document ~/.clickhouse-client/config.xml
clickhouse-client --host <FQDN of any ClickHouse host> \
--user <username> \
--database <DB name> \
--port 9000 \
--ask-password
clickhouse-client --host <FQDN of any ClickHousehost> \
--secure \
--user <username> \
--database <DB name> \
--port 9440 \
--ask-password
After running the command, enter the user password to complete the connection procedure.
Once connected to the DBMS, run SELECT @@version;
.
cURL
curl --header "X-ClickHouse-User: <DB username>" \
--header "X-ClickHouse-Key: <DB user password>" \
'http://<Any ClickHouse host FQDN>:8123/?database=<DB name>&query=SELECT%20version()'
curl --cacert /usr/local/share/ca-certificates/NebiusAI/NebiusAICA.crt \
--header "X-ClickHouse-User: <DB username>" \
--header "X-ClickHouse-Key: <DB user password>" \
'https://<FQDN of any ClickHouse host>:8443/?database=<DB name>&query=SELECT%20version()'
Go
Before connecting, install the dependencies:
sudo apt update && sudo apt install --yes golang git
connect.go
package main
import (
"fmt"
"net/http"
"io/ioutil"
)
func main() {
const DB_HOST = "<FQDN of any ClickHouse host>"
const DB_NAME = "<DB name>"
const DB_USER = "<DB user name>"
const DB_PASS = "<DB user password>"
conn := &http.Client{
Transport: &http.Transport{},
}
req, _ := http.NewRequest("GET", fmt.Sprintf("http://%s:8123/", DB_HOST), nil)
query := req.URL.Query()
query.Add("database", DB_NAME)
query.Add("query", "SELECT version()")
req.URL.RawQuery = query.Encode()
req.Header.Add("X-ClickHouse-User", DB_USER)
req.Header.Add("X-ClickHouse-Key", DB_PASS)
resp, err := conn.Do(req)
if err != nil {
panic(err)
}
defer resp.Body.Close()
data, _ := ioutil.ReadAll(resp.Body)
fmt.Println(string(data))
}
connect.go
package main
import (
"fmt"
"net/http"
"io/ioutil"
"crypto/x509" "crypto/tls"
)
func main() {
const DB_HOST = "<FQDN of any hostClickHouse>"
const DB_NAME = "<DB name>"
const DB_USER = "<DB user name>"
const DB_PASS = "<DB user password>"
const CACERT = "/usr/local/share/ca-certificates/NebiusAI/NebiusAICA.crt"
caCert, err := ioutil.ReadFile(CACERT)
if err != nil {
panic(err)
}
caCertPool := x509.NewCertPool()
caCertPool.AppendCertsFromPEM(caCert)
conn := &http.Client{
Transport: &http.Transport{
TLSClientConfig: &tls.Config{
RootCAs: caCertPool,
},
},
}
req, _ := http.NewRequest("GET", fmt.Sprintf("https://%s:8443/", DB_HOST), nil)
query := req.URL.Query()
query.Add("database", DB_NAME)
query.Add("query", "SELECT version()")
req.URL.RawQuery = query.Encode()
req.Header.Add("X-ClickHouse-User", DB_USER)
req.Header.Add("X-ClickHouse-Key", DB_PASS)
resp, err := conn.Do(req)
if err != nil {
panic(err)
}
defer resp.Body.Close()
data, _ := ioutil.ReadAll(resp.Body)
fmt.Println(string(data))
}
Connection:
go run connect.go
Java
Before connecting:
-
Install the dependencies:
sudo apt update && sudo apt install --yes default-jdk maven
-
Create a folder for the Maven project:
cd ~/ && mkdir --parents project/src/java/com/example && cd project/
-
Create a configuration file for Maven:
pom.xml<?xml version="1.0" encoding="utf-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>com.example</groupId> <artifactId>app</artifactId> <packaging>jar</packaging> <version>0.1.0</version> <properties> <maven.compiler.source>1.8</maven.compiler.source> <maven.compiler.target>1.8</maven.compiler.target> </properties> <dependencies> <dependency> <groupId>com.clickhouse</groupId> <artifactId>clickhouse-jdbc</artifactId> <version>0.2.4</version> </dependency> <dependency> <groupId>org.slf4j</groupId> <artifactId>slf4j-simple</artifactId> <version>1.7.30</version> </dependency> </dependencies> <build> <finalName>${project.artifactId}-${project.version}</finalName> <sourceDirectory>src</sourceDirectory> <resources> <resource> <directory>src</directory> </resource> </resources> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-assembly-plugin</artifactId> <executions> <execution> <goals> <goal>attached</goal> </goals> <phase>package</phase> <configuration> <descriptorRefs> <descriptorRef> jar-with-dependencies</descriptorRef> </descriptorRefs> <archive> <manifest> <mainClass>com.example.App</mainClass> </manifest> </archive> </configuration> </execution> </executions> </plugin> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-jar-plugin</artifactId> <version>3.1.0</version> <configuration> <archive> <manifest> <mainClass>com.example.App</mainClass> </manifest> </archive> </configuration> </plugin> </plugins> </build> </project>
Up-to-date versions of dependencies for Maven:
src/java/com/example/App.java
package com.example;
import java.sql.*;
public class App {
public static void main(String[] args) {
String DB_HOST = "<FQDN of any ClickHouse host>";
String DB_NAME = "<DB name>";
String DB_USER = "<DB user name>";
String DB_PASS = "<DB user password>";
String DB_URL = String.format("jdbc:clickhouse://%s:8123/%s", DB_HOST, DB_NAME);
try {
Class.forName("com.clickhouse.jdbc.ClickHouseDriver");
Connection conn = DriverManager.getConnection(DB_URL, DB_USER, DB_PASS);
ResultSet rs = conn.createStatement().executeQuery("SELECT version()");
if(rs.next()) {System.out.println(rs.getString(1));}
conn.close();
}
catch(Exception ex) {ex.printStackTrace();}
}
}
src/java/com/example/App.java
package com.example;
import java.sql.*;
public class App {
public static void main(String[] args) {
String DB_HOST = "<FQDN of any ClickHouse host>";
String DB_NAME = "<DB name>";
String DB_USER = "<DB user name>";
String DB_PASS = "<DB user password>";
String CACERT = "/usr/local/share/ca-certificates/NebiusAI/NebiusAICA.crt";
String DB_URL = String.format("jdbc:clickhouse://%s:8443/%s?ssl=1&sslmode=strict&sslrootcert=%s", DB_HOST, DB_NAME, CACERT);
try {
Class.forName("com.clickhouse.jdbc.ClickHouseDriver");
Connection conn = DriverManager.getConnection(DB_URL, DB_USER, DB_PASS);
ResultSet rs = conn.createStatement().executeQuery("SELECT version()");
if(rs.next()) {System.out.println(rs.getString(1));}
conn.close();
}
catch(Exception ex) {ex.printStackTrace();}
}
}
Connection:
mvn clean package && \
java -jar target/app-0.1.0-jar-with-dependencies.jar
Node.js
Before connecting, install the dependencies:
sudo apt update && sudo apt install --yes nodejs npm && \
npm install querystring
app.js
"use strict"
const http = require('http');
const querystring = require('querystring');
const fs = require('fs');
const DB_HOST = "<FQDN of any ClickHouse host>";
const DB_NAME = "<DB name>";
const DB_USER = "<DB user name>";
const DB_PASS = "<DB user password>";
const options = {
'method': 'GET',
'path': '/?' + querystring.stringify({
'database': DB_NAME,
'query': 'SELECT version()',
}),
'port': 8123,
'hostname': DB_HOST,
'headers': {
'X-ClickHouse-User': DB_USER,
'X-ClickHouse-Key': DB_PASS,
},
};
const rs = http.request(options, (res) => {
res.setEncoding('utf8');
res.on('data', (chunk) => {
console.log(chunk);
});
});
rs.end();
app.js
"use strict"
const https = require('https');
const querystring = require('querystring');
const fs = require('fs');
const DB_HOST = "<FQDN of any ClickHouse host>";
const DB_NAME = "<DB name>";
const DB_USER = "<DB user name>";
const DB_PASS = "<DB user password>";
const CACERT = "/usr/local/share/ca-certificates/NebiusAI/NebiusAICA.crt";
const options = {
'method': 'GET',
'ca': fs.readFileSync(CACERT),
'path': '/?' + querystring.stringify({
'database': DB_NAME,
'query': 'SELECT version()',
}),
'port': 8443,
'hostname': DB_HOST,
'headers': {
'X-ClickHouse-User': DB_USER,
'X-ClickHouse-Key': DB_PASS,
},
};
const rs = https.request(options, (res) => {
res.setEncoding('utf8');
res.on('data', (chunk) => {
console.log(chunk);
});
});
rs.end();
Connection:
node app.js
ODBC
Setup methods for Linux and Windows are different.
Linux
Before connecting:
-
Install the dependencies:
sudo apt update && sudo apt install --yes git unixodbc build-essential cmake \ libpoco-dev libssl-dev libicu-dev unixodbc-dev && \ cd ~/ && git clone https://github.com/ClickHouse/clickhouse-odbc.git && \ cd clickhouse-odbc/ && git submodule update --init
-
Build the driver from the source files:
cd ~/clickhouse-odbc/ && mkdir build && cd build && \ cmake -DCMAKE_BUILD_TYPE=RelWithDebInfo .. && \ cmake --build . --config RelWithDebInfo
-
After the build process is complete, copy the driver files to the
/usr/local/lib64/
directory:sudo mkdir --parents /usr/local/lib64 && sudo cp driver/*.so /usr/local/lib64/
-
Register the ClickHouse ODBC driver by adding the following lines to the
odbcinst.ini
file (sample file ):/etc/odbcinst.ini[ODBC Drivers] ClickHouse ODBC Driver (ANSI) = Installed ClickHouse ODBC Driver (Unicode) = Installed [ClickHouse ODBC Driver (ANSI)] Description = ODBC Driver (ANSI) for ClickHouse Driver = /usr/local/lib64/libclickhouseodbc.so Setup = /usr/local/lib64/libclickhouseodbc.so UsageCount = 1 [ClickHouse ODBC Driver (Unicode)] Description = ODBC Driver (Unicode) for ClickHouse Driver = /usr/local/lib64/libclickhouseodbcw.so Setup = /usr/local/lib64/libclickhouseodbcw.so UsageCount = 1
/etc/odbc.ini
[ClickHouse]
Driver = ClickHouse ODBC Driver (Unicode)
Server = <FQDN of any ClickHouse host>
Database = <DB name>
UID = <DB user name>
PWD = <DB user password>
Port = 8123
Proto = http
/etc/odbc.ini
[ClickHouse]
Driver = ClickHouse ODBC Driver (Unicode)
Server = <FQDN of any ClickHouse host>
Database = <DB name>
UID = <DB user name>
PWD = <DB user password>
Port = 8443
Proto = https
SSLMode = allow
CertificateFile = /usr/local/share/ca-certificates/NebiusAI/NebiusAICA.crt
CALocation = /etc/ssl/certs/ca-certificates.crt
Connection:
isql -v ClickHouse
Once connected to the DBMS, run SELECT @@version;
.
Windows
-
Install the clickhouse-odbc driver
with the appropriate bit depth. For example, if you are using a 32-bit application, install the driver with the same number of bits to connect through ODBC. -
In the User DSN tab, click Add....
-
Select the ClickHouse driver with suitable encoding and click Done.
-
Specify the parameters for connecting to the ClickHouse cluster:
Connecting without using SSLConnecting via SSL- Name: Name for the connection.
- Host: FQDN of any ClickHouse host.
- Port:
8443
. - Database: DB name.
- User: DB user name.
- Password: DB user password.
- Name: Name for the connection.
- Host: FQDN of any ClickHouse host.
- Port:
8443
. - Database: DB name.
- SSLMode:
Allow
. - User: DB user name.
- Password: DB user password.
-
Click OK.
-
Connect to the ClickHouse cluster through ODBC, for example, using Microsoft Excel.
PHP
Before connecting:
-
Install the dependencies:
sudo apt update && sudo apt install --yes php
-
Make sure that the
allow_url_fopen
parameter is set toOn
in the PHP settings:cat /etc/php/7.4/apache2/php.ini | grep "allow_url_fopen"
Otherwise, set this value and restart Apache:
sudo sed -i 's/\(^allow_url_fopen = \).*/\1On/' /etc/php/7.4/apache2/php.ini && \ sudo systemctl restart apache2
connect.php
<?php
$host = '<FQDN of any ClickHouse host>';
$db = '<DB name>';
$query = 'SELECT version()';
$auth = [
'X-ClickHouse-User: <DB user name>',
'X-ClickHouse-Key: <DB user password>',
];
$context = stream_context_create([
'http' => [
'method' => 'GET',
'protocol_version' => 1.1,
'header' => $auth
]
]);
$url = sprintf('http://%s:8123/?database=%s&query=%s', $host, $db, urlencode($query));
$rs = file_get_contents($url, false, $context);
print_r($rs);
?>
connect.php
<?php
$host = '<FQDN of any ClickHouse host>';
$db = '<DB name>';
$query = 'SELECT version()';
$auth = [
'X-ClickHouse-User: <DB user name>',
'X-ClickHouse-Key: <DB user password>',
];
$ssl = [
'cafile' => '/usr/local/share/ca-certificates/NebiusAI/NebiusAICA.crt',
'verify_peer' => true,
];
$context = stream_context_create([
'http' => [
'method' => 'GET',
'protocol_version' => 1.1,
'header' => $auth
],
'ssl' => $ssl
]);
$url = sprintf('https://%s:8443/?database=%s&query=%s', $host, $db, urlencode($query));
$rs = file_get_contents($url, false, $context);
print_r($rs);
?>
Connection:
php connect.php
PowerShell
curl.exe `
-H "X-ClickHouse-User: <DB user name>" `
-H "X-ClickHouse-Key: <DB user password>" `
'http://<FQDN of any ClickHouse host>:8123/?database=<DB name>&query=SELECT+version()'
curl.exe `
-H "X-ClickHouse-User: <DB user name>" `
-H "X-ClickHouse-Key: <DB user password>" `
'https://<FQDN of any ClickHouse host>:8443/?database=<DB name>&query=SELECT+version()'
Python (clickhouse-driver)
Before connecting, install the dependencies:
sudo apt update && sudo apt install --yes python3 python3-pip && \
pip3 install clickhouse-driver
connect.py
from clickhouse_driver import Client
client = Client(host='<FQDN of any ClickHouse host>',
user='<DB user name>',
password='<DB user password>',
port=9000)
print(client.execute('SELECT version()'))
connect.py
from clickhouse_driver import Client
client = Client(host='<FQDN of any ClickHouse host>',
user='<DB user name>',
password='<DB user password>',
port=9440,
secure=True,
verify=True,
ca_certs='/usr/local/share/ca-certificates/NebiusAI/NebiusAICA.crt')
print(client.execute('SELECT version()'))
Connection:
python3 connect.py
Python (requests)
Before connecting, install the dependencies:
sudo apt update && sudo apt install --yes python3 python3-pip && \
pip3 install requests
connect.py
import requests
response = requests.get(
'http://{0}:8123'.format('<FQDN of any ClickHouse host>'),
params={
'query': 'SELECT version()',
},
headers={
'X-ClickHouse-User': '<DB user name>',
'X-ClickHouse-Key': '<DB user password>',
})
response.raise_for_status()
print(response.text)
connect.py
import requests
response = requests.get(
'https://{0}:8443'.format('<FQDN of any ClickHouse host>'),
params={
'query': 'SELECT version()',
},
verify='/usr/local/share/ca-certificates/NebiusAI/NebiusAICA.crt',
headers={
'X-ClickHouse-User': '<DB user name>',
'X-ClickHouse-Key': '<DB user password>',
})
response.raise_for_status()
print(response.text)
Connection:
python3 connect.py
Ruby
Before connecting, install the dependencies:
sudo apt update && sudo apt install --yes ruby
connect.rb
require "net/http"
require "uri"
DB_HOST = "<FQDN of any ClickHouse host>"
DB_NAME = "<DB name>"
DB_USER = "<DB user name>"
DB_PASS = "<DB user password>"
QUERYSTRING = { :database => DB_NAME, :query => "SELECT version()" }
uri = URI("http://" + DB_HOST + "/")
uri.port = 8123
uri.query = URI.encode_www_form(QUERYSTRING)
req = Net::HTTP::Get.new(uri)
req.add_field("X-ClickHouse-User", DB_USER)
req.add_field("X-ClickHouse-Key", DB_PASS)
conn = Net::HTTP.new(uri.host, uri.port)
rs = conn.request(req)
puts rs.body
connect.rb
require "net/http"
require "openssl"
require "uri"
DB_HOST = "<FQDN of any ClickHouse host>"
DB_NAME = "<DB name>"
DB_USER = "<DB user name>"
DB_PASS = "<DB user password>"
QUERYSTRING = { :database => DB_NAME, :query => "SELECT version()" }
uri = URI("https://" + DB_HOST + "/")
uri.port = 8443
uri.query = URI.encode_www_form(QUERYSTRING)
req = Net::HTTP::Get.new(uri)
req.add_field("X-ClickHouse-User", DB_USER)
req.add_field("X-ClickHouse-Key", DB_PASS)
conn = Net::HTTP.new(uri.host, uri.port)
conn.ca_file = "/usr/local/share/ca-certificates/NebiusAI/NebiusAICA.crt"
conn.use_ssl = true
conn.verify_mode = OpenSSL::SSL::VERIFY_PEER
rs = conn.request(req)
puts rs.body
Connection:
ruby connect.rb
Selecting an available host automatically
If you don't want to manually connect to another host in case the current one becomes unavailable, use an address like this:
-
c-<cluster ID>.rw.mdb.nemax.nebius.cloud
to connect to an available host in a cluster. -
<shard name>.c-<cluster ID>.rw.mdb.nemax.nebius.cloud
to connect to an available host in a shard.
If the host that this address points to becomes unavailable, there may be a slight delay before the address starts pointing to another available host.
Warning
If, under cluster maintenance, a special FQDN points to a host with no public access enabled, the cluster can't be connected to from the internet. To avoid this, public access should be enabled for all cluster hosts.