テーブルエンジンまたはテーブル関数を使用して、Object Storage Service (OSS) から ApsaraDB for ClickHouse にデータをインポートして、ログのクエリ、分析、および処理を行うことができます。このトピックでは、OSS から ApsaraDB for ClickHouse にデータをインポートする方法について説明します。
前提条件
OSS がアクティブ化されていること。 OSS をアクティブ化する方法の詳細については、「OSS をアクティブ化する」(OSS コンソールを使用して開始するトピック内) をご参照ください。
バケットが作成されていること。バケットと ApsaraDB for ClickHouse クラスタは同じリージョンにデプロイされていること。バケットの作成方法の詳細については、「バケットを作成する」(OSS コンソールを使用して開始するトピック内) をご参照ください。
OSS バケットへのアクセスに使用する Alibaba Cloud アカウントに、バケット内のオブジェクトに対する読み取り権限が付与されていること。権限の付与方法の詳細については、「概要」をご参照ください。
データの準備
test.csv という名前の CSV ファイルに次のテストデータを保存し、ファイルを OSS にアップロードします。データをインポートする場合、ApsaraDB for ClickHouse クラスタでサポートされるデフォルトの列区切り文字はカンマ (,) です。データのアップロード方法の詳細については、「オブジェクトをアップロードする」(OSS コンソールを使用して開始するトピック内) をご参照ください。
1,yang,32,shanghai,http://example1.com
2,wang,22,beijing,http://example2.com
3,xiao,23,shenzhen,http://example3.com
4,jess,45,hangzhou,http://example4.com
5,jack,14,shanghai,http://example5.com
6,tomy,25,hangzhou,http://example6.com
7,lucy,45,shanghai,http://example7.com
8,tengyin,26,shanghai,http://example8.com
9,wangli,27,shenzhen,http://example9.com
10,xiaohua,37,shanghai,http://example10.com手順
ApsaraDB for ClickHouse クラスタに接続します。詳細については、「ApsaraDB for ClickHouse クラスタに接続する」をご参照ください。
oss_test_tbl_localという名前のローカルテーブルを作成します。重要ApsaraDB for ClickHouse テーブルは、OSS 外部テーブルと同じスキーマを使用し、OSS 外部テーブルのデータ形式 (特に null フィールドの場合) と互換性がある必要があります。これにより、データ解析の失敗によって発生するクラスタの問題を防ぐことができます。
ローカルテーブルを作成するには、ApsaraDB for ClickHouse クラスタのエディションに基づいてステートメントを実行する必要があります。左側のナビゲーションウィンドウで [クラスタ情報] をクリックし、[クラスタのプロパティ] セクションでクラスタのエディションを確認できます。
ビジネス要件に基づいてテーブルエンジンを選択できます。テーブルエンジンの詳細については、「テーブルエンジン」をご参照ください。
単一レプリカエディションのクラスタでローカルテーブルを作成するために使用するステートメント
CREATE TABLE oss_test_tbl_local ON CLUSTER default ( id UInt8, user_name String, age UInt16, city String, access_url String ) ENGINE = MergeTree() ORDER BY id;二重レプリカエディションのクラスタでローカルテーブルを作成するために使用するステートメント
CREATE TABLE oss_test_tbl_local ON CLUSTER default ( id UInt8, user_name String, age UInt16, city String, access_url String ) ENGINE = ReplicatedMergeTree('/clickhouse/tables/{database}/{table}/{shard}', '{replica}') ORDER BY id;(オプション)
oss_test_tbl_distributedという名前の分散テーブルを作成します。説明コレクション内の各ローカルテーブルにデータを配布する場合は、分散テーブルを作成する必要があります。
CREATE TABLE oss_test_tbl_distributed ON CLUSTER default ( id UInt8, user_name String, age UInt16, city String, access_url String ) ENGINE = Distributed(default, default, oss_test_tbl_local, rand());OSS から ApsaraDB for ClickHouse にデータをインポートします。
テーブルエンジンまたはテーブル関数を使用して、OSS から ApsaraDB for ClickHouse にデータをインポートできます。
重要OSS 外部テーブルを作成するには、クラスタのカーネルバージョンに基づいてステートメントを実行する必要があります。左側のナビゲーションウィンドウで [クラスタ情報] をクリックし、[クラスタのプロパティ] セクションでクラスタのカーネルバージョンを確認できます。
方法 1: テーブルエンジンを使用して OSS からデータをインポートする
方法 2: テーブル関数を使用して OSS からデータをインポートする
分散テーブル
oss_test_tbl_distributed内のデータをクエリし、OSS 内のデータが ApsaraDB for ClickHouse にインポートされているかどうかを確認します。SELECT * FROM oss_test_tbl_distributed;次の結果が返されます。
┌─id─┬─user_name─┬──age──┬───city─────┬─────access_url────────┐ │ 1 │ yang │ 32 │ shanghai │ http://example1.com │ │ 2 │ wang │ 22 │ beijing │ http://example2.com │ │ 3 │ xiao │ 23 │ shenzhen │ http://example3.com │ │ 4 │ jess │ 45 │ hangzhou │ http://example4.com │ │ 5 │ jack │ 14 │ shanghai │ http://example5.com │ │ 6 │ tomy │ 25 │ hangzhou │ http://example6.com │ │ 7 │ lucy │ 45 │ shanghai │ http://example7.com │ │ 8 │ tengyin │ 26 │ shanghai │ http://example8.com │ │ 9 │ wangli │ 27 │ shenzhen │ http://example9.com │ │ 10 │ xiaohua │ 37 │ shanghai │ http://example10.com │ └────┴───────────┴───────┴────────────┴───────────────────────┘
ワイルドカード文字を使用して OSS 内のストレージパスをあいまい一致させる
ほとんどの場合、OSS 内の複数の小さなファイルは、同じ命名規則に基づいて作成されます。小さなファイルの分析を簡素化するために、oss-file-path パラメータを設定するときに次のワイルドカード文字を使用してあいまい一致を実行できます。
*: すべてのファイルまたはディレクトリと一致します。たとえば、/dir/*は/dirディレクトリ内のすべてのファイルと一致します。{x, y, z}: 中括弧 {} で囲まれた値のいずれかと一致します。たとえば、file_{x, y, z}はfile_x、file_y、またはfile_zと一致します。{num1..num2}: 最小値、最大値、またはその間の値と一致します。たとえば、file_{1..3}はfile_1、file_2、またはfile_3と一致します。?: ランダムな文字と一致します。たとえば、file_?はfile_a、file_b、file_c、または名前が類似している他のファイルと一致します。
例
ファイルは、次の構造を使用するディレクトリにアップロードできます。
oss://testBucketName/
doc-data/
oss-import/
small_files/
access_log_csv_1.txt
access_log_csv_2.txt
access_log_csv_3.txt次のリストは、参考までに oss-file-path パラメータの値のみを提供します。
oss://testBucketName/doc-data/oss-import/small_files/*
oss://testBucketName/doc-data/oss-import/small_files/access*
oss://testBucketName/doc-data/oss-import/small_files/access_log_csv_{1,2,3}.txt
oss://testBucketName/doc-data/oss-import/*/access_log_csv_{1,2,3}.txt
oss://testBucketName/doc-data/oss-import/*/*
oss://testBucketName/doc-data/oss-import/*/access_log_csv_{1..3}.txt
oss://testBucketName/doc-data/oss-import/*/access_log_csv_?.txt