使用存储在 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 中创建外部表的主要内容,如果未能解决你的问题,请参考以下文章

parquet 如何在 S3 中存储时间戳数据?

读取 PySpark 中的所有分区 parquet 文件

使用 saveAsTable 将 parquet 数据写入 S3 未完成

S3 中的最佳最大 Parquet 文件大小

使用dask有效地从blob存储上的parquet文件中读取一些列[重复]

无法使用 Pyspark 2.4.4 读取 s3 存储桶中的镶木地板文件