2015-11-06 8 views
6

Wie https://cwiki.apache.org/confluence/display/Hive/Common+Table+Expression sehe ich, dass CTEs in HIVE unterstützt werden. Allerdings bekomme ich die folgenden Fehler, wenn ein einfache CTEFehler bei der Verwendung von CTE auf HIVE SQL - java.lang

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

ich diesen Fehler auszuführen versuchen, wenn die unten stehende Abfrage versuchen, alle Eltern von einem Zielknoten

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 
""") 
+1

Ich würde tun wollen nicht Hive Referenz für Spark verwenden. Nicht alle Hive-Funktionen werden in Spark unterstützt. Weitere Informationen finden Sie unter [Unterstützte Hive-Funktionen] (http://spark.apache.org/docs/latest/sql-programming-guide.html#supported-hive-features) im [Spark SQL- und DataFrame-Handbuch] /spark.apache.org/docs/latest/sql-programming-guide.html) – zero323

Antwort

0

Sie verweisen auf Ihre CTE-Tabelle zu holen nodeMaster in seiner WITH-Klausel. Gemäß https://cwiki.apache.org/confluence/display/Hive/Common+Table+Expression wird diese rekursive Referenz nicht unterstützt.

Stattdessen können Sie so etwas wie

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 
Verwandte Themen