cat*_*all 0 sql database postgresql data-warehouse amazon-redshift
获取与 ~100k 值中的任何一个匹配的数据的最佳方法是什么?
对于这个问题,我正在使用 Amazon Redshift 数据库并有一个类似这样的表,其中包含数亿行:
--------------------
| userID | c1 | c2 |
| 101000 | 12 | 'a'|
| 101002 | 25 | 'b'|
____________________
Run Code Online (Sandbox Code Playgroud)
还有数百万个唯一的用户 ID。我有一个包含 98,000 个我关心的用户 ID 的 CSV 列表,我想对这些特定用户的列进行数学计算。
select c1, c2 from table where userID in (10101, 10102, ...)
Run Code Online (Sandbox Code Playgroud)
与这样的巨型列表匹配的最佳解决方案是什么?
我的方法是制作一个 python 脚本,读取我们条件集中所有用户的结果,然后在 python 中根据 CSV 进行过滤。它非常缓慢,但并非在所有情况下都有效。
一位同事建议将 98k 用户上传到临时表中,然后加入查询。这似乎是最聪明的方法,但我想问你们是否都有想法。
我还想知道打印一个包含所有 98k 用户的超长 SQL 查询是否可以匹配并运行它。出于好奇,那甚至会跑吗?
正如您的同事所建议的,通过将 CSV 上传到 S3,然后使用 COPY 将文件导入表中,将您的 ID 放入临时表中。然后,您可以使用 INNER JOIN 条件根据您感兴趣的 ID 列表过滤主数据表。
另一种选择是,如果您无法将文件上传到 S3,可以使用 CREATE TEMP TABLE 为您的 ID 列表设置一个表,然后使用电子表格生成整个 INSERT 语句来填充临时表桌子。不过,100K 的插入可能会很慢。
| 归档时间: |
|
| 查看次数: |
949 次 |
| 最近记录: |