数千个值的 Redshift IN 条件
Redshift IN condition on thousands of values
获取与 ~100k 值中的任何一个匹配的数据的最佳方法是什么?
对于这个问题,我使用的是 Amazon Redshift 数据库,并且有一个 table 像这样有数亿行的东西:
--------------------
| 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 用户上传到临时 table,然后加入查询。这似乎是最聪明的方法,但我想问问你们有没有想法。
我还想知道是否打印一个包含所有 98k 用户的超长 SQL 查询进行匹配并且 运行 它是否可行。出于好奇,那甚至会有 运行?
按照您同事的建议,通过将 CSV 文件上传到 S3,然后使用 COPY 将文件导入 table,将您的 ID 放入临时文件 table。然后,您可以使用 INNER JOIN 条件过滤您感兴趣的 ID 列表中的主要数据 table。
如果您无法将文件上传到 S3,另一种选择是使用 CREATE TEMP TABLE 为您的 ID 列表设置一个 table,然后使用一个电子表格,用于生成整个 INSERT 语句来填充临时 table。 100K 的插入可能会很慢。
获取与 ~100k 值中的任何一个匹配的数据的最佳方法是什么?
对于这个问题,我使用的是 Amazon Redshift 数据库,并且有一个 table 像这样有数亿行的东西:
--------------------
| 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 用户上传到临时 table,然后加入查询。这似乎是最聪明的方法,但我想问问你们有没有想法。
我还想知道是否打印一个包含所有 98k 用户的超长 SQL 查询进行匹配并且 运行 它是否可行。出于好奇,那甚至会有 运行?
按照您同事的建议,通过将 CSV 文件上传到 S3,然后使用 COPY 将文件导入 table,将您的 ID 放入临时文件 table。然后,您可以使用 INNER JOIN 条件过滤您感兴趣的 ID 列表中的主要数据 table。
如果您无法将文件上传到 S3,另一种选择是使用 CREATE TEMP TABLE 为您的 ID 列表设置一个 table,然后使用一个电子表格,用于生成整个 INSERT 语句来填充临时 table。 100K 的插入可能会很慢。