Redshift - 在查询的“输入”部分使用 300K 的值进行查询

Posted

技术标签:

【中文标题】Redshift - 在查询的“输入”部分使用 300K 的值进行查询【英文标题】:Redshift - Query with 300K of values in the 'in' part of query 【发布时间】:2019-12-09 17:06:45 【问题描述】:

我需要在 in 部分条件中有很多(大约 300K)值的 redshift 表中查询数据,并将结果存储到 CSV 中。

例如。 select * from table where column_name in ('123','456','678',.....) in 部分中的值约为 300K,结果数据将有 500 万行。 该表已按我正在搜索的同一列进行排序。

最理想的方法是什么?

我尝试了以下方法:

    将数据完整表获取到 CSV 并在 AWS Athena 上运行查询。 Athena 根本无法运行查询。

它给出了这个错误:出了点问题。请重试。

    直接在 redshift 上使用了 UNLOAD 查询。这需要太多时间。

【问题讨论】:

您的表是如何跨节点分布的:甚至,按列...?? 仅单节点:) 【参考方案1】:

使用 COPY 将 300k 值加载到临时表中,然后使用连接而不是 IN () 列表。

UNLOAD 是提取数据的最佳方式,500 万行数据太多,无法提取为SELECT 语句。

【讨论】:

【参考方案2】:

好的,我找到了更好的方法。显然,使用 CTAS 查询创建临时表并将临时表卸载到 S3 需要更短的时间。

将查询直接卸载到 S3 大约需要一个小时,并且仍在运行。创建一个临时表需要 4 分钟,而 S3 卸载 temp 需要 3 分钟。

【讨论】:

以上是关于Redshift - 在查询的“输入”部分使用 300K 的值进行查询的主要内容,如果未能解决你的问题,请参考以下文章

在 Redshift 更新查询中使用左外连接导致错误:目标表必须是等连接谓词的一部分

Excel VBA Redshift 查询性能改进

如何使用 RedShift 查询的输出作为 EMR 作业的输入?

Redshift 更改查询

定期将查询结果从 Redshift 移动到 S3 存储桶

使用 psycopg2 从 python 3 使用 redshift 进行慢速更新查询