获得与任何一个〜100k值相匹配的数据的最佳方式是什么?成千上万个值的红移IN条件
对于这个问题,我使用的是亚马逊的红移数据库,并有一个表像这样用的数百万行百位:
--------------------
| 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用户上传到临时表中,然后在查询中加入。这似乎是最聪明的方式,但我想问问你们是否都有想法。
我还想知道是否打印一个疯狂的长SQL查询包含所有98k用户匹配和运行它将工作。出于好奇,甚至会跑?
尝试上载您的同事所建议的数据。 –
我建议不要将它称为临时表。这是一张桌子 - 我希望你会在某个时候再次这样做,所以离开桌子并考虑下一次可重复的过程。对于长SQL查询方法,您通常会发现链中的某个进程无法处理大的字符串。客户端工具,复制粘贴缓冲区或者红移本身。无论如何,你可能会发现你想对同一个数据集进行一些不同的分析,并让它坐在一张桌子上,这样做可以实现这一点。最后,根据查询规划器的不同,'EXISTS'_might_可以比'IN'或'JOIN'执行更好。 –
当然,将用户列表上传到表格中是正确的,但如果你们中的任何一个人都很好奇,我会尝试并运行一个巨人具有98k匹配条件的巨大in()语句的SQL查询实际上将运行并且在适当的时间。 :) – clb