2015-11-06 11 views
6

Theo https://cwiki.apache.org/confluence/display/Hive/Common+Table+Expression tôi thấy rằng CTE được hỗ trợ trong HIVE. Tuy nhiên, tôi nhận được báo lỗi dưới đây khi cố gắng thực hiện một CTE đơn giảnLỗi khi sử dụng cte trên SQLE SQL - java.lang

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

tôi nhận được lỗi này khi cố gắng truy vấn dưới đây để lấy tất cả các bậc phụ huynh của một node đích

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

tôi sẽ không sử dụng tài liệu tham khảo Hive cho Spark. Không phải tất cả các tính năng của Hive đều được hỗ trợ trong Spark. Để biết thêm thông tin, xem [Các tính năng Hive được hỗ trợ] (http://spark.apache.org/docs/latest/sql-programming-guide.html#supported-hive-features) trong [Hướng dẫn sử dụng SQL và DataFrame] (http://spark.apache.org/docs/latest/sql-programming-guide.html) – zero323

Trả lời

0

Bạn tham khảo bảng CTE của bạn nodeMaster bên trong mệnh đề WITH của nó. Theo số https://cwiki.apache.org/confluence/display/Hive/Common+Table+Expression, tham chiếu đệ quy này không được hỗ trợ.

Thay vào đó bạn có thể muốn làm một cái gì đó giống như

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 
Các vấn đề liên quan