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à.
Complesso di serializzazione annidato JSON
Questo argomento dimostra come serializzare i dati nidificati in formato. JSON I dati nidificati sono dati che contengono campi nidificati. I campi nidificati sono campi che vengono uniti come un'unica entità, come matrici, strutture o oggetti.
Un'alternativa ai metodi illustrati in questo tutorial consiste nell'interrogare le colonne di raccolta nidificate di primo livello come serializzate. JSON È possibile utilizzare la serializzazione per ispezionare, convertire e inserire dati annidati come con JSON Redshift Spectrum. Questo metodo è supportato per i formati Ion ORC e JSON Parquet. Utilizzare il parametro di configurazione della sessione json_serialization_enable
per configurare il comportamento di serializzazione. Quando impostati, JSON i tipi di dati complessi vengono serializzati su VARCHAR (65535). È JSON possibile accedere al nido con. JSONfunzioni Per ulteriori informazioni, consulta json_serialization_enable.
Ad esempio, senza impostare json_serialization_enable
, le seguenti query che accedono direttamente alle colonne nidificate avranno esito negativo.
SELECT * FROM spectrum.customers LIMIT 1;
=> ERROR: Nested tables do not support '*' in the SELECT clause.
SELECT name FROM spectrum.customers LIMIT 1;
=> ERROR: column "name" does not exist in customers
L'impostazione di json_serialization_enable
consente di eseguire le query direttamente sulle raccolte di primo livello.
SET json_serialization_enable TO true;
SELECT * FROM spectrum.customers order by id LIMIT 1;
id | name | phones | orders
---+--------------------------------------+----------------+----------------------------------------------------------------------------------------------------------------------
1 | {"given": "John", "family": "Smith"} | ["123-457789"] | [{"shipdate": "2018-03-01T11:59:59.000Z", "price": 100.50}, {"shipdate": "2018-03-01T09:10:00.000Z", "price": 99.12}]
SELECT name FROM spectrum.customers order by id LIMIT 1;
name
---------
{"given": "John", "family": "Smith"}
Considerate i seguenti elementi durante la serializzazione di nidificati. JSON
Quando le colonne della raccolta sono serializzate come VARCHAR (65535), non è possibile accedere direttamente ai relativi sottocampi nidificati come parte della sintassi della query (ad esempio, nella clausola di filtro). Tuttavia, è possibile utilizzare JSON le funzioni per accedere a elementi annidati. JSON
Le seguenti rappresentazioni specializzate non sono supportate:
ORCsindacati
ORCmappe con chiavi di tipo complesso
Datagrammi Ion
ione SEXP
I timestamp vengono restituiti come stringhe ISO serializzate.
Le chiavi delle mappe primitive sono promosse a stringa (ad esempio, da
1
a"1"
).I valori nulli di primo livello vengono serializzati come. NULLs
Se la serializzazione supera la VARCHAR dimensione massima di 65535, la cella viene impostata su. NULL
Serializzazione di tipi complessi contenenti stringhe JSON
Per impostazione predefinita, i valori di stringa contenuti nelle raccolte annidate vengono serializzati come stringhe con escape. JSON L'escape potrebbe essere indesiderabile quando le stringhe sono valide. JSON Potresti invece voler scrivere sottoelementi o campi annidati che siano direttamente come. VARCHAR JSON Abilitare questo comportamento con la configurazione a livello di sessione json_serialization_parse_nested_strings
. Quando entrambi json_serialization_parse_nested_strings
sono json_serialization_enable
impostati, i JSON valori validi vengono serializzati in linea senza caratteri di escape. Quando il valore non è validoJSON, viene escluso come se il valore di json_serialization_parse_nested_strings
configurazione non fosse impostato. Per ulteriori informazioni, consulta json_serialization_parse_nested_strings.
Ad esempio, supponiamo che i dati dell'esempio precedente siano contenuti JSON come tipo structs
complesso nel campo name
VARCHAR (20):
name
---------
{"given": "{\"first\":\"John\",\"middle\":\"James\"}", "family": "Smith"}
Quando è impostato json_serialization_parse_nested_strings
, la colonna name
viene serializzata come segue:
SET json_serialization_enable TO true;
SET json_serialization_parse_nested_strings TO true;
SELECT name FROM spectrum.customers order by id LIMIT 1;
name
---------
{"given": {"first":"John","middle":"James"}, "family": "Smith"}
Anziché essere sottoposto a escape in questo modo:
SET json_serialization_enable TO true;
SELECT name FROM spectrum.customers order by id LIMIT 1;
name
---------
{"given": "{\"first\":\"John\",\"middle\":\"James\"}", "family": "Smith"}