在HIVE SQL上使用cte时出错 - java.lang

mhn*_*mhn 6 sql hive common-table-expression apache-spark pyspark

根据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)
Run Code Online (Sandbox Code Playgroud)

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

  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
""")
Run Code Online (Sandbox Code Playgroud)

Dan*_*ank 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
Run Code Online (Sandbox Code Playgroud)