ApsaraDB for ClickHouse を使用して、Alibaba Cloud Object Storage Service (OSS) 内のデータをクエリしたり、ClickHouse データを OSS にエクスポートしたりできます。
前提条件
-
OSS の要件:
-
OSS が有効になっている必要があります。詳細については、「OSS の有効化」をご参照ください。
-
RAM ユーザーは OSS オブジェクトに対する読み取りおよび書き込み権限を持っている必要があります。詳細については、「権限とアクセスの制御の概要」をご参照ください。
-
-
クラスターの要件:
データベースアカウントが必要です。詳細については、「アカウント管理」をご参照ください。
前提条件
-
OSS バケットを作成します。詳細については、「コンソールでのバケットの作成」をご参照ください。
重要OSS バケットは、ご利用の ApsaraDB for ClickHouse クラスターと同じリージョンにある必要があります。
この例では、ck-test-oss という名前のバケットを使用します。
-
OSS にオブジェクトをアップロードします。
この例では、test.csv オブジェクトを使用します。このオブジェクトを OSS にアップロードしてください。詳細については、「オブジェクトのアップロード」をご参照ください。
独自のオブジェクトを使用する場合は、そのフォーマットがApsaraDB for ClickHouseでサポートされていることを確認してください。ApsaraDB for ClickHouse は、Protobuf および CapnProto を除くすべてのフォーマットをサポートしています。詳細については、「ClickHouse でサポートされるファイルフォーマット」をご参照ください。
OSS データのクエリ
方法 1:OSS 外部テーブル
Enterprise Edition または Community-compatible Edition(22.8 以降)
-
データベースにログインします。
-
ApsaraDB for ClickHouse コンソール にログインします。
-
クラスターリスト ページで、Community Edition インスタンスのリスト タブまたは Enterprise Edition インスタンスのリスト タブをクリックし、対象クラスターの ID をクリックします。
-
クラスター情報 ページの右上隅にある ログインデータベース をクリックします。
-
Hologres データベースへのログイン ダイアログボックスで、データベースアカウントとパスワードを入力し、ログイン をクリックします。
-
-
OSS 外部テーブルを作成します。
ApsaraDB for ClickHouse の OSS 外部テーブルを使用すると、データをローカル記憶域にインポートせずに OSS に保存されたオブジェクトを直接クエリでき、ストレージとコンピューティングを分離できます。
構文は次のとおりです。
CREATE TABLE <table_name> [ON cluster default] ( 'col_name1' col_type1, 'col_name2' col_type2, ... ) ENGINE = OSS('https://<bucket-name>.<oss-endpoint>/<file-name>', '<access-key-id>', '<access-key-secret>', '<file-format-name>');以下の表はパラメーターの説明です。
パラメーター
説明
例
table_name
テーブル名。
oss_test_tb
col_name1,col_name2
カラム名。
user_name
col_type1,col_type2
カラムのデータの型。
重要OSS 外部テーブルのスキーマは、OSS 内のデータと一致している必要があります。
String
bucket-name
OSS バケット名。
ck-test-oss
oss-endpoint
VPC 経由で ECS インスタンスから OSS バケットにアクセスするための内部エンドポイント。詳細については、「リージョンとエンドポイント」をご参照ください。
重要OSS バケットとご利用の ApsaraDB for ClickHouse クラスターが同じリージョンにあることを確認してください。
oss-cn-hangzhou-internal.aliyuncs.com
file-name
OSS バケット内のオブジェクト名。
test.csv
access-key-id
OSS データにアクセスするための RAM ユーザーの AccessKey ID。
yourAccessKeyID
access-key-secret
OSS データにアクセスするための RAM ユーザーの AccessKey Secret。
既存の AccessKey を使用するか、新しい AccessKey を作成できます。詳細については、「AccessKey の作成」をご参照ください。
重要AccessKey の漏洩リスクを軽減するため、AccessKey Secret は作成時のみ表示され、後から取得することはできません。AccessKey Secret は安全な場所に保管してください。
yourAccessKeySecret
file-format-name
オブジェクトのファイル形式。
重要値は、ClickHouse でサポートされている大文字小文字を区別するファイル形式である必要があります。詳細については、「ClickHouse でサポートされるファイル形式」をご参照ください。
CSV
例:
CREATE TABLE oss_test_tb ON cluster default ( id UInt8, user_name String, age UInt16, city String, access_url String ) ENGINE = OSS('http://ck-test-oss.oss-cn-hangzhou-internal.aliyuncs.com/test.csv', 'LTAI****************', 'yourAccessKeySecret','CSV') -
OSS データをクエリします。
SELECT * FROM oss_test_tb;次の結果が返されます。
+--------------+---------------------+---------------+----------------+----------------------+ | id | user_name | age | city | access_url | +--------------+---------------------+---------------+----------------+----------------------+ | 1 | tick | 32 | shanghai | http://example.com | +--------------+---------------------+---------------+----------------+----------------------+ Returned rows: [1], Time elapsed: [183ms]
Community-compatible Edition(21.8 以前)
-
データベースにログインします。
-
ApsaraDB for ClickHouse コンソール にログインします。
-
クラスターリスト ページで、Community Edition インスタンスのリスト タブをクリックし、対象クラスターの ID をクリックします。
-
クラスター情報 ページの右上隅にある ログインデータベース をクリックします。
-
Hologres データベースへのログイン ダイアログボックスで、データベースアカウントとパスワードを入力し、ログイン をクリックします。
-
-
OSS 外部テーブルを作成します。
構文は次のとおりです。
CREATE TABLE <table_name> [ON cluster default] ( 'col_name1' col_type1, 'col_name2' col_type2, ... ) ENGINE = OSS('<oss-endpoint>', '<access-key-id>', '<access-key-secret>', '<oss-file-path>', '<file-format-name>');以下の表はパラメーターの説明です。
パラメーター
説明
例
table_name
テーブル名。
oss_test_tb
col_name1,col_name2
カラム名。
user_name
col_type1,col_type2
カラムのデータの型。
重要OSS 外部テーブルのスキーマは、OSS 内のデータと一致している必要があります。
String
oss-endpoint
VPC 経由で ECS インスタンスから OSS バケットにアクセスするための内部エンドポイント。詳細については、「リージョンとエンドポイント」をご参照ください。
重要OSS バケットとご利用の ApsaraDB for ClickHouse クラスターが同じリージョンにあることを確認してください。
oss-cn-hangzhou-internal.aliyuncs.com
access-key-id
OSS データにアクセスするための RAM ユーザーの AccessKey ID。
yourAccessKeyID
access-key-secret
OSS データにアクセスするための RAM ユーザーの AccessKey Secret。
既存の AccessKey を使用するか、新しい AccessKey を作成できます。詳細については、「AccessKey の作成」をご参照ください。
重要AccessKey の漏洩リスクを軽減するため、AccessKey Secret は作成時のみ表示され、後から取得することはできません。AccessKey Secret は安全な場所に保管してください。
yourAccessKeySecret
oss-file-path
オブジェクトの保存パス。通常は
oss://<bucket-name>/<path-to-file>形式です。説明oss-file-pathパラメーターは、ワイルドカードを使用したあいまい一致をサポートしています。詳細については、「OSS での保存パスのワイルドカードによるあいまい一致」をご参照ください。oss://ck-test-oss/test.csv
file-format-name
オブジェクトのファイル形式。
重要値は、ClickHouse でサポートされている大文字小文字を区別するファイル形式である必要があります。詳細については、「ClickHouse でサポートされるファイル形式」をご参照ください。
CSV
例:
CREATE TABLE oss_test_tb ON cluster default ( id UInt8, user_name String, age UInt16, city String, access_url String ) ENGINE = OSS('oss-cn-hangzhou-internal.aliyuncs.com', 'LTAI****************', 'yourAccessKeySecret', 'oss://ck-test-oss/test.csv', 'CSV'); -
OSS データをクエリします。
SELECT * FROM oss_test_tb;次の結果が返されます。
+--------------+---------------------+---------------+----------------+----------------------+ | id | user_name | age | city | access_url | +--------------+---------------------+---------------+----------------+----------------------+ | 1 | tick | 32 | shanghai | http://example.com | +--------------+---------------------+---------------+----------------+----------------------+ Returned rows: [1], Time elapsed: [183ms]
方法 2:テーブル関数
Enterprise Edition または Community-compatible Edition(22.8 以降)
-
データベースにログインします。
-
ApsaraDB for ClickHouse コンソール にログインします。
-
クラスターリスト ページで、Community Edition インスタンスのリスト タブまたは Enterprise Edition インスタンスのリスト タブをクリックし、対象クラスターの ID をクリックします。
-
クラスター情報 ページの右上隅にある ログインデータベース をクリックします。
-
Hologres データベースへのログイン ダイアログボックスで、データベースアカウントとパスワードを入力し、ログイン をクリックします。
-
-
テーブル関数を使用してデータをクエリします。
構文は次のとおりです。
SELECT * FROM oss('https://<bucket-name>.<oss-endpoint>/<file-name>','<access-key-id>', '<access-key-secret>', '<file-format-name>', '<col_name> <col_type>(,...)');パラメーターは、OSS 外部テーブルを作成する場合と同じです。詳細については、「パラメーターの説明」をご参照ください。
例:
SELECT * FROM oss('http://testBucketName.oss-cn-shanghai-internal.aliyuncs.com/test.csv', 'LTAI****************', 'yourAccessKeySecret', 'CSV', 'id UInt8, user_name String, age UInt16, city String, access_url String')次の結果が返されます。
+--------------+---------------------+---------------+----------------+----------------------+ | id | user_name | age | city | access_url | +--------------+---------------------+---------------+----------------+----------------------+ | 1 | tick | 32 | shanghai | http://example.com | +--------------+---------------------+---------------+----------------+----------------------+ Returned rows: [1], Time elapsed: [183ms]
Community-compatible Edition(21.8 以前)
-
データベースにログインします。
-
ApsaraDB for ClickHouse コンソール にログインします。
-
クラスターリスト ページで、Community Edition インスタンスのリスト タブをクリックし、対象クラスターの ID をクリックします。
-
クラスター情報 ページの右上隅にある ログインデータベース をクリックします。
-
Hologres データベースへのログイン ダイアログボックスで、データベースアカウントとパスワードを入力し、ログイン をクリックします。
-
-
テーブル関数を使用してデータをクエリします。
構文は次のとおりです。
SELECT * FROM oss('<oss-endpoint>', '<access-key-id>', '<access-key-secret>', '<oss-file-path>', '<file-format-name>', '<col_name> <col_type>(,...)');パラメーターは、OSS 外部テーブルを作成する場合と同じです。詳細については、「パラメーターの説明」をご参照ください。
例:
SELECT * FROM oss('oss-cn-hangzhou-internal.aliyuncs.com', 'LTAI****************', 'yourAccessKeySecret', 'oss://ck-test-oss/test.csv', 'CSV', 'id UInt8, user_name String, age UInt16, city String, access_url String');次の結果が返されます。
+--------------+---------------------+---------------+----------------+----------------------+ | id | user_name | age | city | access_url | +--------------+---------------------+---------------+----------------+----------------------+ | 1 | tick | 32 | shanghai | http://example.com | +--------------+---------------------+---------------+----------------+----------------------+ Returned rows: [1], Time elapsed: [183ms]
ClickHouse データのエクスポートまたはデータの OSS への書き込み
注意事項
Enterprise Edition または Community-compatible Edition 22.8 以降
OSS にデータをエクスポートまたは書き込む際は、s3_truncate_on_insert=1 または s3_create_new_file_on_insert=1 を設定する必要があります。どちらのパラメーターも設定されていない場合、または両方とも 0 に設定されている場合は、宛先パスにファイルがすでに存在すると操作が失敗します。
-
s3_truncate_on_insert=1:ApsaraDB for ClickHouse は、宛先パスにファイルが存在するかどうかを確認します。-
ファイルが存在する場合、ClickHouse は新しいデータで既存のファイルを上書きします。
-
この方法は、完全上書きエクスポートまたは書き込みに適しています。ただし、この操作により元のデータが削除されるため、十分に注意してください。
-
-
s3_create_new_file_on_insert=1:ClickHouse は、宛先パスにファイルが存在するかどうかを確認します。-
ファイルが既に存在する場合、ClickHouse はディレクトリ内に新しいファイルを作成し、そのファイルにデータを書き込みます。新しいファイル名は、次のパターンに従って生成されます:
対象ファイル名 + シーケンス番号(0 から開始し、1 ずつ増分)+ ファイル形式名。たとえば、対象ファイルが
test.csvの場合、最初の操作ではtest0.csvが作成され、2 回目の操作ではtest1.csvが作成されます。 -
この方法は、増分エクスポートまたは書き込みに適しており、既存のデータを上書きしません。
-
Community-compatible Edition 21.8 以前
データをエクスポートまたは書き込む際は、単一の OSS ファイルのみが使用されます。新しいデータは、元のファイルの内容を上書きします。十分に注意してください。
ステップ 1:データベースにログイン
-
ApsaraDB for ClickHouse コンソール にログインします。
-
クラスターリスト ページで、Community Edition インスタンスのリスト タブまたは Enterprise Edition インスタンスのリスト タブをクリックし、対象クラスターの ID をクリックします。
-
クラスター情報 ページの右上隅にある ログインデータベース をクリックします。
-
Hologres データベースへのログイン ダイアログボックスで、データベースアカウントとパスワードを入力し、ログイン をクリックします。
手順 2: (オプション)エクスポート用のデータを準備する
ApsaraDB for ClickHouse から OSS にエクスポートするサンプルデータを準備する必要がある場合は、次の手順に従ってください。
すでにエクスポートするデータがある場合は、このステップをスキップしてください。
-
ご利用のクラスターエディションに基づいてテーブルを作成します。
この例では、シングルレプリカ の Community-compatible Edition クラスターでテーブルを作成します。ご利用のクラスターが ダブルレプリカ クラスターで Enterprise Edition または Community-compatible Edition を実行している場合は、「テーブルの作成」をご参照ください。
CREATE TABLE test_tb_local ON cluster default ( id UInt8, user_name String, age UInt16, city String, access_url String ) ENGINE = MergeTree() ORDER BY id; -
サンプルデータを挿入します。
INSERT INTO test_tb_local VALUES (13, 'tick', 25, 'shanghai', 'http://example.com'); -
(任意)データを表示します。
次の文を実行して、データが挿入されたことを確認します。
SELECT * FROM test_tb_local;
ステップ 3:OSS 外部テーブルを作成
Enterprise Edition または Community-compatible Edition 22.8 以降
構文は次のとおりです。
CREATE TABLE <table_name> [ON cluster default]
(
'col_name1' col_type1,
'col_name2' col_type2,
...
)
ENGINE = OSS('https://<bucket-name>.<oss-endpoint>/<file-name>', '<access-key-id>', '<access-key-secret>', '<file-format-name>');
以下の表はパラメーターの説明です。
|
パラメーター |
説明 |
例 |
|
table_name |
テーブル名。 |
oss_test_tb |
|
col_name1,col_name2 |
カラム名。 |
user_name |
|
col_type1,col_type2 |
カラムのデータの型。 重要
OSS 外部テーブルのスキーマは、OSS 内のデータと一致している必要があります。 |
String |
|
bucket-name |
OSS バケット名。 |
ck-test-oss |
|
oss-endpoint |
VPC 経由で ECS インスタンスから OSS バケットにアクセスするための内部エンドポイント。詳細については、「リージョンとエンドポイント」をご参照ください。 重要
OSS バケットとご利用の ApsaraDB for ClickHouse クラスターが同じリージョンにあることを確認してください。 |
oss-cn-hangzhou-internal.aliyuncs.com |
|
file-name |
OSS バケット内のオブジェクト名。 |
test.csv |
|
access-key-id |
OSS データにアクセスするための RAM ユーザーの AccessKey ID。 |
yourAccessKeyID |
|
access-key-secret |
OSS データにアクセスするための RAM ユーザーの AccessKey Secret。 既存の AccessKey を使用するか、新しい AccessKey を作成できます。詳細については、「AccessKey の作成」をご参照ください。 重要
AccessKey の漏洩リスクを軽減するため、AccessKey Secret は作成時のみ表示され、後から取得することはできません。AccessKey Secret は安全な場所に保管してください。 |
yourAccessKeySecret |
|
file-format-name |
オブジェクトのファイル形式。 重要
値は、ClickHouse でサポートされている大文字小文字を区別するファイル形式である必要があります。詳細については、「ClickHouse でサポートされるファイル形式」をご参照ください。 |
CSV |
例:
CREATE TABLE oss_test_tb ON cluster default
(
id UInt8,
user_name String,
age UInt16,
city String,
access_url String
)
ENGINE = OSS('http://ck-test-oss.oss-cn-hangzhou-internal.aliyuncs.com/test.csv', 'LTAI****************', 'yourAccessKeySecret','CSV')
Community 互換エディション 21.8 以前
構文は次のとおりです。
CREATE TABLE <table_name> [ON cluster default]
(
'col_name1' col_type1,
'col_name2' col_type2,
...
)
ENGINE = OSS('<oss-endpoint>', '<access-key-id>', '<access-key-secret>', '<oss-file-path>', '<file-format-name>');
以下の表はパラメーターの説明です。
|
パラメーター |
説明 |
例 |
|
table_name |
テーブル名。 |
oss_test_tb |
|
col_name1,col_name2 |
カラム名。 |
user_name |
|
col_type1,col_type2 |
カラムのデータの型。 重要
OSS 外部テーブルのスキーマは、OSS 内のデータと一致している必要があります。 |
String |
|
oss-endpoint |
VPC 経由で ECS インスタンスから OSS バケットにアクセスするための内部エンドポイント。詳細については、「リージョンとエンドポイント」をご参照ください。 重要
OSS バケットとご利用の ApsaraDB for ClickHouse クラスターが同じリージョンにあることを確認してください。 |
oss-cn-hangzhou-internal.aliyuncs.com |
|
access-key-id |
OSS データにアクセスするための RAM ユーザーの AccessKey ID。 |
yourAccessKeyID |
|
access-key-secret |
OSS データにアクセスするための RAM ユーザーの AccessKey Secret。 既存の AccessKey を使用するか、新しい AccessKey を作成できます。詳細については、「AccessKey の作成」をご参照ください。 重要
AccessKey の漏洩リスクを軽減するため、AccessKey Secret は作成時のみ表示され、後から取得することはできません。AccessKey Secret は安全な場所に保管してください。 |
yourAccessKeySecret |
|
oss-file-path |
オブジェクトの保存パス。通常は 説明
|
oss://ck-test-oss/test.csv |
|
file-format-name |
オブジェクトのファイル形式。 重要
値は、ClickHouse でサポートされている大文字小文字を区別するファイル形式である必要があります。詳細については、「ClickHouse でサポートされるファイル形式」をご参照ください。 |
CSV |
例:
CREATE TABLE oss_test_tb ON cluster default
(
id UInt8,
user_name String,
age UInt16,
city String,
access_url String
)
ENGINE = OSS('oss-cn-hangzhou-internal.aliyuncs.com', 'LTAI****************', 'yourAccessKeySecret', 'oss://ck-test-oss/test.csv', 'CSV');
ステップ 4:OSS へのデータのエクスポートまたは書き込み
OSS 外部テーブルに対して INSERT INTO 文を使用して、OSS にデータをエクスポートまたは書き込みます。構文の詳細については、「INSERT INTO」をご参照ください。
ClickHouse データのエクスポート
Enterprise Edition または Community-compatible Edition 22.8 以降
-
完全上書きエクスポート(OSS にデータをエクスポートし、既存のデータを上書き)。
INSERT INTO oss_test_tb SETTINGS s3_truncate_on_insert = 1 SELECT * FROM test_tb_local; -
増分エクスポート(OSS にデータをエクスポートし、既存のデータを上書きしない)。
INSERT INTO oss_test_tb SETTINGS s3_create_new_file_on_insert = 1 SELECT * FROM test_tb_local;この操作により、OSS バケット内に新しいファイルが作成されます。新しいファイル名は、次のパターンで生成されます。
ターゲットファイル名 + シーケンス番号(0 から始まり、1 ずつ増加) + ファイル形式名。たとえば、OSS 外部テーブルを作成する際に指定するターゲットファイル名が
test.csvの場合、新しいファイル名はtest0.csvになります。この操作を再度実行すると、新しいファイル名はtest1.csvになります。OSS コンソール を使用して、新しいファイルを表示できます。
Community-compatible Edition 21.8 以前
ApsaraDB for ClickHouse データを OSS にエクスポートすると、既存のデータが上書きされます。十分に注意してください。
INSERT INTO oss_test_tb SELECT * FROM test_tb_local;
データの書き込み
Enterprise Edition または Community-compatible Edition 22.8 以降
-
OSS に新しいデータを書き込み、既存のデータを上書き。
INSERT INTO oss_test_tb SETTINGS s3_truncate_on_insert = 1 VALUES (14, 'tick', 25, 'shanghai', 'http://example.com'); -
OSS に新しいデータを書き込み、既存のデータを上書きしない。
INSERT INTO oss_test_tb SETTINGS s3_create_new_file_on_insert = 1 VALUES (14, 'tick', 25, 'shanghai', 'http://example.com');この操作により、OSS バケット内に新しいファイルが作成されます。新しいファイル名は、次のパターンで生成されます。
ターゲットファイル名 + シーケンス番号(0 から始まり、1 ずつ増加) + ファイル形式名。たとえば、OSS外部テーブルを作成する際に指定するターゲットファイル名が
test.csvの場合、新しいファイル名はtest0.csvになります。この操作を再度実行すると、新しいファイル名はtest1.csvになります。OSSコンソール を使用して、新しいファイルを表示できます。
Community-compatible Edition 21.8 以前
ApsaraDB for ClickHouse から OSS にデータを書き込むと、既存のデータが上書きされます。十分に注意してください。
INSERT INTO oss_test_tb SETTINGS s3_truncate_on_insert = 1 VALUES (14, 'tick', 25, 'shanghai', 'http://example.com');
関連操作:OSS データの ClickHouse へのインポート
データ移行の中間ストレージとして OSS を使用する場合は、OSS から宛先クラスターにデータをインポートする必要があります。詳細については、「OSS からのデータのインポート」をご参照ください。