このトピックでは、ApsaraDB for ClickHouse を使用して Alibaba Cloud Object Storage Service (OSS) のデータをクエリする方法について説明します。また、OSS にデータを書き込む方法、または ClickHouse から OSS にデータをエクスポートする方法についても説明します。
前提条件
OSS の要件:
OSS サービスがアクティブ化されていること。詳細については、「OSS のアクティブ化」をご参照ください。
OSS へのアクセスに使用する Resource Access Management (RAM) ユーザーが、OSS オブジェクトに対する読み取りおよび書き込み権限を持っていること。詳細については、「権限とアクセスの制御の概要」をご参照ください。
クラスターの要件:
データベースアカウントが作成されていること。詳細については、「アカウント管理」をご参照ください。
事前準備
OSS バケットの作成。詳細については、「コンソールでのバケット作成」をご参照ください。
重要OSS バケットが、ご利用の ApsaraDB for ClickHouse クラスターと同じリージョンにあることを確認してください。
このトピックでは、`ck-test-oss` という名前のバケットを例として使用します。
ファイルをアップロードします。
このトピックでは、test.csv ファイルを例として使用します。開始する前に、このファイルを OSS にアップロードしてください。OSS にアップロードされたファイルはオブジェクトと呼ばれます。詳細については、「コンソールを使用したオブジェクトのアップロード」をご参照ください。
すでに OSS にデータがある場合は、そのデータが ApsaraDB for ClickHouse でアクセス可能なファイル形式であることを確認してください。Protobuf と CapnProto を除くすべての形式がサポートされています。詳細については、「ClickHouse がサポートするファイル形式」をご参照ください。
OSS データのクエリ
方法1:OSS 外部テーブルの使用
Enterprise Edition または Community-compatible Edition v22.8 以降
データベースへのログイン
ApsaraDB for ClickHouse コンソールにログインします。
クラスターリスト ページで、Community Edition インスタンスのリスト タブまたは Enterprise Edition インスタンスのリスト タブを選択し、対象クラスターの ID をクリックします。
クラスター情報 ページで、右上の ログインデータベース をクリックします。
[インスタンスにログイン] ダイアログボックスで、データベースアカウントとパスワードを入力し、[ログイン] をクリックします。
OSS 外部テーブルの作成
OSS 外部テーブルは ApsaraDB for ClickHouse の特殊なテーブルタイプで、データをローカルストレージにインポートすることなく、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 バケットとご利用の 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 Secret は作成時にのみ表示され、後から取得することはできません。安全な場所に保管してください。
yourAccessKeySecret
file-format-name
ファイル形式
重要このパラメーターは、「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 v21.8 以前
データベースへのログイン
ApsaraDB for ClickHouse コンソールにログインします。
クラスターリスト ページで、Community Edition インスタンスのリスト タブをクリックし、対象クラスターの ID をクリックします。
クラスター情報 ページで、右上の ログインデータベース をクリックします。
[インスタンスにログイン] ダイアログボックスで、データベースアカウントとパスワードを入力し、[ログイン] をクリックします。
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 バケットとご利用の 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 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 がサポートするファイル形式」に記載されているとおりに正確に指定する必要があります。名前は大文字と小文字が区別されます。
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 v22.8 以降
データベースへのログイン
ApsaraDB for ClickHouse コンソールにログインします。
クラスターリスト ページで、Community Edition インスタンスのリスト タブまたは Enterprise Edition インスタンスのリスト タブを選択し、対象クラスターの ID をクリックします。
クラスター情報 ページで、右上の ログインデータベース をクリックします。
[インスタンスにログイン] ダイアログボックスで、データベースアカウントとパスワードを入力し、[ログイン] をクリックします。
テーブル関数を使用したデータのクエリ
構文:
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 v21.8 以前
データベースへのログイン
ApsaraDB for ClickHouse コンソールにログインします。
クラスターリスト ページで、Community Edition インスタンスのリスト タブをクリックし、対象クラスターの ID をクリックします。
クラスター情報 ページで、右上の ログインデータベース をクリックします。
[インスタンスにログイン] ダイアログボックスで、データベースアカウントとパスワードを入力し、[ログイン] をクリックします。
テーブル関数を使用したデータのクエリ
構文:
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 v22.8 以降
ClickHouse から OSS にデータをエクスポートする場合、または 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から始まる増分番号 + ファイル形式名の形式で命名されます。たとえば、OSS 外部テーブルの作成時に指定した宛先オブジェクトが test.csv の場合、最初の操作後の新しいオブジェクト名は test0.csv になります。2回目の操作後、新しいオブジェクト名は test1.csv になります。
この方法は、増分エクスポートまたは書き込みのシナリオに適しており、既存データの上書きを回避します。
Community-compatible Edition v21.8 以前
ClickHouse から OSS にデータをエクスポートする場合、または OSS に直接データを書き込む場合、使用される OSS オブジェクトは1つだけです。エクスポートまたは書き込まれたデータは、元のオブジェクトの内容を上書きします。この操作は慎重に行ってください。
ステップ1:データベースへのログイン
ApsaraDB for ClickHouse コンソールにログインします。
クラスターリスト ページで、Community Edition インスタンスのリスト タブまたは Enterprise Edition インスタンスのリスト タブを選択し、対象クラスターの ID をクリックします。
クラスター情報 ページで、右上の ログインデータベース をクリックします。
[インスタンスにログイン] ダイアログボックスで、データベースアカウントとパスワードを入力し、[ログイン] をクリックします。
ステップ2:(任意) エクスポートするデータの準備
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 v22.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 バケットとご利用の 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 Secret は作成時にのみ表示され、後から取得することはできません。安全な場所に保管してください。 | yourAccessKeySecret |
file-format-name | ファイル形式 重要 このパラメーターは、「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-compatible Edition v21.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 バケットとご利用の 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 Secret は作成時にのみ表示され、後から取得することはできません。安全な場所に保管してください。 | yourAccessKeySecret |
oss-file-path | オブジェクトのストレージパス。形式は通常 説明
| oss://ck-test-oss/test.csv |
file-format-name | ファイル形式 重要 このパラメーターは、「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 にデータをエクスポートまたは書き込むには、OSS 外部テーブルと INSERT INTO ステートメントを使用します。構文の詳細については、「INSERT INTO」をご参照ください。次の例は、さまざまなシナリオのステートメントを示しています。
ClickHouse データのエクスポート
Enterprise Edition または Community-compatible Edition v22.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 v21.8 以前
ClickHouse データを OSS にエクスポートすると、既存のデータが上書きされます。この操作は慎重に行ってください。
INSERT INTO oss_test_tb SELECT * FROM test_tb_local;データの書き込み
Enterprise Edition または Community-compatible Edition v22.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 v21.8 以前
ClickHouse から OSS にデータを書き込むと、既存のデータが上書きされます。この操作は慎重に行ってください。
INSERT INTO oss_test_tb SETTINGS s3_truncate_on_insert = 1 VALUES (14, 'tick', 25, 'shanghai', 'http://example.com');関連操作:OSS データの ClickHouse へのインポート
OSS を使用してソースデータをステージングし、ClickHouse に移行する場合は、OSS から移行先の ClickHouse クラスターにデータをインポートする必要もあります。詳細については、「OSS からのデータインポート」をご参照ください。