Amazon Redshift non supporterà più la creazione di nuove UDF Python a partire dal 1º novembre 2025. Se desideri utilizzare le UDF Python, creale prima di tale data. Le UDF Python esistenti continueranno a funzionare normalmente. Per ulteriori informazioni, consulta il post del blog
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 dati utilizzati da Amazon Redshift per analizzare JSON nei comandi COPY, leggi la descrizione del parametro JSON format for COPY in Parametri del formato dei dati.
Argomenti
Copia di dati da JSON e Avro
Amazon Redshift fornisce i metodi seguenti per importare il 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
autoojsonpaths. 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 come noshred, auto e jsonpaths, consulta JSON format for COPY.
La dimensione massima per un oggetto JSON in Amazon Redshift è 4 MB, che si applica prima di qualsiasi suddivisione o analisi.
Metodo 1: copia di un documento JSON in una singola colonna di dati SUPER con noshred
Puoi copiare interi documenti JSON in singole colonne di dati SUPER utilizzando l’opzione noshred nel comando COPY. Analizza l'esempio seguente:
Crea una tabella con una singola colonna di dati SUPER.
CREATE TABLE region_nations_noshred (rdata SUPER);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
noshrednella 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
rdatadi 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.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. Analizza l'esempio seguente:
Crea una tabella con più colonne per contenere il valore JSON suddiviso.
CREATE TABLE region_nations ( r_regionkey smallint ,r_name varchar ,r_comment varchar ,r_nations super );Per copiare i dati dell’esempio precedente nella tabella
region_nations, 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 ignorecasenella 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. Analizza l'esempio seguente:
Crea una tabella con più colonne per contenere il valore JSON suddiviso.
CREATE TABLE region_nations ( r_regionkey smallint ,r_name varchar ,r_comment varchar ,r_nations super );-
In questo caso i nomi delle colonne non corrispondono agli attributi JSON. Puoi creare un file
jsonpathsche mappa i percorsi degli attributi alle colonne della tabella in base alla loro posizione nell’arrayjsonpaths, come illustrato di seguito:{"jsonpaths": [ "$.r_regionkey", "$.r_name", "$.r_comment", "$.r_nations ] } -
Utilizza la posizione del file
jsonpathscome argomento per l’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'; -
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;
I file jsonpaths 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 nella colonna nations. La colonna name è la chiave di ordinamento e la colonna regionkey è la chiave di distribuzione. Analizza l'esempio seguente:
Crea una tabella con più colonne per contenere il valore JSON suddiviso.
CREATE TABLE nations_sorted ( regionkey smallint, name varchar, nations super ) DISTKEY(regionkey) SORTKEY(name);Mappa il root jsonpath "$" al root del documento come segue:
{"jsonpaths": [ "$.r_regionkey", "$.r_name", "$" ] }Utilizza la posizione del file
jsonpathscome argomento per l’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’utilizzo di jsonpaths, consulta COPY 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 esegui la copia da CSV, i delimitatori contengono i caratteri di escape secondo lo standard CSV. Analizza l'esempio seguente:
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 esegui la copia dal testo, se il delimitatore scelto appare anche in un campo SUPER, utilizza l’opzione ESCAPE durante COPY e UNLOAD. Analizza l'esempio seguente:
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 dati semistrutturati o annidati sono già disponibili in formato Apache Parquet o Apache ORC, puoi utilizzare il comando COPY per importare i 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.
Nell’esempio seguente viene utilizzato 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.