我正在努力将一组Hive查询转换为在spark上运行。到目前为止,我通过创建TEMP表获得了良好的性能提升,其中Hive之前在光盘上创建了新表。我遇到了一个查询,其中TEMP表在同一个查询中被调用两次,这些导致失败。我曾尝试将我的临时表写入光盘,但我注意到" saveAsTable"函数已被弃用,当我尝试使用它时,由于执行程序超时,我的程序失败。无论如何,我宁愿不必写入光盘。我考虑过重写hive查询,但更愿意不管它。我还有其他选择吗?
示例查询
SELECT d.LEVEL_1,
d.LEVEL_2,
d.CODE
FROM
( SELECT DISTINCT CP.LEVEL_1_ID,
LEVEL_2_ID,
FROM ETL_ESTIMATED_PROVIDER_DATA_1_1 CP
LEFT JOIN ETL_ESTIMATED_PROVIDER_DATA_1_1 F ON D.demo_id = F.demo_id
AND D.LEVEL_1_ID = F.LEVEL_1_ID
AND D.LEVEL_2_ID = F.LEVEL_2_ID
我稍微减少了查询以尝试显示基本概念,但在减少过程中可能已经破坏了它。
答案 0 :(得分:0)
您的查询有多个部分。你试过跑 -
第一
SELECT CP.LEVEL_1_ID,
LEVEL_2_ID,
FROM ETL_ESTIMATED_PROVIDER_DATA_1_1 CP
LEFT JOIN ETL_ESTIMATED_PROVIDER_DATA_1_1 F ON D.demo_id = F.demo_id
AND D.LEVEL_1_ID = F.LEVEL_1_ID
AND D.LEVEL_2_ID = F.LEVEL_2_ID
第二
SELECT DISTINCT CP.LEVEL_1_ID,
LEVEL_2_ID,
FROM ETL_ESTIMATED_PROVIDER_DATA_1_1 CP
LEFT JOIN ETL_ESTIMATED_PROVIDER_DATA_1_1 F ON D.demo_id = F.demo_id
AND D.LEVEL_1_ID = F.LEVEL_1_ID
AND D.LEVEL_2_ID = F.LEVEL_2_ID
另外,第二个是你的回答。你不需要在那之上做另一个选择。您在第二次选择d.CODE
时缺少。
我在spark中运行了类似的自连接,但它确实有效。