gpossext
在阿里云上,支持通过 gpossext 并行装载数据到 Greenplum 中
gpossext 语法
CREATE [READABLE] EXTERNAL TABLE tablename
( columnname datatype [, ...] | LIKE othertable )
LOCATION ('ossprotocol')
FORMAT '...'
[ ENCODING 'encoding' ]
[ LOG ERRORS ...]
ossprotocol:
oss://oss_endpoint filepath=[folder/[folder/]...]/file_name
id=userossid key=userosskey bucket=ossbucket
ossprotocol:
oss://oss_endpoint dir=[folder/[folder/]...]/file_name
id=userossid key=userosskey bucket=ossbucket
参数解释
ossprotocol 整个协议有6部分
1. 协议名,当然是 oss
2. ossendpoint 参数,是内网访问oss的地址,也叫 host
3. id oss账号ID
4. key oss账号key
5. bucket ossbucket,需要创建 oss 账号后分配
6. filepath oss 中带路径的文件名,需要注意
6.1 文件名包含文件路径,但不包含 bucket 名
6.2 并行装载模式要求文件被均匀拆分为多个文件
6.3 文件命名方式为 finame.x,x 要求从 1 开始,且是连续的
6.4 例 filename.1 filename.2 filename.3 ...
6.5 可以被导入的文件有 filename filename.1 filename.2 ...;其中1到N需要是连续的。
6.6 为了最大化导入性能,建议拆分文件的个数是导入到的 Greenplum segment 个数的倍数
7. dir oss 中带路径的虚拟文件夹,需要注意
7.1 dir指 oss 上的虚拟文件夹,它需要以 / 结尾
7.2 该模式和 filepath 互斥,不能同时指定
7.3 该模式会导入指定虚拟目录下的所有文件到 Greenplum,但不包括它子目录和子目录下的文件
7.4 和 filepath 一样,该模式也是并行导入的,为了最大化导入性能,每个文件的大小需要尽量的均匀。
7.5 和 filepath 不同,dir 下的文件没有命名要求
8. async 是否启用异步模式装载数据
8.1 开启辅助线程从 oss 装载数据,加速导入性能
8.2 默认情况下异步模式是打开的,如果需要关掉,可以使用参数 async = false 或 async = f
8.3 异步模式和普通模式比,会消耗更多的硬件资源
gpossext 的其他参数兼容 Greenplum EXTERNAL TABLE 的原有语法,主要有
1. FORMAT 支持文件格式,支持 txt,csv 等
2. ENCODING 文件中数据的编码格式,如 utf8
3. LOG ERRORS 依然支持容错模式数据导入,通过制定该子句忽略掉导入中出错的数据
用例
# 创建 oss 外部表
create READABLE external table ossexample
(date text, time text, open float, high float,
low float, volume int)
location('oss://oss-cn-hangzhou-zmf.aliyuncs.com
filepath=osstest/example.csv id=XXX
key=XXX bucket=testbucket') FORMAT 'csv'
LOG ERRORS SEGMENT REJECT LIMIT 5;
# 创建堆表,数据就装载到这张表中
create table example
(date text, time text, open float,
high float, low float, volume int);
# 数据并行的从 ossexample 装载到 example 中。
insert into example select * from ossexample;
# 可以看到,每个 segment 都会参与工作。
# 他们并行的从 oss 拉取数据
# 然后通过 Redistribute Motion 分发给对应的 segment.
# 每个 segment 再通过 insert 节点入库
explain insert into example select * from ossexample;
QUERY PLAN
--------------------------------------------------------------------------------------------------
Insert (slice0; segments: 4) (rows=250000 width=92)
-> Redistribute Motion 4:4 (slice1; segments: 4) (cost=0.00..11000.00 rows=250000 width=92)
Hash Key: ossexample.date
-> External Scan on ossexample (cost=0.00..11000.00 rows=250000 width=92)
(4 rows)
gpossext 使用注意
gpossext 打开了 oss 到 Greenplum 的数据通道,用户可以把数据放到廉价的 oss 中,再导入到 Greenplum 中进行分析。使用需要注意
1. gpossext 中除了 ossprotocol,其他的部分和 Greenplum 相同。
2. 数据导入的性能和 Greenplum 集群的资源(CPU IO MEM NET)相关,也和 OSS 相关。
3. 为了保证数据导入的性能 ossendpoint Region 需要匹配 Greenplum 云上所在 Region,建议oss和Greenplum在同一个Region以获得最好的性能。相关信息请参考下面的链接。
参考链接
- oss endpiint 信息
- [oss help 页面] [2]
- [Greenplum EXTERNAL TABLE 手册] [3]