如何有效地加入两个大表



我有两个表,table_a and table_b,Table_a包含216646500行,7155998163字节;table_b包含1462775行,2096277141字节

table_a的架构是:C_1,C_2,C_3,C_4;Table_b的模式为:C_2,C_5,C_6,...(约10列)

我想在同一键col_2上加入两个表,但是它已经运行了16个小时,尚未完成...Pyspark代码如下:

combine_table = table_a.join(table_b, table_a.col_2 == table_b.col_2, 'left_outer').collect()

是否有任何有效的方法可以加入这样的两个大桌?

当心爆炸加入。

使用打开数据集,此查询不会在合理的时间内运行:

#standardSQL
SELECT COUNT(*)
FROM `fh-bigquery.reddit_posts.2017_06` a
JOIN `fh-bigquery.reddit_comments.2017_06` b
ON a.subreddit=b.subreddit

如果我们摆脱了两侧的前100个键怎么办?

#standardSQL
SELECT COUNT(*)
FROM (
  SELECT * FROM `fh-bigquery.reddit_posts.2017_06`
  WHERE subreddit NOT IN (SELECT value FROM UNNEST((
  SELECT APPROX_TOP_COUNT(subreddit, 100) s
  FROM `fh-bigquery.reddit_posts.2017_06`
)))) a
JOIN (
  SELECT * FROM `fh-bigquery.reddit_comments.2017_06` b
  WHERE subreddit NOT IN (SELECT value FROM UNNEST((
  SELECT APPROX_TOP_COUNT(subreddit, 100) s
  FROM `fh-bigquery.reddit_comments.2017_06`
)))) b
ON a.subreddit=b.subreddit

此修改的查询在70秒内运行,结果是:

90508538331

900亿。那是一个爆炸的联接。我们在一张桌子上有900万行,第二行中有8000万行,我们的加入产生了900亿行 - 即使从每一方面消除了前100个钥匙之后。

在您的数据中 - 寻找可能产生太多结果的任何密钥,并在产生加入之前将其删除(有时是默认值,例如null

相关内容

  • 没有找到相关文章

最新更新