您可以通過表引擎或表函數將資料從OSS中匯入至雲資料庫ClickHouse,實現日誌查詢分析和加工等操作。本文介紹如何將OSS資料匯入至雲資料庫ClickHouse。
前提條件
資料準備
將如下測試資料存放區為test.csv,並上傳至OSS中。在匯入資料時,雲資料庫ClickHouse支援的預設資料行分隔符號為,。上傳資料的具體操作,請參見上傳檔案。
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操作步驟
串連雲資料庫ClickHouse叢集。具體操作,請參見串連叢集。
建立本地表
oss_test_tbl_local。重要雲資料庫ClickHouse表的結構需與OSS外表的結構一致,並保證相容OSS中的資料格式(尤其注意null欄位等),防止出現因資料無法解析導致叢集異常。
請根據叢集的副本配置選擇對應的建表語句。您可以在控制台叢集資訊頁面的叢集屬性地區查看副本配置。
您可以根據業務需求選擇合適的表引擎。表引擎的詳細資料,請參見表引擎。
單副本版叢集
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資料至雲資料庫ClickHouse。
雲資料庫ClickHouse提供了表引擎和表函數兩種方法匯入OSS資料。
重要請根據叢集的核心版本選擇對應的建表語句。您可以在控制台叢集資訊頁面的叢集屬性地區查看版本。
方法一:通過表引擎匯入OSS資料
方法二:通過表函數匯入OSS資料
查詢分布式表
oss_test_tbl_distributed中資料,驗證OSS資料是否成功匯入至雲資料庫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}:匹配[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.txtoss-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