Redshift 中的列主要卸载

Posted

技术标签:

【中文标题】Redshift 中的列主要卸载【英文标题】:Column-major unload in Redshift 【发布时间】:2015-07-09 21:07:01 【问题描述】:

我想以列主要格式将 Redshift 中的内容转储到 S3 中(因此每列一个文件)。奇怪的是,到目前为止,我在互联网上或其他地方没有发现任何人想要这样做。

我的问题是 Redshift/PostgreSQL 是否支持以列格式加载和卸载数据,如果没有,是否还有其他支持。这对我来说似乎很奇怪,这不会是一件事——数据是按列存储的,不是吗?我知道,我知道,“切片/节点”,但 sortkey(以及传入数据已排序的必要假设)不会处理它吗?

【问题讨论】:

你想达到什么目的?加载速度更快?一些外部处理? 两者。我正在尝试制作尽可能快的分布式 (Spark) 应用程序,该应用程序将处理列并将其转换为更适合 ML 的格式。 Unload 返回一个以行为主的文件,每隔这么多行就分成块。我想要的是一些以列为主的东西(理想情况下,每个文件一列)。这将使摄取更快。如果什么都不存在也没关系,我只是想问问。 【参考方案1】:

UNLOAD 没有以列格式显示的内置功能。

但是,Amazon Redshift UNLOAD 命令采用 SELECT 语句,因此它可以运行多次,每次使用不同的列。

来自UNLOAD documentation:

UNLOAD ('select_statement')
TO 's3://object_path_prefix'
[ WITH ] CREDENTIALS [AS] 'aws_access_credentials' 
[ option [ ... ] ]

【讨论】:

以上是关于Redshift 中的列主要卸载的主要内容,如果未能解决你的问题,请参考以下文章

Redshift JSON 性能

Redshift - 如何使用一个表中的列作为 SIMILAR TO 中的模式

将大型数据集从 Redshift 卸载到 S3 失败并出现 I/O 错误

如何使用 Amazon Redshift 中的临时表列更新现有表中的列?

Redshift 中的存储过程使用卸载的字符串替换

如何从 SQL 中的列值中提取特定部分(Redshift 平台)