概述
腾讯云数据仓库 TCHouse-P 支持通过创建外表的方式读写 HDFS/COS/融合桶上的外表数据文件进行数据分析。本文主要介绍其使用方法。在使用之前确保已有 HDFS/COS/融合桶的用户账户并且网络能够联通。
创建 hdfs_fdw 插件
CREATE EXTENSION hdfs_fdw;
创建 SERVER
根据实际情况选择以下三种 Server 中的一种创建。
创建 COS Server
CREATE SERVER $cos_server名FOREIGN DATA WRAPPER hdfs_fdwOPTIONS (address 'cos://$bucketname',appid '$appid',access_keyid '$ak',secret_accesskey '$sk',region '$region',client_type 'cos');
创建 HDFS Server
CREATE SERVER $hdfs_server名FOREIGN DATA WRAPPER hdfs_fdwOPTIONS (address 'ofs://xxxxxx.chdfs.ap-guangzhou.myqcloud.com',appid '$appid',client_type 'hdfs');
创建融合桶 Server
CREATE SERVER $cosn_server名FOREIGN DATA WRAPPER hdfs_fdwOPTIONS (address 'cosn://$bucketname',appid '$appid',access_keyid '$ak',secret_accesskey '$sk',region '$region',client_type 'cosn');
创建 USER MAPPING
根据实际情况选择以下三种 User Mapping 中的一种创建。
CREATE USER MAPPING FOR $TDSQL-A用户 SERVER $cos_server名; -- 前面创建的 COS Server 的CREATE USER MAPPING FOR $TDSQL-A用户 SERVER $hdfs_server名; -- 前面创建的 HDFS Server 的CREATE USER MAPPING FOR $TDSQL-A用户 SERVER $cosn_server名; -- 前面创建的融合桶 Server 的
pg 读 COS
创建非分区外表
表指定文件格式需要和远程读取的文件格式一致。
创建 CSV 格式的表
CREATE FOREIGN TABLE test_csv(id int, name TEXT)SERVER $ServerNameOPTIONS (FORMAT 'csv',FOLDERNAME '$数据目录/',distribute 'shard');
创建 TEXT 格式的表
CREATE FOREIGN TABLE test_text(id int, name TEXT)SERVER $ServerNameOPTIONS (FORMAT 'text',DELIMITER '$列分隔符',FOLDERNAME '$数据目录/',distribute 'shard');
创建 ORC 格式的表
CREATE FOREIGN TABLE orc_table(a bigint, b text, c float)SERVER $ServerNameOPTIONS (FORMAT 'orc',FOLDERNAME '$数据目录/',distribute 'shard');
创建分区外表
当 Hive 建表语句为以下时:
CREATE FOREIGN TABLE login_logs_orc(l_id text,l_loginName text,l_date text,year text,month text)SERVER cosn_serverOPTIONS (FORMAT 'orc',FOLDERNAME '$数据目录/',distribute 'shard',PARTITION 'year,month');
查询外表并将数据导入内部表
insert into 内部表 select * from 外部表;
pg 写 COS
创建写的外部表
根据实际情况选择以下三种中的一种创建:
create foreign table f_csv(f1 int, f2 int)server cos_serveroptions(FORMAT 'csv', DELIMITER ',', FOLDERNAME '/csv/', distribute 'shard') WRITE ONLY;create foreign table f_txt(f1 int, f2 int)server cos_serveroptions(FORMAT 'text', DELIMITER ',', FOLDERNAME '/txt/', distribute 'shard') WRITE ONLY;create foreign table f_orc(f1 int, f2 int)server cos_serveroptions(FORMAT 'orc', FOLDERNAME '/orc/', distribute 'shard') WRITE ONLY;
pg 导入 COS
根据实际情况选择以下三种中的一种:
insert into f_csv select * from 内部表;insert into f_txt select * from 内部表;insert into f_orc select * from 内部表;