Complesso di serializzazione annidato JSON - Amazon Redshift

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"}