web-dev-qa-db-ja.com

スノーフレークでCTEテーブルや再帰クエリを使用せずに階層クエリを実行するにはどうすればよいですか? (親子関係)

スノーフレークに移行するPostgresのテーブルがいくつかあります。これらのテーブルの一部は階層的です(同じテーブルへの外部キーポイント)。通常、このデータをクエリするには、CTEテーブルや再帰的なSQLステートメントを使用します。

私の知る限り、Snowflakeはこれらの操作をサポートしていません。これを模倣するか、これを回避するために実行できる他のクエリはありますか?

「現在、SnowflakeはDDL操作での共通テーブル式(CTE)を完全にはサポートしていません。」

スノーフレークのドキュメント: https://docs.snowflake.net/manuals/sql-reference/constructs/with.html

参照してください: https://www.postgresql.org/docs/current/static/queries-with.html

3
ajputnam

Snowflakeは現在、再帰CTEをサポートしています。

支店レベルで金額を統合するアカウントツリーを解析するSQLを構築するだけです。

ソースアカウントツリーデータから、mainを使用して各ブランチと直接のサブブランチ/リーフの組み合わせを構築します

with main as (
  select a.scode as src , b.scode as tgt  
  from accttree a 
    join accttree b on (a.totalinto=b.scode)
), tree as (
  select src, NULL as bridge, tgt  
  from main 
  --where hprop = 15365 
  union all 
  select m.src, m.tgt as bridge, t.tgt as tgt 
  from main m 
    join tree t on (m.tgt = t.src)
)
--Tree gives the branch and leaf relation for the entire set of branches
Select * 
from tree
4
Sairam Asapu