查詢會聯結資料 - AWS Clean Rooms

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

查詢會聯結資料

AWS Clean Rooms提供對關聯式和巢狀資料的 SQL 相容存取。

AWS Clean Rooms訪問嵌套數據時,使用虛線符號和數組下標進行路徑導航。它還使FROM子句項目遍歷數組並用於非巢狀操作。下列主題提供不同查詢模式的說明,這些模式將陣列/結構/對映資料類型與路徑和陣列導覽、取消巢狀和聯結結合在一起。

AWS Clean Rooms啟用導覽至陣列和結構[...]括號和點符號分別。此外,您可以使用點符號和陣列使用括號表示法混合導航到結構中。

例如,以下查詢會假設c_orders數組數據列是一個具有結構的數組和一個屬性被命名o_orderkey

SELECT cust.c_orders[0].o_orderkey FROM customer_orders_lineitem AS cust;

您可以在所有類型的查詢中使用點和括號表示法,例如篩選、聯結和彙總。您可以在查詢中使用這些符號,其中通常有列引用。

下列範例會使用篩選結果的 SELECT 陳述式。

SELECT count(*) FROM customer_orders_lineitem WHERE c_orders[0].o_orderkey IS NOT NULL;

下列範例會在 GROUP BY 和 ORDER BY 子句中使用括號和點導覽。

SELECT c_orders[0].o_orderdate, c_orders[0].o_orderstatus, count(*) FROM customer_orders_lineitem WHERE c_orders[0].o_orderkey IS NOT NULL GROUP BY c_orders[0].o_orderstatus, c_orders[0].o_orderdate ORDER BY c_orders[0].o_orderdate;

取消巢狀查詢

若要取消巢狀查詢,AWS Clean Rooms啟用對陣列的迭代。它通過使用查詢的 FROM 子句導航數組來實現這一點。

使用上一個範例,下列範例會重複執行的屬性值c_orders

SELECT o FROM customer_orders_lineitem c, c.c_orders o;

取消嵌套語法是 FROM 子句的擴展。在標準 SQL 中,FROM 子句x (AS) y意味著y迭代關係中的每個元組x。在這種情況下,x指的是一個關係和y指的是關係的別名x。同樣地,使用 FROM 子句項目取消嵌套的語法x (AS) y意味著y迭代數組表達式中的每個值x。在這種情況下,x是一個數組表達式和y是的別名x

左操作數也可以使用點和括號表示法進行常規導航。

在前列查詢會

  • customer_orders_lineitem c是在迭代customer_order_lineitem基底資料表

  • c.c_orders o是在迭代c.c_orders array

若要重複執行o_lineitems屬性,這是一個數組中的數組,你添加多個子句。

SELECT o, l FROM customer_orders_lineitem c, c.c_orders o, o.o_lineitems l;

AWS Clean Rooms在迭代使用數組時,還支持數組索引AT關鍵字。該條款x AS y AT z遍歷數組x並生成字段z,這是數組索引。

以下查詢會如何運作的資料表。

SELECT c_name, orders.o_orderkey AS orderkey, index AS orderkey_index FROM customer_orders_lineitem c, c.c_orders AS orders AT index ORDER BY orderkey_index; c_name | orderkey | orderkey_index -------------------+----------+---------------- Customer#000008251 | 3020007 | 0 Customer#000009452 | 4043971 | 0 (2 rows)

下列範例會重複執行標量陣列。

CREATE TABLE bar AS SELECT json_parse('{"scalar_array": [1, 2.3, 45000000]}') AS data; SELECT index, element FROM bar AS b, b.data.scalar_array AS element AT index; index | element -------+---------- 0 | 1 1 | 2.3 2 | 45000000 (3 rows)

下面的例子迭代了多個級別的數組。這個範例會使用多個 unnest 子句來重複到最內層的陣列。該f.multi_level_array AS數列查詢會multi_level_array。該陣列AS元素是對陣列的迭代multi_level_array

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 [3.1,3.2] | 3.2 (6 rows)

寬鬆的語義

依預設,巢狀資料值的導覽作業會傳回 null,而不是在導覽無效時傳回錯誤。如果巢狀資料值不是物件,或巢狀資料值是物件,但不包含查詢中使用的屬性名稱,則物件導覽無效。

例如,下列查詢會存取巢狀資料行中的無效屬性名稱c_orders:

SELECT c.c_orders.something FROM customer_orders_lineitem c;

如果嵌套數據值不是數組或數組索引超出邊界,數組導航返回 null。

以下查詢會傳回的資料表c_orders[1][1]超出範圍。

SELECT c.c_orders[1][1] FROM customer_orders_lineitem c;

內省的種類

巢狀資料類型資料行支援檢查函數,這些函數會傳回類型以及值的其他類型資訊。AWS 清潔室針對巢狀資料欄支援下列布林函數:

  • 十進制精度

  • 小數比例

  • 是陣列

  • 是大

  • 是字符

  • 為十進位 (_)

  • 是浮動

  • 是 _ 整數

  • 是物件

  • 是 (_ 純量)

  • 是斯莫林特

  • 是 _ 瓦爾恰爾

  • JSON_ 類型

如果輸入值為空,所有這些函數返回 false。IS_SCALAR,IS_OBJECT 和 IS_ARRAY 是相互排斥的,並涵蓋除了空值以外的所有可能值。若要推斷與資料對應的類型,AWS Clean Rooms使用 JSON_TYPEOF 函數,該函數會傳回巢狀資料值的類型 (最上層),如下列範例所示:

SELECT JSON_TYPEOF(r_nations) FROM region_nations; json_typeof ------------- array (1 row)
SELECT JSON_TYPEOF(r_nations[0].n_nationkey) FROM region_nations; json_typeof ------------- number