Spark:在查询中两次使用临时表?
Posted
技术标签:
【中文标题】Spark:在查询中两次使用临时表?【英文标题】:Spark: Use Temporary Table Twice in Query? 【发布时间】:2016-04-28 20:00:41 【问题描述】:我正在努力将一组 Hive 查询转换为在 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
我已经稍微减少了查询以尝试显示基本概念,但在减少过程中可能会破坏它。
【问题讨论】:
【参考方案1】:您的查询包含多个部分。你试过跑步吗 -
第一
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 中运行过类似的自联接,它可以工作。
【讨论】:
以上是关于Spark:在查询中两次使用临时表?的主要内容,如果未能解决你的问题,请参考以下文章