[ 
https://issues.apache.org/jira/browse/HIVE-16725?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16786434#comment-16786434
 ] 

Patrick Cuba commented on HIVE-16725:
-------------------------------------

Any due date for this?
This would be super handy for a query I’m working on

> Support recursive CTEs
> ----------------------
>
>                 Key: HIVE-16725
>                 URL: https://issues.apache.org/jira/browse/HIVE-16725
>             Project: Hive
>          Issue Type: Sub-task
>          Components: SQL
>            Reporter: Carter Shanklin
>            Priority: Major
>
> Hive introduced non-recursive CTEs in HIVE-1180.
> Recursive CTEs are commonly used to navigate hierarchies stored in relational 
> tables where a parent ID column "foreign key" refers to another "primary key" 
> field within the same table. In this context recursive CTEs are used to 
> traverse hierarchies, determine parents / children, measure depths, build 
> paths and so on.
> Recursive CTEs are constructed similarly to basic CTEs but include 2 queries 
> at a minimum: first a root query which is combined via UNION / UNION ALL to 
> additional queries that can refer to the CTE's table name.
> Support should include:
> * Basic recursive CTE support: i.e. allow the CTE's table name to be referred 
> in the table subquery after a UNION or UNION ALL.
> * Recursive CTEs should be supported as basic queries, in views, or in 
> subqueries.
> * Loop detection is highly desirable. If a loop is detected the query should 
> fail at runtime. Hive is commonly used in shared clusters where it is 
> difficult to track down rogue queries.
> * To ease portability, suggest  to not require the recursive keyword. It 
> could be made optional.
> * To ease portability, "with column list", i.e. with t(col1, col2) as ( ... ) 
> should be supported.
> Example (Postgres compatible):
> {code}
> create table hierarchy (id integer, parent integer);
> insert into hierarchy values (1, null), (2, 1), (3, 2);
> with recursive t(id, parent) as (
>   select id, parent from hierarchy where parent is null
>   union all select hierarchy.id, hierarchy.parent from hierarchy, t where 
> t.id = hierarchy.parent
> ) select * from t;
>  id | parent
> ----+--------
>   1 |
>   2 |      1
>   3 |      2
> (3 rows)
> update hierarchy set parent = 3 where id = 1;
> with recursive t(id, parent) as (
>   select id, parent from hierarchy where parent = 1
>   union all select hierarchy.id, hierarchy.parent from hierarchy, t where 
> t.id = hierarchy.parent
> ) select * from t;
> [ Query runs forever ]
> {code}
> Implementation Notes:
> The SQL standard requires use of the "recursive" keyword for recursive CTEs. 
> However, major commercial databases including Oracle, SQL Server and DB2 do 
> not require, or in some cases, don't even allow the "recursive" keyword. 
> Postgres requires the "recursive" keyword.
> If Oracle detects a loop it fails with this message: ORA-32044: cycle 
> detected while executing recursive WITH query
> If Postgres encounters a loop in a recursive CTE, the query runs forever and 
> must be killed.



--
This message was sent by Atlassian JIRA
(v7.6.3#76005)

Reply via email to