使用存储在 s3 中的 parquet 文件在 Greenplum 中创建外部表
Posted
技术标签:
【中文标题】使用存储在 s3 中的 parquet 文件在 Greenplum 中创建外部表【英文标题】:Create external table in Greenplum using parquet file stored in s3 【发布时间】:2018-06-28 10:06:44 【问题描述】:我正在尝试在 Amazon ec2 集群上的 Greenplum 数据库中创建一个外部表。我的源文件是 parquet 并存储在 s3 中。 我的问题是:
我应该使用什么协议从 parquet 文件中读取数据?
如果我使用文件格式为“Parquet”的“s3://”,如下所示:
CREATE EXTERNAL TABLE rp2 (id text, fname text, lname text, mname text) LOCATION ('s3://location.parquet config=./s3/s3.config')
我收到以下错误:
ERROR: unexpected end of file (seg0 slice1 IP:port pid=xxx)
如果我选择 gphdfs:// 协议为:
CREATE EXTERNAL TABLE rp2 (id text, fname text, lname text, mname text) LOCATION ('gphdfs:location.parquet config=./s3/s3.config') FORMAT 'PARQUET';
我收到以下错误:
ERROR: external table gphdfs protocol command ended with error. Exception in thread "main" java.lang.IllegalArgumentException: Illegal input uri: gphdfs://locs.parquet config=./s3/s3.config (seg0 slice1 IP:Port pid=pid)
在这方面的任何帮助将不胜感激。
【问题讨论】:
我们也在努力解决这个问题...我考虑使用 pxf,例如pxf://S3_BUCKET/pxf_examples/my_file?PROFILE=s3:parquet&SERVER=s3srvcfg
从这里 gpdb.docs.pivotal.io/5170/pxf/access_objstore.html 。因为s3协议不支持parquet格式
【参考方案1】:
您可以使用PXF 在 S3 上读取 parquet 文件
例子:
CREATE EXTERNAL TABLE pxf_ext_tbl(name text, orders int)
LOCATION ('pxf://S3_BUCKET/dir/file.parquet?PROFILE=s3:parquet&SERVER=s3srvcfg)
FORMAT 'CUSTOM' (FORMATTER='pxfwritable_import');
【讨论】:
以上是关于使用存储在 s3 中的 parquet 文件在 Greenplum 中创建外部表的主要内容,如果未能解决你的问题,请参考以下文章
使用 saveAsTable 将 parquet 数据写入 S3 未完成