17 KiB
slug | sidebar_position | sidebar_label | title |
---|---|---|---|
/ja/operations/named-collections | 69 | Named collections | Named collections |
import CloudNotSupportedBadge from '@theme/badges/CloudNotSupportedBadge';
Named collectionsは外部ソースとの統合を構成するためのキー・バリューのペアのコレクションを保存する方法を提供します。Dictionary、テーブル、テーブル関数、およびオブジェクトストレージでNamed collectionsを使用できます。
Named collectionsはDDLまたは構成ファイルで構成可能で、ClickHouse起動時に適用されます。オブジェクトの作成を簡素化し、管理アクセス権のないユーザーから資格情報を隠すことができます。
Named collectionのキーは、対応する関数、テーブルエンジン、データベースなどのパラメータ名と一致する必要があります。以下の例では、各タイプにリンクされたパラメータリストがあります。
Named collectionで設定されたパラメータはSQLで上書き可能であることが、以下の例で示されています。この機能は[NOT] OVERRIDABLE
キーワードおよびXML属性、または構成オプションallow_named_collection_override_by_default
を使用して制限できます。
:::warning
上書きを許可すると、管理アクセス権のないユーザーが隠そうとしている資格情報を推測する可能性があります。
Named collectionsをその目的で使用している場合、allow_named_collection_override_by_default
(デフォルトで有効)は無効にしてください。
:::
システムデータベースでのNamed collectionsの保存
DDL例
CREATE NAMED COLLECTION name AS
key_1 = 'value' OVERRIDABLE,
key_2 = 'value2' NOT OVERRIDABLE,
url = 'https://connection.url/'
上記の例では:
key_1
は常に上書き可能です。key_2
は上書きできません。url
は、allow_named_collection_override_by_default
の値に応じて上書き可能です。
DDLを使用したNamed collections作成のための権限
DDLによってNamed collectionsを管理するには、ユーザーがnamed_collection_control
特権を持っている必要があります。これを割り当てるには、/etc/clickhouse-server/users.d/
にファイルを追加します。以下の例では、ユーザーdefault
にaccess_management
およびnamed_collection_control
の両方の特権を与えています:
<clickhouse>
<users>
<default>
<password_sha256_hex>65e84be33532fb784c48129675f9eff3a682b27168c0ea744b2cf58ee02337c5</password_sha256_hex replace=true>
<access_management>1</access_management>
<!-- highlight-start -->
<named_collection_control>1</named_collection_control>
<!-- highlight-end -->
</default>
</users>
</clickhouse>
:::tip
上記の例では、password_sha256_hex
の値はパスワードのSHA256ハッシュの16進数表現です。この設定では、ユーザーdefault
のreplace=true
属性があります。そのため、デフォルト設定ではプレーンテキストのpassword
が設定されており、プレーンテキストとsha256 hexの両方のパスワードを1人のユーザーに設定することはできません。
:::
Named collectionsの保存
Named collectionsは、ローカルディスクまたはZooKeeper/Keeperに保存できます。デフォルトではローカルストレージが使用されます。
また、disk encryptionで使用されるのと同じアルゴリズムで暗号化して保存することもできます。デフォルトではaes_128_ctr
が使用されます。
Named collectionsのストレージを構成するには、type
を指定する必要があります。これはlocal
またはkeeper
/zookeeper
のいずれかです。暗号化されたストレージの場合、local_encrypted
またはkeeper_encrypted
/zookeeper_encrypted
を使用できます。
ZooKeeper/Keeperを使用するには、ZooKeeper/KeeperでNamed collectionsが保存されるパスであるpath
を設定する必要があります。以下の例では、暗号化とZooKeeper/Keeperを使用しています:
<clickhouse>
<named_collections_storage>
<type>zookeeper_encrypted</type>
<key_hex>bebec0cabebec0cabebec0cabebec0ca</key_hex>
<algorithm>aes_128_ctr</algorithm>
<path>/named_collections_path/</path>
<update_timeout_ms>1000</update_timeout_ms>
</named_collections_storage>
</clickhouse>
オプションの構成パラメータであるupdate_timeout_ms
のデフォルトは5000
です。
構成ファイルでのNamed collectionsの保存
XML例
<clickhouse>
<named_collections>
<name>
<key_1 overridable="true">value</key_1>
<key_2 overridable="false">value_2</key_2>
<url>https://connection.url/</url>
</name>
</named_collections>
</clickhouse>
上記の例では:
key_1
は常に上書き可能です。key_2
は上書きできません。url
は、allow_named_collection_override_by_default
の値に応じて上書き可能です。
Named collectionsの修正
DDLクエリで作成されたNamed collectionsは、DDLを使用して変更または削除できます。XMLファイルで作成されたNamed collectionsは、対応するXMLを編集または削除して管理できます。
DDL Named collectionの変更
コレクションcollection2
のキーkey1
とkey3
を変更または追加します
(これにより、そのキーのoverridable
フラグの値は変更されません):
ALTER NAMED COLLECTION collection2 SET key1=4, key3='value3'
キーkey1
を変更または追加し、常に上書き可能にします:
ALTER NAMED COLLECTION collection2 SET key1=4 OVERRIDABLE
コレクションcollection2
からキーkey2
を削除します:
ALTER NAMED COLLECTION collection2 DELETE key2
コレクションcollection2
のキーkey1
を変更または追加し、キーkey3
を削除します:
ALTER NAMED COLLECTION collection2 SET key1=4, DELETE key3
overridable
フラグのデフォルト設定を使用するようにキーを強制するには、キーを削除して再追加する必要があります。
ALTER NAMED COLLECTION collection2 DELETE key1;
ALTER NAMED COLLECTION collection2 SET key1=4;
DDL Named collection collection2
の削除:
DROP NAMED COLLECTION collection2
S3へのアクセスのためのNamed collections
パラメータの説明はs3 Table Functionを参照してください。
DDL例
CREATE NAMED COLLECTION s3_mydata AS
access_key_id = 'AKIAIOSFODNN7EXAMPLE',
secret_access_key = 'wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY',
format = 'CSV',
url = 'https://s3.us-east-1.amazonaws.com/yourbucket/mydata/'
XML例
<clickhouse>
<named_collections>
<s3_mydata>
<access_key_id>AKIAIOSFODNN7EXAMPLE</access_key_id>
<secret_access_key>wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY</secret_access_key>
<format>CSV</format>
<url>https://s3.us-east-1.amazonaws.com/yourbucket/mydata/</url>
</s3_mydata>
</named_collections>
</clickhouse>
s3()関数とS3テーブルのNamed collection例
以下の例はどちらも同じNamed collection s3_mydata
を使用しています:
s3()関数
INSERT INTO FUNCTION s3(s3_mydata, filename = 'test_file.tsv.gz',
format = 'TSV', structure = 'number UInt64', compression_method = 'gzip')
SELECT * FROM numbers(10000);
:::tip
上記のs3()
関数の最初の引数はコレクション名、s3_mydata
です。Named collectionsがなければ、アクセスキーID、シークレット、フォーマット、URLをs3()
関数への各呼び出しで渡す必要があります。
:::
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データベースへのアクセスのためのNamed collections
パラメータの説明はmysqlを参照してください。
DDL例
CREATE NAMED COLLECTION mymysql AS
user = 'myuser',
password = 'mypass',
host = '127.0.0.1',
port = 3306,
database = 'test',
connection_pool_size = 8,
replace_query = 1
XML例
<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>
<replace_query>1</replace_query>
</mymysql>
</named_collections>
</clickhouse>
mysql()関数、MySQLテーブル、MySQLデータベース、およびDictionaryのNamed collection例
以下の4つの例は、すべて同じNamed collection mymysql
を使用しています:
mysql()関数
SELECT count() FROM mysql(mymysql, table = 'test');
┌─count()─┐
│ 3 │
└─────────┘
:::note
Named collectionはtable
パラメータを指定していないため、関数呼び出しでtable = 'test'
として指定されています。
:::
MySQLテーブル
CREATE TABLE mytable(A Int64) ENGINE = MySQL(mymysql, table = 'test', connection_pool_size=3, replace_query=0);
SELECT count() FROM mytable;
┌─count()─┐
│ 3 │
└─────────┘
:::note DDLがconnection_pool_sizeのNamed collection設定を上書きします。 :::
MySQLデータベース
CREATE DATABASE mydatabase ENGINE = MySQL(mymysql);
SHOW TABLES FROM mydatabase;
┌─name───┐
│ source │
│ test │
└────────┘
MySQL Dictionary
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データベースへのアクセスのためのNamed collections
パラメータの説明はpostgresqlを参照してください。さらに、以下のエイリアスがあります:
username
はuser
のエイリアスdb
はdatabase
のエイリアス
パラメータaddresses_expr
は、コレクション内でhost:port
の代わりに使用されます。パラメータはオプションであり、他のオプションもあります:host
、hostname
、port
。以下の疑似コードは優先順位を説明します:
CASE
WHEN collection['addresses_expr'] != '' THEN collection['addresses_expr']
WHEN collection['host'] != '' THEN collection['host'] || ':' || if(collection['port'] != '', collection['port'], '5432')
WHEN collection['hostname'] != '' THEN collection['hostname'] || ':' || if(collection['port'] != '', collection['port'], '5432')
END
作成例:
CREATE NAMED COLLECTION mypg AS
user = 'pguser',
password = 'jw8s0F4',
host = '127.0.0.1',
port = 5432,
database = 'test',
schema = 'test_schema'
構成例:
<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>
</mypg>
</named_collections>
</clickhouse>
postgresql関数でのNamed collectionsの使用例
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を使用したデータベースでのNamed collectionsの使用例
CREATE TABLE mypgtable (a Int64) ENGINE = PostgreSQL(mypg, table = 'test', schema = 'public');
SELECT * FROM mypgtable;
┌─a─┐
│ 1 │
│ 2 │
│ 3 │
└───┘
:::note PostgreSQLはテーブル作成時にNamed collectionからデータをコピーします。コレクションの変更は既存のテーブルに影響を与えません。 :::
エンジンPostgreSQLを使用したデータベースでのNamed collectionsの使用例
CREATE DATABASE mydatabase ENGINE = PostgreSQL(mypg);
SHOW TABLES FROM mydatabase
┌─name─┐
│ test │
└──────┘
ソースPOSTGRESQLを使用したDictionaryでのNamed collectionsの使用例
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 │
└─────────────────────────┘
リモートClickHouseデータベースへのアクセスのためのNamed collections
パラメータの説明はremoteを参照してください。
構成例:
CREATE NAMED COLLECTION remote1 AS
host = 'remote_host',
port = 9000,
database = 'system',
user = 'foo',
password = 'secret',
secure = 1
<clickhouse>
<named_collections>
<remote1>
<host>remote_host</host>
<port>9000</port>
<database>system</database>
<user>foo</user>
<password>secret</password>
<secure>1</secure>
</remote1>
</named_collections>
</clickhouse>
secure
は接続に必要ありませんが、dictionariesに使用できます。
remote
/remoteSecure
関数でのNamed collectionsの使用例
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を使用したDictionaryでのNamed collectionsの使用例
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 │
└─────────────────────────┘
KafkaへのアクセスのためのNamed collections
パラメータの説明はKafkaを参照してください。
DDL例
CREATE NAMED COLLECTION my_kafka_cluster AS
kafka_broker_list = 'localhost:9092',
kafka_topic_list = 'kafka_topic',
kafka_group_name = 'consumer_group',
kafka_format = 'JSONEachRow',
kafka_max_block_size = '1048576';
XML例
<clickhouse>
<named_collections>
<my_kafka_cluster>
<kafka_broker_list>localhost:9092</kafka_broker_list>
<kafka_topic_list>kafka_topic</kafka_topic_list>
<kafka_group_name>consumer_group</kafka_group_name>
<kafka_format>JSONEachRow</kafka_format>
<kafka_max_block_size>1048576</kafka_max_block_size>
</my_kafka_cluster>
</named_collections>
</clickhouse>
KafkaテーブルでのNamed collectionsの使用例
以下の例はどちらも同じNamed collection my_kafka_cluster
を使用しています:
CREATE TABLE queue
(
timestamp UInt64,
level String,
message String
)
ENGINE = Kafka(my_kafka_cluster)
CREATE TABLE queue
(
timestamp UInt64,
level String,
message String
)
ENGINE = Kafka(my_kafka_cluster)
SETTINGS kafka_num_consumers = 4,
kafka_thread_per_consumer = 1;