我想以 Apache Parquet 格式将数据文件从 Amazon Redshift 卸载到 Amazon S3,以便使用 Redshift Spectrum 查询 S3 上的文件。我已经探索了每一个地方,但我找不到任何关于如何使用 Parquet 格式将文件从 Amazon Redshift 卸载到 S3 的信息。是否尚不支持此功能,或者我无法找到任何有关它的文档。有工作过的人可以分享一些关于这方面的信息吗?谢谢你。
5 回答
自 2019 年 12 月起支持 Redshift 卸载到 Parquet 文件格式:
UNLOAD ('select-statement')
TO 's3://object-path/name-prefix'
FORMAT PARQUET
并在卸载文档中更新
使用卸载示例文档中提供的示例
官方文档摘录:
以下示例以 Parquet 格式卸载由 l_shipdate 列分区的 LINEITEM 表。
unload ('select * from lineitem')
to 's3://mybucket/lineitem/'
iam_role 'arn:aws:iam::0123456789012:role/MyRedshiftRole'
PARQUET
PARTITION BY (l_shipdate);
假设有四个切片,生成的 Parquet 文件会动态划分到不同的文件夹中。
s3://mybucket/lineitem/l_shipdate=1992-01-02/0000_part_00.parquet
0001_part_00.parquet
0002_part_00.parquet
0003_part_00.parquet
s3://mybucket/lineitem/l_shipdate=1992-01-03/0000_part_00.parquet
0001_part_00.parquet
0002_part_00.parquet
0003_part_00.parquet
s3://mybucket/lineitem/l_shipdate=1992-01-04/0000_part_00.parquet
0001_part_00.parquet
0002_part_00.parquet
0003_part_00.parquet
有点晚了,但Spectrify正是这样做的。
你不能这样做。Redshift 不了解 Parquet(尽管您可以通过 Spectrum 抽象读取 Parquet 文件)。
你可以UNLOAD
到文本文件。它们可以被加密或压缩,但它们只是纯文本文件。
看起来现在支持:
不幸的是,到目前为止,AWS Redshift 并没有扩展其读取 parquet 格式的能力。
尽管您可以执行以下操作之一:
- 使用 AWS Spectrum 阅读它们。
- 使用来自 Amazon Glue 的爬虫为您转换它。
直到今天,AWS 中还没有现成的 Apache Parquet 支持。
我希望这有帮助。
一个很棒的解决方案“Spectrify”可以做到这一点,但如果您不想使用 AWS 服务来做到这一点;您可以使用 EMR + Databricks 上的 Spark 从 Redshift 读取数据并以 parquet 格式将其写入 S3。
以下链接将为您提供相同的想法
https://github.com/aws-samples/aws-big-data-blog/tree/master/aws-blog-spark-parquet-conversion