Utilizzo di COPY per caricare i dati nelle colonne SUPER - Amazon Redshift

Amazon Redshift non supporterà più la creazione di nuovi Python a UDFs partire dal 1° novembre 2025. Se vuoi usare Python UDFs, crea la UDFs data precedente a quella data. Python esistente UDFs continuerà a funzionare normalmente. Per ulteriori informazioni, consulta il post del blog.

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

Utilizzo di COPY per caricare i dati nelle colonne SUPER

Nelle sezioni seguenti, è possibile ottenere informazioni sui diversi modi di utilizzare il comando COPY per caricare i dati JSON in Amazon Redshift. Per informazioni sui parametri del formato dei dati utilizzati da Amazon Redshift per analizzare JSON nei comandi COPY, leggi la JSON format for COPY descrizione dei parametri in. Parametri del formato dei dati

Copia di dati da JSON e Avro

Amazon Redshift offre i seguenti metodi per importare un documento JSON utilizzando COPY, anche con una struttura JSON completamente o parzialmente sconosciuta:

  • Archiviare i dati derivanti da un documento JSON in una singola colonna di dati SUPER utilizzando l'opzione noshred. Questo metodo è utile quando lo schema non è noto o si prevede che cambi. Pertanto, questo metodo rende più facile archiviare l'intera tupla in una singola colonna SUPER.

  • Ridurre il documento JSON in più colonne Amazon Redshift utilizzando l'opzione auto o jsonpaths. Gli attributi possono essere valori scalari di Amazon Redshift o valori SUPER.

È possibile utilizzare queste opzioni con i formati JSON o Avro. Per ulteriori informazioni sulle opzioni JSON comenoshred, e, auto consulta. jsonpaths JSON format for COPY

La dimensione massima per un oggetto JSON in Amazon Redshift è di 4 MB, che si applica prima di qualsiasi distruzione o analisi.

Metodo 1: copia di un documento JSON in una singola colonna di dati SUPER utilizzando noshred

È possibile copiare interi documenti JSON in singole colonne di dati SUPER utilizzando l'noshredopzione nel comando COPY. Considera il seguente esempio:

  1. Crea una tabella con una singola colonna di dati SUPER.

    CREATE TABLE region_nations_noshred (rdata SUPER);
  2. Copiare i dati da Amazon S3 nella singola colonna di dati SUPER. Per importare i dati di origine JSON in una singola colonna di dati SUPER, specificare l'opzione noshred nella clausola FORMAT JSON.

    COPY region_nations_noshred FROM 's3://redshift-downloads/semistructured/tpch-nested/data/json/region_nation' REGION 'us-east-1' IAM_ROLE 'arn:aws:iam::xxxxxxxxxxxx:role/Redshift-S3' FORMAT JSON 'noshred';

    Dopo che COPY ha importato correttamente il JSON, la tabella conterrà una colonna rdata di dati SUPER con i dati dell'intero oggetto JSON. I dati importati mantengono tutte le proprietà della gerarchia JSON. Tuttavia, per un'elaborazione efficiente delle query, gli elementi secondari della struttura vengono convertiti in tipi scalari Amazon Redshift.

  3. Utilizzare la seguente query per recuperare la stringa JSON originale.

    SELECT rdata FROM region_nations_noshred;

    Quando Amazon Redshift genera una colonna di dati SUPER, diventa accessibile utilizzando JDBC come stringa tramite la serializzazione JSON. Per ulteriori informazioni, consulta Serializzazione di JSON nidificato complesso.

Metodo 2: copia di un documento JSON in più colonne di dati SUPER

È possibile suddividere un documento JSON in più colonne che possono essere colonne di dati SUPER o tipi scalari Amazon Redshift. Amazon Redshift diffonde diverse parti dell'oggetto JSON su colonne diverse. Considera il seguente esempio:

  1. Crea una tabella con più colonne per contenere il JSON triturato.

    CREATE TABLE region_nations ( r_regionkey smallint ,r_name varchar ,r_comment varchar ,r_nations super );
  2. Per copiare JSON nella region_nations tabella, specifica l'opzione AUTO nella clausola FORMAT JSON per dividere il valore JSON su più colonne. COPY corrisponde agli attributi JSON di primo livello con i nomi delle colonne e consente l'inserimento dei valori nidificati come valori SUPER, ad esempio array e oggetti JSON.

    COPY region_nations FROM 's3://redshift-downloads/semistructured/tpch-nested/data/json/region_nation' REGION 'us-east-1' IAM_ROLE 'arn:aws:iam::xxxxxxxxxxxx:role/Redshift-S3' FORMAT JSON 'auto';

    Quando i nomi degli attributi JSON sono in lettere maiuscole e minuscole miste, specificare l'opzione auto ignorecase nella clausola FORMAT JSON. Per ulteriori informazioni sul comando COPY, consultare Caricamento da dati JSON utilizzando l'opzione 'auto ignorecase'.

In alcuni casi, c'è una mancata corrispondenza tra i nomi delle colonne e gli attributi JSON o l'attributo da caricare è nidificato con una profondità di più di un livello. In tal caso, utilizzare un file jsonpaths per mappare manualmente gli attributi JSON alle colonne Amazon Redshift. Considera il seguente esempio:

  1. Crea una tabella con più colonne per contenere il JSON distrutto.

    CREATE TABLE region_nations ( r_regionkey smallint ,r_name varchar ,r_comment varchar ,r_nations super );
  2. In questo caso, i nomi delle colonne non corrispondono agli attributi JSON. Puoi creare un jsonpaths file che mappa i percorsi degli attributi alle colonne della tabella in base alla loro posizione nell'jsonpathsarray, come segue:

    {"jsonpaths": [ "$.r_regionkey", "$.r_name", "$.r_comment", "$.r_nations ] }
  3. Utilizzate la posizione del jsonpaths file come argomento dell'opzione FORMAT JSON in COPY.

    COPY nations FROM 's3://redshift-downloads/semistructured/tpch-nested/data/json/region_nation' REGION 'us-east-1' IAM_ROLE 'arn:aws:iam::xxxxxxxxxxxx:role/Redshift-S3' FORMAT JSON 's3://redshift-downloads/semistructured/tpch-nested/data/jsonpaths/nations_jsonpaths.json';
  4. Utilizzare la query seguente per accedere alla tabella che mostra la distribuzione dei dati su più colonne. Le colonne di dati SUPER vengono stampate utilizzando il formato JSON.

    SELECT r_regionkey,r_name,r_comment,r_nations[0].n_nationkey FROM region_nations ORDER BY 1,2,3 LIMIT 1;

jsonpathsi file mappano i campi del documento JSON alle colonne della tabella. È possibile estrarre colonne aggiuntive, come le chiavi di distribuzione e ordinamento, mentre continuano a caricare il documento completo come colonna SUPER. La seguente query carica il documento completo nations nella colonna. La colonna name è la chiave di ordinamento e la colonna regionkey è la chiave di distribuzione. Considera il seguente esempio:

  1. Crea una tabella con più colonne per contenere il codice JSON triturato.

    CREATE TABLE nations_sorted ( regionkey smallint, name varchar, nations super ) DISTKEY(regionkey) SORTKEY(name);
  2. Mappa il jsonpath principale «$» alla radice del documento come segue:

    {"jsonpaths": [ "$.r_regionkey", "$.r_name", "$" ] }
  3. Utilizzate la posizione del jsonpaths file come argomento dell'opzione FORMAT JSON in COPY.

    COPY nations_sorted FROM 's3://redshift-downloads/semistructured/tpch-nested/data/json/region_nation' REGION 'us-east-1' IAM_ROLE 'arn:aws:iam::xxxxxxxxxxxx:role/Redshift-S3' FORMAT JSON 's3://redshift-downloads/semistructured/tpch-nested/data/jsonpaths/nations_sorted_jsonpaths.json';

Per ulteriori informazioni sull'utilizzojsonpaths, vedereCOPY dal formato JSON.

Copia di dati da testo e CSV

Amazon Redshift rappresenta colonne SUPER nei formati testo e CSV come JSON serializzato. È necessaria una formattazione JSON valida per il caricamento delle colonne SUPER con le informazioni sul tipo corrette. Oggetti, array, numeri, booleani e valori nulli non quotati. Avvolgi i valori di stringa tra virgolette. Le colonne SUPER utilizzano regole di escape standard per i formati testo e CSV.

Quando si copia da CSV, i delimitatori vengono eliminati in base allo standard CSV. Considera il seguente esempio:

CREATE TABLE region_nations ( r_regionkey smallint ,r_name varchar ,r_comment varchar ,r_nations super ); COPY region_nations FROM 's3://redshift-downloads/semistructured/tpch-nested/data/csv/region_nation' REGION 'us-east-1' IAM_ROLE 'arn:aws:iam::xxxxxxxxxxxx:role/Redshift-S3' FORMAT CSV;

Quando copiate da un testo, se il delimitatore scelto potrebbe apparire anche in un campo SUPER, utilizzate l'opzione ESCAPE durante COPY e UNLOAD. Considera il seguente esempio:

CREATE TABLE region_nations ( r_regionkey smallint ,r_name varchar ,r_comment varchar ,r_nations super ); COPY region_nations FROM 's3://redshift-downloads/semistructured/tpch-nested/data/text/region_nation' REGION 'us-east-1' IAM_ROLE 'arn:aws:iam::xxxxxxxxxxxx:role/Redshift-S3' DELIMITER ',' ESCAPE;

Copia dei dati da Parquet e ORC in formato colonna

Se i tuoi dati semistrutturati o annidati sono già disponibili in formato Apache Parquet o Apache ORC, puoi utilizzare il comando COPY per importare dati in Amazon Redshift.

La struttura della tabella Amazon Redshift deve corrispondere al numero di colonne e ai tipi di dati delle colonne dei file Parquet o ORC. Specificando SERIALIZETOJSON nel comando COPY, è possibile caricare qualsiasi tipo di colonna nel file che si allinea con una colonna SUPER nella tabella come SUPER. Ciò include la struttura e i tipi di array.

L'esempio seguente utilizza un formato Parquet:

COPY region_nations FROM 's3://redshift-downloads/semistructured/tpch-nested/data/parquet/region_nation' REGION 'us-east-1' IAM_ROLE 'arn:aws:iam::xxxxxxxxxxxx:role/Redshift-S3' FORMAT PARQUET SERIALIZETOJSON;

Nell'esempio seguente viene utilizzato un formato ORC.

COPY region_nations FROM 's3://redshift-downloads/semistructured/tpch-nested/data/orc/region_nation' IAM_ROLE 'arn:aws:iam::xxxxxxxxxxxx:role/Redshift-S3' FORMAT ORC SERIALIZETOJSON;

Quando gli attributi dei tipi di dati di data o ora sono in ORC, Amazon Redshift li converte in varchar dopo averli codificati in SUPER.