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 更新查询中使用左外连接导致错误:目标表必须是等连接谓词的一部分