COPYdal formato 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à.

COPYdal formato JSON

La struttura JSON dei dati è costituita da un insieme di oggetti o array. Un JSON oggetto inizia e finisce con parentesi e contiene una raccolta non ordinata di coppie nome-valore. Ogni nome e valore sono separati da due punti e le coppie sono separate da virgole. Il nome è una stringa tra doppie virgolette. I caratteri virgoletta devono essere virgolette semplici (0x22), non oblique o "smart".

Una JSON matrice inizia e finisce con parentesi e contiene una raccolta ordinata di valori separati da virgole. Un valore può essere una stringa racchiusa tra virgolette doppie, un numero, un valore booleano true o false, null, un oggetto o una JSON matrice.

JSONoggetti e array possono essere annidati, abilitando una struttura di dati gerarchica. L'esempio seguente mostra una struttura di JSON dati con due oggetti validi.

{ "id": 1006410, "title": "Amazon Redshift Database Developer Guide" } { "id": 100540, "name": "Amazon Simple Storage Service User Guide" }

Quanto segue mostra gli stessi dati di due JSON matrici.

[ 1006410, "Amazon Redshift Database Developer Guide" ] [ 100540, "Amazon Simple Storage Service User Guide" ]

COPYopzioni per JSON

È possibile specificare le seguenti opzioni quando si utilizza COPY con dati di JSON formato:

  • 'auto' — carica COPY automaticamente i campi dal JSON file.

  • 'auto ignorecase'— carica COPY automaticamente i campi dal JSON file ignorando le maiuscole e minuscole dei nomi dei campi.

  • s3://jsonpaths_file— COPY utilizza un JSONPaths file per analizzare i dati di JSON origine. Un JSONPathsfile è un file di testo che contiene un singolo JSON oggetto con il nome "jsonpaths" associato a una matrice di JSONPath espressioni. Se il nome è una stringa diversa da"jsonpaths", COPY utilizza l''auto'argomento anziché il JSONPaths file.

Per esempi che mostrano come caricare dati utilizzando 'auto''auto ignorecase', o un JSONPaths file e utilizzando JSON oggetti o matrici, vedereCopia dagli JSON esempi.

JSONPathopzione

Nella COPY sintassi di Amazon Redshift, un'JSONPathespressione specifica il percorso esplicito di un singolo elemento del nome in una struttura dati JSON gerarchica, utilizzando la notazione tra parentesi o la notazione a punti. Amazon Redshift non supporta alcun JSONPath elemento, come caratteri jolly o espressioni di filtro, che potrebbe risolversi in un percorso ambiguo o in più elementi del nome. Di conseguenza, Amazon Redshift non è in grado di analizzare strutture di dati complesse e a più livelli.

Di seguito è riportato un esempio di JSONPaths file con JSONPath espressioni che utilizzano la notazione tra parentesi. Il simbolo del dollaro ($) rappresenta la struttura a livello di root.

{ "jsonpaths": [ "$['id']", "$['store']['book']['title']", "$['location'][0]" ] }

Nell'esempio precedente, $['location'][0] fa riferimento al primo elemento di un array. JSONutilizza l'indicizzazione degli array a base zero. Gli indici degli array devono essere numeri interi positivi (maggiori o uguali a zero).

L'esempio seguente mostra il JSONPaths file precedente utilizzando la notazione a punti.

{ "jsonpaths": [ "$.id", "$.store.book.title", "$.location[0]" ] }

Non è possibile mischiare la notazione a parentesi e a punti nell'array jsonpaths. Le parentesi possono essere utilizzate sia nella notazione a parentesi sia nella notazione a punti per fare riferimento a un elemento dell'array.

Quando si utilizza la notazione a punti, le JSONPath espressioni non possono contenere i seguenti caratteri:

  • Virgolette singole diritte ( ' )

  • Periodo o punto ( . )

  • Parentesi ( [ ] ) salvo se utilizzate per fare riferimento a un elemento dell'array

Se il valore nella coppia nome-valore a cui fa riferimento un'JSONPathespressione è un oggetto o una matrice, l'intero oggetto o matrice viene caricato come stringa, comprese le parentesi o le parentesi. Ad esempio, supponiamo che i dati contengano il seguente oggettoJSON.

{ "id": 0, "guid": "84512477-fa49-456b-b407-581d0d851c3c", "isActive": true, "tags": [ "nisi", "culpa", "ad", "amet", "voluptate", "reprehenderit", "veniam" ], "friends": [ { "id": 0, "name": "Martha Rivera" }, { "id": 1, "name": "Renaldo" } ] }

L'JSONPathespressione restituisce $['tags'] quindi il seguente valore.

"["nisi","culpa","ad","amet","voluptate","reprehenderit","veniam"]"

L'JSONPathespressione restituisce $['friends'][1] quindi il seguente valore.

"{"id": 1,"name": "Renaldo"}"

Ogni JSONPath espressione nell'jsonpathsarray corrisponde a una colonna nella tabella di destinazione di Amazon Redshift. L'ordine degli elementi dell'array jsonpaths deve corrispondere all'ordine delle colonne della tabella di destinazione o, se viene utilizzato un elenco di colonne, di quest'ultimo.

Per esempi che mostrano come caricare dati utilizzando l''auto'argomento o un JSONPaths file e utilizzando JSON oggetti o array, consulta. Copia dagli JSON esempi

Per informazioni su come copiare più JSON file, vedereUtilizzo di un manifest per specificare i fili di dati.

Personaggi di escape in JSON

COPY\nsi carica come carattere di nuova riga e si carica \t come carattere di tabulazione. Per caricare una barra rovesciata, crea una sequenza di escape con una barra rovesciata ( \\ ).

Ad esempio, supponiamo di avere quanto segue JSON in un file denominato escape.json nel bucket. s3://amzn-s3-demo-bucket/json/

{ "backslash": "This is a backslash: \\", "newline": "This sentence\n is on two lines.", "tab": "This sentence \t contains a tab." }

Eseguite i seguenti comandi per creare la ESCAPES tabella e caricare il. JSON

create table escapes (backslash varchar(25), newline varchar(35), tab varchar(35)); copy escapes from 's3://amzn-s3-demo-bucket/json/escape.json' iam_role 'arn:aws:iam::0123456789012:role/MyRedshiftRole' format as json 'auto';

Interroga la ESCAPES tabella per visualizzare i risultati.

select * from escapes; backslash | newline | tab ------------------------+-------------------+---------------------------------- This is a backslash: \ | This sentence | This sentence contains a tab. : is on two lines. (1 row)

Perdita di precisione numerica

Potresti perdere la precisione quando carichi numeri da file di dati in JSON formato su una colonna definita come tipo di dati numerico. Alcuni valori float non sono rappresentati con esattezza nei sistemi informatici. Di conseguenza, i dati copiati da un JSON file potrebbero non essere arrotondati come previsto. Per evitare una perdita di precisione, consigliamo di utilizzare una delle seguenti alternative:

  • Rappresentare il numero come stringa racchiudendo il valore in caratteri di doppia virgoletta.

  • ROUNDECUtilizzatelo per arrotondare il numero anziché troncarlo.

  • Invece di utilizzare file JSON o Avro, utilizzate CSV file di testo delimitati da caratteri o a larghezza fissa.