ClickHouse/docs/ru/operations/named-collections.md
2023-01-28 02:21:00 +03:00

9.1 KiB
Raw Blame History

slug sidebar_position sidebar_label
/ru/operations/named-collections 69 Именованные соединения

Хранение реквизитов для подключения к внешним источникам в конфигурационных файлах

Реквизиты для подключения к внешним источникам (словарям, таблицам, табличным функциям) можно сохранить в конфигурационных файлах и таким образом упростить создание объектов и скрыть реквизиты (пароли) от пользователей, имеющих только SQL доступ.

Параметры можно задать в XML <format>CSV</format> и переопределить в SQL , format = 'TSV'. При использовании именованных соединений, параметры в SQL задаются в формате ключ = значение: compression_method = 'gzip'.

Именованные соединения хранятся в файле config.xml сервера ClickHouse в секции <named_collections> и применяются при старте ClickHouse.

Пример конфигурации:

$ cat /etc/clickhouse-server/config.d/named_collections.xml
<clickhouse>
     <named_collections>
     ...
     </named_collections>
</clickhouse>

Именованные соединения для доступа к S3

Описание параметров смотрите Табличная Функция S3.

Пример конфигурации:

<clickhouse>
    <named_collections>
        <s3_mydata>
            <access_key_id>AKIAIOSFODNN7EXAMPLE</access_key_id>
            <secret_access_key> wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY</secret_access_key>
            <format>CSV</format>
        </s3_mydata>
    </named_collections>
</clickhouse>

Пример использования именованных соединений с функцией s3

INSERT INTO FUNCTION s3(s3_mydata, url = 'https://s3.us-east-1.amazonaws.com/yourbucket/mydata/test_file.tsv.gz',
   format = 'TSV', structure = 'number UInt64', compression_method = 'gzip')
SELECT * FROM numbers(10000);

SELECT count()
FROM s3(s3_mydata, url = 'https://s3.us-east-1.amazonaws.com/yourbucket/mydata/test_file.tsv.gz')

┌─count()─┐
   10000 
└─────────┘
1 rows in set. Elapsed: 0.279 sec. Processed 10.00 thousand rows, 90.00 KB (35.78 thousand rows/s., 322.02 KB/s.)

Пример использования именованных соединений с таблицей S3

CREATE TABLE s3_engine_table (number Int64)
ENGINE=S3(s3_mydata, url='https://s3.us-east-1.amazonaws.com/yourbucket/mydata/test_file.tsv.gz', format = 'TSV')
SETTINGS input_format_with_names_use_header = 0;

SELECT * FROM s3_engine_table LIMIT 3;
┌─number─┐
      0 
      1 
      2 
└────────┘

Пример использования именованных соединений с базой данных MySQL

Описание параметров смотрите mysql.

Пример конфигурации:

<clickhouse>
    <named_collections>
        <mymysql>
            <user>myuser</user>
            <password>mypass</password>
            <host>127.0.0.1</host>
            <port>3306</port>
            <database>test</database>
            <connection_pool_size>8</connection_pool_size>
            <on_duplicate_clause>1</on_duplicate_clause>
            <replace_query>1</replace_query>
        </mymysql>
    </named_collections>
</clickhouse>

Пример использования именованных соединений с табличной функцией mysql

SELECT count() FROM mysql(mymysql, table = 'test');

┌─count()─┐
       3 
└─────────┘

Пример использования именованных соединений таблицей с движком mysql

CREATE TABLE mytable(A Int64) ENGINE = MySQL(mymysql, table = 'test', connection_pool_size=3, replace_query=0);
SELECT count() FROM mytable;

┌─count()─┐
       3 
└─────────┘

Пример использования именованных соединений базой данных с движком MySQL

CREATE DATABASE mydatabase ENGINE = MySQL(mymysql);

SHOW TABLES FROM mydatabase;

┌─name───┐
 source 
 test   
└────────┘

Пример использования именованных соединений с внешним словарем с источником mysql

CREATE DICTIONARY dict (A Int64, B String)
PRIMARY KEY A
SOURCE(MYSQL(NAME mymysql TABLE 'source'))
LIFETIME(MIN 1 MAX 2)
LAYOUT(HASHED());

SELECT dictGet('dict', 'B', 2);

┌─dictGet('dict', 'B', 2)─┐
 two                     
└─────────────────────────┘

Пример использования именованных соединений с базой данных PostgreSQL

Описание параметров смотрите postgresql.

Пример конфигурации:

<clickhouse>
    <named_collections>
        <mypg>
            <user>pguser</user>
            <password>jw8s0F4</password>
            <host>127.0.0.1</host>
            <port>5432</port>
            <database>test</database>
            <schema>test_schema</schema>
            <connection_pool_size>8</connection_pool_size>
        </mypg>
    </named_collections>
</clickhouse>

Пример использования именованных соединений с табличной функцией postgresql

SELECT * FROM postgresql(mypg, table = 'test');

┌─a─┬─b───┐
 2  two 
 1  one 
└───┴─────┘


SELECT * FROM postgresql(mypg, table = 'test', schema = 'public');

┌─a─┐
 1 
 2 
 3 
└───┘

Пример использования именованных соединений таблицей с движком PostgreSQL

CREATE TABLE mypgtable (a Int64) ENGINE = PostgreSQL(mypg, table = 'test', schema = 'public');

SELECT * FROM mypgtable;

┌─a─┐
 1 
 2 
 3 
└───┘

Пример использования именованных соединений базой данных с движком PostgreSQL

CREATE DATABASE mydatabase ENGINE = PostgreSQL(mypg);

SHOW TABLES FROM mydatabase

┌─name─┐
 test 
└──────┘

Пример использования именованных соединений с внешним словарем с источником POSTGRESQL

CREATE DICTIONARY dict (a Int64, b String)
PRIMARY KEY a
SOURCE(POSTGRESQL(NAME mypg TABLE test))
LIFETIME(MIN 1 MAX 2)
LAYOUT(HASHED());

SELECT dictGet('dict', 'b', 2);

┌─dictGet('dict', 'b', 2)─┐
 two                     
└─────────────────────────┘

Пример использования именованных соединений с удалённой базой данных Сlickhouse

Описание параметров смотрите remote.

Пример конфигурации:

<clickhouse>
    <named_collections>
        <remote1>
            <host>remote_host</host>
            <port>9000</port>
            <database>system</database>
            <user>foo</user>
            <password>secret</password>
        </remote1>
    </named_collections>
</clickhouse>

Пример использования именованных соединений с табличной функцией remote/remoteSecure

SELECT * FROM remote(remote1, table = one);
┌─dummy─┐
     0 
└───────┘

SELECT * FROM remote(remote1, database = merge(system, '^one'));
┌─dummy─┐
     0 
└───────┘

INSERT INTO FUNCTION remote(remote1, database = default, table = test) VALUES (1,'a');

SELECT * FROM remote(remote1, database = default, table = test);
┌─a─┬─b─┐
 1  a 
└───┴───┘

Пример использования именованных соединений с внешним словарем с источником удалённым сервером Clickhouse

CREATE DICTIONARY dict(a Int64, b String)
PRIMARY KEY a
SOURCE(CLICKHOUSE(NAME remote1 TABLE test DB default))
LIFETIME(MIN 1 MAX 2)
LAYOUT(HASHED());

SELECT dictGet('dict', 'b', 1);
┌─dictGet('dict', 'b', 1)─┐
 a                       
└─────────────────────────┘