如何在greenplum中转换CONNECT BY

How to convert CONNECT BY in greenplum

任何人都可以建议如何将 CONNECT BY Oracle 查询转换为 Greenplum。 Greenplum 不支持递归查询。所以,我们不能使用 WITH RECURSIVE。是否有任何替代解决方案来重写以下查询。

 SELECT child_id, Parnet_id, LEVEL , SYS_CONNECT_BY_PATH (child_id,'/') as HIERARCHY
 FROM pathnode
 START WITH Parnet_id = child_id
 CONNECT BY NOCYCLE PRIOR child_id = Parnet_id;

有很多方法可以做到这一点,但每个查询都是一次性的。您将需要创建一个循环遍历路径节点 table 和 "return next" 到 return 每一行的函数。您可以在此站点上搜索以查找使用 PostgreSQL 8.2 执行此操作的示例。

正在进行将 Greenplum 变基为 PostgreSQL 8.3、8.4 等的工作。那些后来的 PostgreSQL 版本支持 "with recursive",这是 ANSI SQL 编写 SQL 的方式,但 Greenplum 还不支持它。当它得到 Greenplum 的支持时,我认为它不会表现得那么好。该查询将强制循环和单独的行查找。这在 OLTP 数据库中效果很好,但在 MPP 数据库中效果不佳。

我建议您使用 VIEW 在 Oracle 中转换数据,然后将视图转储到文件以加载到 Greenplum 中。自引用的 DDL,N 级 table 在 MPP 数据库中永远不是一个好主意。