spark:在查询中使用临时表两次?

kmpatx3s  于 2021-06-29  发布在  Hive
关注(0)|答案(1)|浏览(723)

我正在将一组配置单元查询转换为在spark上运行。到目前为止,通过创建temp表,我已经获得了很好的性能提升,而hive以前是在光盘上创建新表的。我遇到一个查询,在这个查询中,temp表在同一个查询中被调用了两次,这会导致失败。我曾尝试将临时表写入光盘,但我注意到“saveastable”函数已被弃用,当我尝试使用它时,由于执行器超时,我的程序失败。我宁愿不用写光盘。我已经考虑过重写配置单元查询,但更愿意不去管它。我还有别的选择吗?
示例查询

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

为了展示基本概念,我对查询进行了一些简化,但在简化过程中可能会破坏它。

b4wnujal

b4wnujal1#

您的查询包含多个部分。你试过跑步吗-
第一

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中运行过类似的self-joins,它很有效。

相关问题