【问题标题】:Error using cte on HIVE SQL - java.lang在 HIVE SQL 中使用 cte 时出错 - java.lang
【发布时间】:2016-02-07 10:36:29
【问题描述】:

根据https://cwiki.apache.org/confluence/display/Hive/Common+Table+Expression,我看到 HIVE 支持 CTE。但是,尝试执行简单的 CTE 时出现以下错误

 An error occurred while calling o60.sql.
: java.lang.StackOverflowError
        at java.lang.ThreadLocal.set(ThreadLocal.java:201)

我在尝试以下查询以获取目标节点的所有父节点时收到此错误

  nodelist = sqlContext.sql("""
       SELECT node,src from known
""")
nodelist.registerTempTable("nodelist") 

pathcalc = sqlContext.sql("""  
        WITH    nodeMaster
      AS ( SELECT   p.node,
                    p.src
           FROM     nodelist p
           WHERE    p.node = """+dest+"""
           UNION ALL
           SELECT   c.node,
                    c.src
           FROM     nodeMaster cte
                    INNER JOIN nodelist c ON c.node = cte.src
         )
        SELECT  node
        FROM    nodeMaster m
""")

【问题讨论】:

标签: sql apache-spark hive common-table-expression pyspark


【解决方案1】:

您在 WITH 子句中引用了您的 CTE 表 nodeMaster。根据https://cwiki.apache.org/confluence/display/Hive/Common+Table+Expression,不支持这种递归引用。

相反,您可能想要做类似的事情

    WITH nodedest AS 
      ( SELECT p.node,
               p.src
           FROM nodelist p
           WHERE p.node = {dest}
      )
    SELECT nodelist.node
    FROM nodedest  
    INNER JOIN nodelist 
      ON nodelist.node = nodedest.src

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-11-08
    • 1970-01-01
    • 2013-03-18
    • 1970-01-01
    • 2017-09-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多