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à.
COPY dal formato JSON
La struttura dei dati JSON è costituita da una serie di oggetti o array. Un oggetto JSON inizia e termina con delle parentesi e contiene un insieme non ordinato 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".
Un array JSON inizia e termina con delle parentesi e contiene un insieme ordinato di valori separati da virgole. Un valore può essere una stringa tra doppie virgolette, un numero, un booleano vero o falso, nullo, un oggetto JSON o un array.
Gli oggetti e gli array JSON possono essere annidati, consentendo una struttura gerarchica dei dati. L'esempio seguente mostra una struttura di dati JSON con due oggetti validi.
{ "id": 1006410, "title": "Amazon Redshift Database Developer Guide" } { "id": 100540, "name": "Amazon Simple Storage Service User Guide" }
Di seguito sono riportati gli stessi dati di due array JSON.
[ 1006410, "Amazon Redshift Database Developer Guide" ] [ 100540, "Amazon Simple Storage Service User Guide" ]
Opzioni COPY per JSON
È possibile specificare le seguenti opzioni quando si utilizza COPY con i dati in formato JSON:
-
'auto'
: COPY carica automaticamente i campi dal file JSON. -
'auto ignorecase'
: COPY carica automaticamente i campi dal file JSON ignorando la distinzione tra maiuscole e minuscole per i nomi dei campi. -
s3://jsonpaths_file
— COPY utilizza un JSONPaths file per analizzare i dati di origine JSON. Un JSONPaths file è un file di testo che contiene un singolo oggetto JSON con il nome"jsonpaths"
associato a una serie di espressioni. JSONPath 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 oggetti o array JSON, consulta. Esempi di copia da JSON
JSONPath opzione
Nella sintassi Amazon Redshift COPY, un' JSONPath espressione specifica il percorso esplicito di un singolo elemento del nome in una struttura dati gerarchica JSON, 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. JSON utilizza un'indicizzazione dell'array basata su 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' JSONPath espressione è un oggetto o una matrice, l'intero oggetto o matrice viene caricato come stringa, comprese le parentesi o le parentesi. Ad esempio, si supponga che i dati JSON contengano il seguente oggetto.
{ "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' JSONPath espressione restituisce $['tags']
quindi il seguente valore.
"["nisi","culpa","ad","amet","voluptate","reprehenderit","veniam"]"
L' JSONPath espressione restituisce $['friends'][1]
quindi il seguente valore.
"{"id": 1,"name": "Renaldo"}"
Ogni JSONPath espressione nell'jsonpaths
array 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 oggetti o array JSON, consulta. Esempi di copia da JSON
Per informazioni su come copiare più file JSON, consultare Utilizzo di un manifest per specificare i fili di dati.
Caratteri escape in JSON
COPY carica \n
come carattere newline e 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 la seguente struttura 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." }
Esegui i seguenti comandi per creare la tabella ESCAPES 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';
Eseguire una query sulla tabella ESCAPES 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
Potrebbe verificarsi una perdita di precisione quando carichi numeri da file di dati in formato JSON in 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 file JSON 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.
-
Utilizza ROUNDEC per arrotondare il numero invece di troncarlo.
-
Invece di utilizzare file JSON o Avro, utilizza file di testo CSV, delimitati da caratteri o a larghezza fissa.