

 Amazon Redshift non supporterà più la creazione di nuovi Python UDFs a partire dalla Patch 198. Python esistente UDFs continuerà a funzionare fino al 30 giugno 2026. Per ulteriori informazioni, consulta il [post del blog](https://aws.amazon.com/blogs/big-data/amazon-redshift-python-user-defined-functions-will-reach-end-of-support-after-june-30-2026/). 

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

# Caricamento di dati semistrutturati in Amazon Redshift
<a name="ingest-super"></a>

Utilizza il tipo di dati SUPER per analizzare ed eseguire query sui dati gerarchici e generici in Amazon Redshift. Amazon Redshift presenta la funzione [Funzione JSON\$1PARSE](JSON_PARSE.md) per analizzare i dati in formato JSON e convertirli nella rappresentazione SUPER. Amazon Redshift supporta anche il caricamento delle colonne SUPER tramite il comando COPY. I formati file supportati sono JSON, Avro, text, formato CSV (comma-separated value, valori delimitati da virgole), Parquet e ORC.

Puoi utilizzare JSON\$1PARSE per inserire e aggiornare i dati JSON nelle colonne SUPER o puoi usare COPY per caricare i dati JSON in Amazon Redshift da origini esterne, ad esempio dai bucket Amazon S3.

**Topics**
+ [

# Utilizzo di JSON\$1PARSE per inserire i dati nelle colonne SUPER
](parse_json.md)
+ [

# Utilizzo di COPY per caricare i dati nelle colonne SUPER
](copy_json.md)

# Utilizzo di JSON\$1PARSE per inserire i dati nelle colonne SUPER
<a name="parse_json"></a>

Puoi inserire o aggiornare i dati JSON in una colonna SUPER utilizzando [Funzione JSON\$1PARSE](JSON_PARSE.md). La funzione analizza i dati in formato JSON e li converte nel tipo di dati SUPER, che è possibile utilizzare nelle istruzioni INSERT o UPDATE. 

Nell'esempio seguente i dati JSON vengono inseriti in una colonna SUPER. Se la funzione JSON\$1PARSE non è presente nella query, Amazon Redshift considera il valore come una singola stringa anziché una stringa in formato JSON che deve essere analizzata.

```
--Drop the table if it exists.
DROP TABLE IF EXISTS test_json;

--Create the table.
CREATE TABLE test_json (all_data SUPER);

--Populate the table.
INSERT INTO test_json VALUES (JSON_PARSE('
{
    "name": {
        "first_name": "Jake",
        "last_name": "Smith"
    },
    "age": 30,
    "hobby": "Biking"
}'
) );

SELECT * FROM test_json;

 all_data  
---------
{"name":{"first_name":"Jake","last_name":"Smith"},"age":30,"hobby":"Biking"}
```

# Utilizzo di COPY per caricare i dati nelle colonne SUPER
<a name="copy_json"></a>

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](copy-parameters-data-format.md#copy-json) in [Parametri del formato dei dati](copy-parameters-data-format.md).

**Topics**
+ [

## Copia di dati da JSON e Avro
](#copy_json-from-JSON)
+ [

## Copia di dati da testo e CSV
](#copy_json-from-text-csv)
+ [

## Copia dei dati da Parquet e ORC in formato colonna
](#copy_json-from-parquet-orc)

## Copia di dati da JSON e Avro
<a name="copy_json-from-JSON"></a>

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 `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 come `noshred`, `auto` e `jsonpaths`, consulta [JSON format for COPY](copy-parameters-data-format.md#copy-json).

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`
<a name="copy_json-one-column"></a>

Puoi copiare interi documenti JSON in singole colonne di dati SUPER utilizzando l’opzione `noshred` 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);
   ```

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

1. 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](serializing-complex-JSON.md).

### Metodo 2: copia di un documento JSON in più colonne di dati SUPER
<a name="copy_json-multiple-columns"></a>

È 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 valore JSON suddiviso.

   ```
   CREATE TABLE region_nations
   (
    r_regionkey smallint
    ,r_name varchar
    ,r_comment varchar
    ,r_nations super
    );
   ```

1. 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 ignorecase` nella clausola FORMAT JSON. Per ulteriori informazioni sul comando COPY, consultare [Caricamento da dati JSON utilizzando l'opzione 'auto ignorecase'](r_COPY_command_examples.md#copy-from-json-examples-using-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 valore JSON suddiviso.

   ```
   CREATE TABLE region_nations
   (
    r_regionkey smallint
    ,r_name varchar
    ,r_comment varchar
    ,r_nations super
    );
   ```

1. In questo caso i nomi delle colonne non corrispondono agli attributi JSON. Puoi creare un file `jsonpaths` che mappa i percorsi degli attributi alle colonne della tabella in base alla loro posizione nell’array `jsonpaths`, come illustrato di seguito:

   ```
   {"jsonpaths": [
          "$.r_regionkey",
          "$.r_name",
          "$.r_comment",
          "$.r_nations
       ]
   }
   ```

1. Utilizza la posizione del file `jsonpaths` come 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';
   ```

1. 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. Considera il seguente esempio:

1. 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);
   ```

1. Mappa il root jsonpath "\$1" al root del documento come segue:

   ```
   {"jsonpaths": [
          "$.r_regionkey",
          "$.r_name",
          "$"
       ]
   }
   ```

1. Utilizza la posizione del file `jsonpaths` come 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](copy-usage_notes-copy-from-json.md). 

## Copia di dati da testo e CSV
<a name="copy_json-from-text-csv"></a>

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. 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 esegui la copia dal testo, se il delimitatore scelto appare anche in un campo SUPER, utilizza 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
<a name="copy_json-from-parquet-orc"></a>

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.