Object Storage Service (OSS) から Alibaba Cloud ClickHouse へデータをインポートし、テーブルエンジンまたはテーブル関数を使用してログをクエリ・分析・処理します。
前提条件
データの準備
以下のテストデータを test.csv として保存し、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
操作手順
-
Alibaba Cloud ClickHouse クラスターに接続します。詳細については、「クラスターへの接続」をご参照ください。
-
oss_test_tbl_localという名前のローカルテーブルを作成します。重要-
Alibaba Cloud ClickHouse テーブルのスキーマは、OSS 外部テーブルのスキーマおよび OSS 内のデータフォーマットと一致している必要があります。解析エラーおよびクラスターの異常を防ぐため、NULL フィールドには十分注意してください。
-
ご利用のクラスターのレプリカ構成に基づき、適切な CREATE TABLE 文を選択します。レプリカ構成は、コンソールの クラスターのプロパティ セクションにある クラスター情報 ページで確認できます。
-
ビジネス要件に基づき、テーブルエンジンを選択できます。詳細については、「テーブルエンジン」をご参照ください。
シングルレプリカエディション
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 から Alibaba Cloud ClickHouse へデータをインポートします。
Alibaba Cloud ClickHouse では、OSS からデータをインポートする方法として、テーブルエンジンとテーブル関数の 2 種類がサポートされています。
重要ご利用のクラスターのバージョンに基づき、適切な文を選択します。バージョンは、コンソールの クラスターのプロパティ セクションにある クラスター情報 ページで確認できます。
方法 1:テーブルエンジンを使用
方法 2:テーブル関数を使用
-
分散テーブル
oss_test_tbl_distributedをクエリして、データインポートを検証します。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-file-path パラメーターは以下のワイルドカードをサポートしています。
-
*:任意のファイル名またはディレクトリ名に一致します。たとえば、/dir/*は/dirディレクトリ内のすべてのファイルに一致します。 -
{x,y,z}:中括弧内に記述された任意の値に一致します。たとえば、file_{x,y,z}はfile_x、file_y、またはfile_zに一致します。 -
{num1..num2}:num1からnum2までの展開された範囲内の任意の値に一致します。たとえば、file_{1..3}はfile_1、file_2、およびfile_3に一致します。 -
?:任意の 1 文字に一致します。たとえば、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://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