sql - 数千个值的 Redshift IN 条件

标签 sql database postgresql amazon-redshift data-warehouse

获取与 ~100k 值中的任何一个匹配的数据的最佳方法是什么?

对于这个问题,我使用的是 Amazon Redshift 数据库,并且有一个类似这样的表,其中包含数亿行:

--------------------
| userID | c1 | c2 |
| 101000 | 12 | 'a'|
| 101002 | 25 | 'b'|
____________________

还有数百万个唯一用户 ID。我有一个包含 98,000 个我关心的用户 ID 的 CSV 列表,我想对这些特定用户的列进行数学计算。

select c1, c2 from table where userID in (10101, 10102, ...)

匹配这样一个巨大列表的最佳解决方案是什么?

我的方法是制作一个 python 脚本,读取我们条件集中所有用户的结果,然后在 python 中过滤 CSV。它非常慢,但并非在所有情况下都有效。

一位同事建议将 98k 用户上传到一个临时表中,然后在查询中加入 against in。这似乎是最聪明的方法,但我想问问你们有没有想法。

我还想知道打印包含所有 98k 用户以匹配并运行它的异常长的 SQL 查询是否可行。出于好奇,那甚至会跑吗?

最佳答案

按照您同事的建议,通过将 CSV 文件上传到 S3,然后使用 COPY 将文件导入到表中,将您的 ID 放入一个临时表中。然后,您可以使用 INNER JOIN 条件在您感兴趣的 ID 列表中过滤您的主数据表。

如果您无法将文件上传到 S3,另一种选择是使用 CREATE TEMP TABLE 为您的 ID 列表设置一个表,然后使用电子表格生成整个 INSERT 语句以填充临时表。不过 100K 的插入可能会很慢。

关于sql - 数千个值的 Redshift IN 条件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43881414/

相关文章:

postgresql - 撤销对 PostgreSQL 的权限

sql - 在 golang 中处理插入到具有不同和大量列的数据库

sql - Azure SQL 的 Webhook

database - 连续数据库备份?

node.js - SequelizeJS 允许重复 UNIQUE 字段

sql - 无法将 View 列的数据类型从数字更改为数字(4,1)

java - Hibernate QuerySyntaxException 表未映射

postgresql - 使用 psql、pgadmin 和 postgreSQL

sql - 将 data.table 更新到 SQL 数据库?

php - 从ID指定的合并表中获取特定行数据