使用 Spectrify 以 Parquet 格式将数据从 Redshift 卸载到 S3

Posted

技术标签:

【中文标题】使用 Spectrify 以 Parquet 格式将数据从 Redshift 卸载到 S3【英文标题】:Using Spectrify to offload data from Redshift to S3 in Parquet format 【发布时间】:2019-10-29 09:50:03 【问题描述】:

我正在尝试,但由于我无法理解一些事情,所以我被困在了这个过程中。 Spectrify 文档不是很好,我在互联网上找不到任何实现示例。我在 *** 上也发现了一个类似的问题,但公认的答案是建议使用 Spectrify,但这并没有多大帮助。

这是问题所在(这是他们文档中的代码):

from spectrify.export import RedshiftDataExporter
from spectrify.convert import ConcurrentManifestConverter
from spectrify.utils.schema import SqlAlchemySchemaReader

RedshiftDataExporter(sa_engine, s3_config).export_to_csv('my_table')

csv_path_template = 's3://my-bucket/my-table/csv/start.year/start.month:02d/start.day:02d'
spectrum_path_template = 's3://my-bucket/my-table/spectrum/partition_key=start'
csv_path = csv_path_template.format(start=start_date)
spectrum_path = spectrum_path_template.format(start=start_date)
s3_config = SimpleS3Config(csv_path, spectrum_path)

sa_table = SqlAlchemySchemaReader(engine).get_table_schema('my_table')
ConcurrentManifestConverter(sa_table, s3_config).convert_manifest()


RedshiftDataExporter 用于将数据导出为 CSV,sa_engine 用于连接 Redshift 引擎。

他们的文档对转换过程含糊不清。在 Python 3.x 脚本中使用 Spectrify 时,应该使用什么过程将数据卸载到 CSV,然后将其转换为 Parquet 格式?我应该如何修改上面的代码以及我缺少什么?

【问题讨论】:

【参考方案1】:

您现在可以将 Redshift 数据以 Parquet 格式卸载到 S3,而无需任何第三方应用程序。 Redshift 现在支持新功能:

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

文档可以在UNLOAD - Amazon Redshift找到

【讨论】:

好吧,不幸的是,当我们需要它时它不可用,所以我们采取了模仿JSON格式卸载然后通过EMR转换它的路线。但我们肯定会在未来使用它。

以上是关于使用 Spectrify 以 Parquet 格式将数据从 Redshift 卸载到 S3的主要内容,如果未能解决你的问题,请参考以下文章

以 parquet 格式保存数据帧会生成太多小文件

AWS Glue 作业以 Parquet 格式写入 s3 并出现 Not Found 错误

如何为 spectrify python 包指定 s3 配置?

如何将 HBase 表以 Parquet 格式移动到 HDFS?

Parquet性能测试之项目实践中应用测试

如何使用许多小文件加速 Spark 的 parquet 阅读器