您可以通过表引擎或表函数将数据从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。 
- 您可以根据业务需求选择合适的表引擎。表引擎的详细信息,请参见表引擎。 
 - 单副本版集群- 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