Redshift - 在 where 子句中从 csv 传递值

Posted

技术标签:

【中文标题】Redshift - 在 where 子句中从 csv 传递值【英文标题】:Redshift - Passing values from a csv in a where clause 【发布时间】:2018-10-01 09:50:35 【问题描述】:

我有一个包含 sale_ids 列表的 csv 文件(大约 10K 条目)。我想知道是否有办法将文件中的这些值作为 SQL 语句中 where 子句的一部分传递。

下面给出的是 SQL:

select s.sale_id,s.sale_date,prod.prod_name 
from sales s, product prod
where s.prod_id = prod.id
and s.sale_id in (these are the IDs in the csv file)

csv 只有一列带有 sale_id

我正在尝试在 Redshift DB 上执行此操作。谢谢。

【问题讨论】:

您必须将此文件作为表复制到 Redshift,然后在子查询中引用它 【参考方案1】:

您可以手动或以编程方式将所有值插入到 SQL 查询中,但 Amazon Redshift 中没有将 CSV 文件的内容插入到查询中的内置功能。

按照@AlexYes 的建议,您可以使用COPY 命令将该 CSV 文件加载到新表中,然后在查询中引用该表:

and s.sale_id in (SELECT thing FROM new_table)

【讨论】:

以上是关于Redshift - 在 where 子句中从 csv 传递值的主要内容,如果未能解决你的问题,请参考以下文章

Redshift Cross join忽略where子句

在 where 子句中从当前日期减去 30 天

跳出查询以在存储过程中从单独的表中获取 where 子句

即使使用 where 子句中使用的排序键,Redshift 也会执行全表扫描

如何为 Amazon redshift 数据库编写查询,使相关查询的 where 子句具有两个条件?

为啥不能在 Redshift 的 CTE 的某些子句中调用不可变的 UDF?