Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.
Interrogazione di dati nidificazione
AWS Clean Roomsoffre accesso compatibile con SQL di accesso a dati relazionali e nidificazione.
AWS Clean Roomsutilizza notazione e array di navigazione per percorsi di navigazione quando si accede a dati nidificazione. Consente inoltre diFROMelementi di nidificazione. Nelle sezioni seguenti sono descritti i diversi modelli di query che combinano l'uso del tipo di dati array/struct/map con percorsi e array di navigazione, annullamento di nidificazione e join.
Navigazione
AWS Clean Roomsconsente la navigazione in matrici e strutture utilizzando il[...]
notazione tra parentesi e punti rispettivamente. Inoltre, è possibile combinare la navigazione in strutture utilizzando la notazione a punti e gli array utilizzando la notazione con parentesi.
Ad esempio, la query di esempio seguente presuppone chec_orders
array di dati (array di dati) è un array con una struttura e un attributo è denominatoo_orderkey
.
SELECT cust.c_orders[0].o_orderkey FROM customer_orders_lineitem AS cust;
È possibile utilizzare le notazioni con punti e parentesi in tutti i tipi di query, ad esempio filtraggio, join e aggregazione. È possibile utilizzare queste notazioni in una query in cui ci sono normalmente riferimenti di colonna.
Nell'esempio seguente viene utilizzata un'istruzione SELECT che filtra i risultati.
SELECT count(*) FROM customer_orders_lineitem WHERE c_orders[0].o_orderkey IS NOT NULL;
Nell'esempio seguente viene utilizzata la navigazione con parentesi e punti nelle clausole GROUP BY e 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;
Annullamento di query
Per annullare le interrogazioni,AWS Clean Roomsconsente l'iterazione su array. Lo fa navigando nell'array utilizzando la clausola FROM di una query.
Utilizzando l'esempio precedente, nell'esempio seguente vengono eseguite interazioni sui valori dell'attributo per c_orders
.
SELECT o FROM customer_orders_lineitem c, c.c_orders o;
La sintassi di annullamento nidificazione è un'estensione della clausola FROM. In SQL standard, la clausola FROM x (AS) y
significa che in y
vengono eseguite iterazioni su ogni tupla in relazione x
. In questo caso, x
si riferisce a una relazione e y
si riferisce a un alias per relazione x
. Allo stesso modo, la sintassi di unnesting utilizza l'elemento della clausola FROMx (AS) y
significa chey
esegue iterazioni su ogni valore nell'espressione dell'arrayx
. In questo caso,x
è un'espressione di matrice ey
è un alias perx
.
Per la navigazione regolare, con l'operando sinistro si può anche utilizzare la notazione con punti e parentesi.
Nell'esempio precedente:
-
customer_orders_lineitem c
è l'iterazione sucustomer_order_lineitem
tavolo base -
c.c_orders o
è l'iterazione suc.c_orders array
Per eseguire iterazioni sull'attributo o_lineitems
, che è un array all'interno di un array, si aggiungono più clausole.
SELECT o, l FROM customer_orders_lineitem c, c.c_orders o, o.o_lineitems l;
AWS Clean Roomssupporta anche un indice di array di nidificazione conATparola chiave. Clausolax AS y AT z
itera sull'arrayx
e genera il campoz
, che è l'indice dell'array.
Nell'esempio seguente viene illustrato il funzionamento di un indice di array:
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)
Nell'esempio seguente sono eseguite iterazioni su un array scalare.
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)
Nell'esempio seguente viene eseguita un'iterazione su un array di più livelli. L'esempio utilizza più clausole unnest per eseguire l'iterazione negli array più interni. Laf.multi_level_array
ASarray di nidificazionemulti_level_array
. L'arrayASelemento è l'iterazione di nidificazionemulti_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)
Semantica permissiva
Per impostazione predefinita, le operazioni di navigazione su valori di dati nidificazione restituendo null invece di restituire un errore quando la navigazione non è valida. Navigazione non è valida se il valore di dati nidificazione non è un oggetto o se il valore di dati nidificazione è un oggetto ma non contiene il nome dell'attributo utilizzato nella query.
Ad esempio, la query seguente accede a un nome di attributo non valido nella colonna di dati nidificazionec_orders
:
SELECT c.c_orders.something FROM customer_orders_lineitem c;
Seguendo, annullamento di nidificazione o annullamento di nidificazione o array di navigazione restituendo null.
Nella query seguente sono annullamento di nidificazione perchéc_orders[1][1]
è fuori limite.
SELECT c.c_orders[1][1] FROM customer_orders_lineitem c;
Tipi di introspezione
Nelle colonne nidificazione di tipo di dati nidificazione sono supportate le funzioni di ispezione che restituiscono il tipo e altri tipi di dati annullamento di nidificazione. AWS Clean Rooms supporta le seguenti funzioni booleane per colonne di dati nidificazione:
-
DECIMAL_PRECISION
-
DECIMAL_SCALE
-
IS_ARRAY
-
IS_BIGINT
-
IS_CHAR
-
IS_DECIMAL
-
IS_FLOAT
-
IS_INTEGER
-
IS_OBJECT
-
IS_SCALARE
-
IS_SMALLINT
-
IS_VARCHAR
-
JSON_TYPEOF
Tutte queste funzioni restituiscono false se il valore di input è null. IS_SCALAR, IS_OBJECT e IS_ARRAY si escludono a vicenda e coprono tutti i valori possibili ad eccezione di null. Per dedurre i tipi corrispondenti ai dati,AWS Clean Roomsutilizza la funzione JSON_TYPEOF che restituisce il tipo (il livello più alto di) il valore di dati nidificazione:
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