【发布时间】:2021-09-16 18:53:01
【问题描述】:
我有两张桌子
- 交易表(按年份分区)
- 元数据表(所有键唯一无分区,30M条记录) 我的 Spark SQL 是
SELECT * FROM Transaction WHERE PARTITION_YEAR = 2022; (result: 0 record)
很快就能得到结果
SELECT * FROM Metadata WHERE KEY = "A"(结果:1 条记录)
2-3秒得到结果
最后
SELECT * FROM Transaction t LEFT JOIN Metadata m ON t.key = m.key WHERE t.PARTITION_YEAR = 2022;
很慢(3 分钟)
虽然
SELECT * FROM (SELECT * FROM Transaction WHERE PARTITION_YEAR = 2022) t LEFT JOIN Metadata m ON t.key = m.key;
还需等待(3 分钟)
【问题讨论】:
-
似乎spark正在扫描所有文件,表格的文件格式是什么?如果不是这样,我会建议改成镶木地板,这样可以更好地进行扫描优化
-
镶木地板格式。
标签: apache-spark apache-spark-sql hdfs