訪問OSS數(shù)據(jù)
本文介紹如何通過云數(shù)據(jù)庫ClickHouse查詢阿里云對(duì)象存儲(chǔ)OSS(Object Storage Service)數(shù)據(jù)以及如何寫入數(shù)據(jù)至OSS。
前提條件
已開通OSS服務(wù)。如何開通,請(qǐng)參見開通OSS服務(wù)。
已在云數(shù)據(jù)庫ClickHouse所在地域創(chuàng)建存儲(chǔ)空間(Bucket)。如何創(chuàng)建,請(qǐng)參見控制臺(tái)創(chuàng)建存儲(chǔ)空間。
已上傳文件至OSS。如何上傳,請(qǐng)參見控制臺(tái)上傳文件。
說明本文以
1,tick,32,shanghai,http://example.com
為示例數(shù)據(jù),存儲(chǔ)為test.csv。訪問OSS的賬號(hào)已具備對(duì)OSS對(duì)象的讀寫權(quán)限。如何設(shè)置權(quán)限,請(qǐng)參見訪問控制概述。
注意事項(xiàng)
云數(shù)據(jù)庫ClickHouse支持訪問多種格式的OSS文件,除不支持Protobuf和CapnProto外,其他均支持,具體請(qǐng)參見ClickHouse支持的文件格式。
請(qǐng)確認(rèn)OSS存儲(chǔ)空間(Bucket)與您的云數(shù)據(jù)庫ClickHouse集群在同一地域,并使用阿里云VPC網(wǎng)絡(luò)訪問OSS。
通過云數(shù)據(jù)庫ClickHouse寫入數(shù)據(jù)至OSS,會(huì)覆蓋原來的OSS文件數(shù)據(jù)。
步驟一:登錄數(shù)據(jù)庫
在集群列表頁面,選擇社區(qū)版實(shí)例列表,單擊目標(biāo)集群ID。
在集群信息頁面,單擊右上方導(dǎo)航欄的登錄數(shù)據(jù)庫。
在登錄實(shí)例頁面,輸入數(shù)據(jù)庫賬號(hào)和密碼,單擊登錄。
步驟二:創(chuàng)建OSS外表
創(chuàng)建OSS外表。
21.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>');
22.8版本的建表語法:
CREATE TABLE <table_name> [on cluster default] ( 'col_name1' col_type1, 'col_name2' col_type2, ... ) ENGINE = OSS('https://<bucketName>.<oss-endpoint>/<file-name>', '<access-key-id>', '<access-key-secret>', '<file-format-name>');
參數(shù)說明如下:
參數(shù)名
描述
table_name
表名。
col_name1,col_name2
列名。
col_type1,col_type2
列類型。
重要OSS外表的結(jié)構(gòu)類型需與OSS數(shù)據(jù)對(duì)應(yīng)。
BucketName
Bucket的名稱。
oss-endpoint
ECS的VPC網(wǎng)絡(luò)訪問(內(nèi)網(wǎng))的Endpoint。如何獲取,請(qǐng)參見OSS地域和訪問域名。
重要請(qǐng)確保OSS存儲(chǔ)空間(Bucket)與您的云數(shù)據(jù)庫ClickHouse集群在同一地域。
file-name
文件名稱。
access-key-id
訪問OSS數(shù)據(jù)的AccessKey ID。
access-key-secret
訪問OSS數(shù)據(jù)的AccessKey Secret。
oss-file-path
文件的存儲(chǔ)路徑。一般格式為
oss://<bucket-name>/<path-to-file>
。說明oss-file-path
參數(shù)支持通過通配符進(jìn)行模糊匹配。更多信息,請(qǐng)參見通配符模糊匹配OSS的存儲(chǔ)路徑。file-format-name
文件的格式,本文為CSV。
示例語句:
21.8及以下版本的示例語句:
CREATE TABLE oss_test_tbl on cluster default ( id UInt8, user_name String, age UInt16, city String, access_url String ) ENGINE = OSS('oss-cn-shanghai-internal.aliyuncs.com', 'LTAI5tDVcUKu2CbcBwhr****', 'WAcroHBcL7IVOK8FIHzNJy91Lc****', 'oss://testBucketName/test.csv', 'CSV');
22.8版本的示例語句:
CREATE TABLE oss_test_tbl on cluster default ( id UInt8, user_name String, age UInt16, city String, access_url String ) ENGINE = OSS('http://testBucketName.oss-cn-shanghai-internal.aliyuncs.com/test.csv', 'LTAI5tDVcUKu2CbcBwhr****', 'WAcroHBcL7IVOK8FIHzNJy91Lc****','CSV')
查詢OSS外表的數(shù)據(jù)。
select * from oss_test_tbl;
返回結(jié)果:
┌─id─┬─user_name─┬──age──┬───city─────┬─────access_url────────┐ │ 1 │ tick │ 32 │ shanghai │ http://example.com │ └────┴───────────┴───────┴────────────┴───────────────────────┘
步驟三:寫入數(shù)據(jù)至OSS
insert into oss_test_tbl values(11, 'tick', 25, 'shanghai', 'http://example.com');
步驟四:查詢數(shù)據(jù)
云數(shù)據(jù)庫ClickHouse提供了表引擎和表函數(shù)兩種方法查詢OSS數(shù)據(jù)。
通過表引擎查詢OSS數(shù)據(jù)。
查詢OSS外表的數(shù)據(jù):
select * from oss_test_tbl;
返回結(jié)果:
┌─id─┬─user_name─┬──age──┬───city─────┬─────access_url────────┐ │ 11 │ tick │ 25 │ shanghai │ http://example.com │ └────┴───────────┴───────┴────────────┴───────────────────────┘
通過表函數(shù)查詢OSS數(shù)據(jù)。
21.8及以下版本的查詢語法:
SELECT * FROM oss('<oss-endpoint>', '<access-key-id>', '<access-key-secret>', '<oss-file-path>', '<file-format-name>', '<col_name> <col_type>(,...)');
22.8版本的查詢語法:
SELECT * FROM oss('https://<bucketName>.<oss-endpoint>/<file-name>','<access-key-id>', '<access-key-secret>', '<file-format-name>', '<col_name> <col_type>(,...)');
參數(shù)的詳細(xì)信息,請(qǐng)參見參數(shù)說明。
示例語句:
21.8及以下版本的查詢語句:
SELECT * FROM oss('oss-cn-shanghai-internal.aliyuncs.com', 'LTAI5tDVcUKu2CbcBwhr****', 'WAcroHBcL7IVOK8FIHzNJy91Lc****', 'oss://testBucketName/test.csv', 'CSV', 'id UInt8, user_name String, age UInt16, city String, access_url String');
22.8版本的查詢語句:
SELECT * FROM oss('http://testBucketName.oss-cn-shanghai-internal.aliyuncs.com/test.csv', 'LTAI5tDVcUKu2CbcBwhr****', 'WAcroHBcL7IVOK8FIHzNJy91Lc****', 'CSV', 'id UInt8, user_name String, age UInt16, city String, access_url String')
返回結(jié)果:
┌─id─┬─user_name─┬──age──┬───city─────┬─────access_url────────┐ │ 11 │ tick │ 25 │ shanghai │ http://example.com │ └────┴───────────┴───────┴────────────┴───────────────────────┘