Open1

Redshift SUPER

tac0x2atac0x2a

SUPER

https://docs.aws.amazon.com/ja_jp/redshift/latest/dg/r_SUPER_type.html

SUPER データ型は、スキーマレス形式の半構造化データの永続性をサポートします。階層データモデルは変更できますが、データの古いバージョンは同じ SUPER 列に共存することができます。

https://docs.aws.amazon.com/ja_jp/redshift/latest/dg/query-super.html#navigation

ドット表記を使用して構造体に、角括弧表記を使用して配列にナビゲーションを混在させることができます

ネスト解除構文

select g.* from great_table g と書くと、g は great_table の1レコードを取り出して反復処理していると考えられる。これと同様にSUPERの配列も反復処理できる。

- c_orders は SUPER配列
SELECT c.*, o FROM customer_orders_lineitem c, c.c_orders o;

c.c_orders o で、配列の要素を o として反復処理することになる。customer_orders_lineitem と c_orders の2重ループになる。

SELECT c_name,
       orders.o_orderkey AS orderkey,
       index AS orderkey_index
FROM customer_orders_lineitem c, c.c_orders AS orders AT index 

と書くと、配列のインデックス(0 origin)を取得できる。

CREATE TABLE foo AS SELECT json_parse('[[1.1, 1.2], [2.1, 2.2], [3.1, 3.2]]') AS multi_level_array;

SELECT array, element FROM foo AS f, f.multi_level_array AS array, array AS element;
   array   | element
-----------+---------
 [1.1,1.2] | 1.1
 [1.1,1.2] | 1.2
 [2.1,2.2] | 2.1
 [2.1,2.2] | 2.2
 [3.1,3.2] | 3.1

こんな感じで展開できる。簡単!