以Parquet格式将数据文件从Amazon Redshift卸载到Amazon S3

时间:2018-02-07 21:36:52

标签: amazon-redshift parquet amazon-athena amazon-redshift-spectrum

我想以Apache Parquet格式将数据文件从Amazon Redshift卸载到Amazon S3,以便使用Redshift Spectrum查询S3上的文件。我已经探索过每一个地方但我找不到任何关于如何使用Parquet格式将文件从Amazon Redshift卸载到S3的内容。此功能尚未支持,或者我无法找到有关它的任何文档。有人研究过这个问题吗?谢谢。

5 个答案:

答案 0 :(得分:6)

有点晚了,但Spectrify正是这样做的。

答案 1 :(得分:4)

从2019年12月开始支持将Redshift卸载为Parquet文件格式:

UNLOAD ('select-statement')
TO 's3://object-path/name-prefix'
FORMAT PARQUET

它在Redshift Features

中被提及

,并在Unload Document

中进行了更新

Unload Examples Document

中提供了一个示例

官方文档摘录:

以下示例以Parquet格式卸载LINEITEM表,该表由l_shipdate列进行了分区。

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

答案 2 :(得分:2)

你不能这样做。 Redshift不了解Parquet(虽然您可以通过Spectrum抽象阅读Parquet文件)。

您可以UNLOAD发送文本文件。它们可以是https://technet.microsoft.com/en-us/library/dd335049(v=exchg.160).aspx,但它们只是平面文本文件。

答案 3 :(得分:0)

不幸的是,到目前为止,AWS Redshift并未扩展其阅读镶木地板格式的能力。

虽然您可以执行以下操作之一:

  1. 使用AWS Spectrum读取它们。
  2. 使用Amazon Glue的抓取工具为您转换。
  3. 直到今天,还没有支持现成的AWS中的Apache Parquet。

    我希望这会有所帮助。

答案 4 :(得分:0)

一个很好的解决方案' Spectrify'这样做但是如果你不想使用AWS服务这样做;您可以在EMR + Databricks上使用Spark从Redshift读取数据并以镶木地板格式将其写入S3。

以下链接可让您了解相同的操作

https://github.com/aws-samples/aws-big-data-blog/tree/master/aws-blog-spark-parquet-conversion