腾讯云数据仓库 TCHouse-P 支持通过 hdfs_fdw 插件以外表形式读写 COS 。
创建 SERVER
根据 COS 类型,选择创建以下 SERVER。
$BucketName
表示已经创建的存储桶的名称。创建 COS SERVER
CREATE SERVER $ServerNameFOREIGN DATA WRAPPER hdfs_fdwOPTIONS (address 'cos://$BucketName', appid '$appid', access_keyid '$ak', secret_accesskey '$sk', region '$region', client_type 'cos');
创建 COSN SERVER
CREATE SERVER $ServerNameFOREIGN DATA WRAPPER hdfs_fdwOPTIONS (address 'cosn://$BucketName', appid '$appid', access_keyid '$ak', secret_accesskey '$sk', region '$region', client_type 'cosn', ranger '$ip:$port', is_s3 'true/false');
注意:
1. COSN 如果开启了 Ranger 鉴权,则将参数
ranger
设置为 Ranger 的 IP:PORT;2. COSN 默认支持 S3 协议;若需 POSIX 协议,则将参数
is_s3
设置为 false。创建 USER MAPPING
$ServerName
表示已经创建 Server 的名称。CREATE USER MAPPING FOR $用户名 SERVER $ServerName;
创建只读外表
腾讯云数据仓库 TCHouse-P 支持通过外表向 COS 端读取 CSV、TEXT、Parquet、ORC 这 4 种格式文件。
外部表所指定文件格式需要和 COS 端所读取的文件格式保持一致。而且,所读取的数据文件必须位于该 COS 的
$FOLDERNAME
目录中。创建 CSV 格式的的只读外表
CREATE FOREIGN TABLE test_csv(id int, name TEXT)SERVER $ServerNameOPTIONS (FORMAT 'csv', DELIMITER '$列分隔符', FOLDERNAME '/$数据目录/', distribute 'shard');
说明:
1. 如果读取单个文件,则参数
FOLDERNAME
结尾不用加“/”,例如:FOLDERNAME '/test.txt'。2. 如果
DELIMITER
以特殊字符作为分隔符,则需添加“E”,例如:以TAB键为分隔符,则 DELIMITER E'\\t'。创建 TEXT 格式的只读外表
CREATE FOREIGN TABLE test_text(id int, name TEXT)SERVER $ServerNameOPTIONS (FORMAT 'text', DELIMITER '$列分隔符', FOLDERNAME '/$数据目录/', distribute 'shard');
创建 Parquet 格式的只读外表
CREATE FOREIGN TABLE test_parquet (col1 text, col2 bigint, col3 double precision)SERVER $ServerNameOPTIONS (FORMAT 'parquet', FOLDERNAME '/$数据目录/', distribute 'shard');
创建 ORC 格式的只读外表
CREATE FOREIGN TABLE test_orc(a bigint, b text, c float)SERVER $ServerNameOPTIONS (FORMAT 'orc', FOLDERNAME '/$数据目录/', distribute 'shard');
创建分区表的只读外表
以 Hive 建表语句为例。
CREATE TABLE login_logs_parquet(l_id string, l_loginName string, l_date string)partitioned by(year string, month string) stored as parquet;
说明:
1. Hive 分区字段提升为腾讯云数据仓库 TCHouse-P 的普通字段。
2. 参数
PARTITION
中填写 Hive 上的分区字段,多级分区需用逗号隔开,例如:PARTITION 'year,month'。CREATE FOREIGN TABLE test_table(l_id text,l_loginName text,l_date text,year text,month text)SERVER $ServerNameOPTIONS (FORMAT '$文件格式', FOLDERNAME '/$数据目录/', distribute 'shard', PARTITION 'year,month');
将外表数据导入内表
INSERT INTO $内部表 SELECT * FROM $读外表;
创建只写外表
腾讯云数据仓库 TCHouse-P 支持通过外表往 COS 端写入 CSV、TEXT、ORC 这 3 种格式文件。
创建 CSV 格式的只写外表
CREATE FOREIGN TABLE w_test_csv(id int,name text)SERVER $ServerNameOPTIONS (FORMAT 'csv', DELIMITER '|', FOLDERNAME '/$数据目录/', distribute 'shard') WRITE ONLY;
创建 TEXT 格式的只写外表
CREATE FOREIGN TABLE w_test_txt(id int, name text)SERVER $ServerNameOPTIONS (FORMAT 'text', DELIMITER '|', FOLDERNAME '/$数据目录/', distribute 'shard') WRITE ONLY;
创建 ORC 格式的只写外表
CREATE FOREIGN TABLE w_test_orc(id int,name text)SERVER $ServerNameOPTIONS (FORMAT 'orc', FOLDERNAME '/$数据目录/', distribute 'shard') WRITE ONLY;
将内表数据导出外表
INSERT INTO $写外表 SELECT * FROM $内部表;