Redshift-在查询的“ in”部分中查询300K值

时间:2019-12-09 17:06:45

标签: sql amazon-s3 amazon-redshift amazon-athena

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

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

最佳方法是什么?

我尝试了以下方法:

  1. 将数据完整表获取为CSV并在AWS Athena上运行查询。雅典娜根本无法运行查询。
  

出现此错误:出了点问题。请重试。

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

2 个答案:

答案 0 :(得分:3)

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

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

答案 1 :(得分:0)

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

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