

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

# Utilizzare gli estrattori di percorso
<a name="ion-serde-using-path-extractors"></a>

Amazon Ion ha un formato di file in stile documento, ma Apache Hive ha un formato a colonne semplice. Puoi utilizzare SerDe proprietà speciali di Amazon Ion chiamate `path extractors` per mappare tra i due formati. Gli estrattori di percorso appiattiscono il formato gerarchico di Amazon Ion, mappano i valori di Amazon Ion alle colonne di Hive e possono essere usati per rinominare i campi.

Athena può generare gli estrattori per conto tuo, ma è anche possibile definire estrattori personalizzati, se necessario.

**Topics**
+ [Utilizzare gli estrattori di percorsi generati da Athena](ion-serde-generated-path-extractors.md)
+ [Definire estrattori di percorso personalizzati](ion-serde-specifying-your-own-path-extractors.md)
+ [Utilizzare percorsi di ricerca negli estrattori di percorso](ion-serde-using-search-paths-in-path-extractors.md)
+ [Esempi di estrattori di percorso](ion-serde-examples.md)

# Utilizzare gli estrattori di percorsi generati da Athena
<a name="ion-serde-generated-path-extractors"></a>

Per impostazione predefinita, Athena cerca i valori Amazon Ion di primo livello che corrispondono ai nomi delle colonne Hive e crea estrattori di percorso in fase di runtime in base a questi valori. Se il formato dati Amazon Ion corrisponde allo schema della tabella Hive, Athena genera dinamicamente gli estrattori per conto tuo e non è necessario aggiungere ulteriori estrattori di percorso. Questi estrattori di percorso predefiniti non sono archiviati nei metadati della tabella.

Nell'esempio seguente viene illustrato come Athena genera estrattori in base al nome della colonna.

```
-- Example Amazon Ion Document
{
    identification: {
        name: "John Smith",
        driver_license: "XXXX"
    },
    
    alias: "Johnny"    
}

-- Example DDL
CREATE EXTERNAL TABLE example_schema2 (
    identification MAP<STRING, STRING>,
    alias STRING
)
STORED AS ION
LOCATION 's3://amzn-s3-demo-bucket/path_extraction1/'
```

I seguenti estrattori di esempio sono generati da Athena. Il primo estrae il campo `identification` alla colonna `identification` e il secondo estrae il campo `alias` alla colonna `alias`.

```
'ion.identification.path_extractor' = '(identification)'
'ion.alias.path_extractor' = '(alias)'
```

La seguente query di esempio mostra una tabella estratta.

```
|                  identification                    |  alias   |
|----------------------------------------------------|----------|
|{["name", "driver_license"],["John Smith", "XXXX"]} | "Johnny" |
```

# Definire estrattori di percorso personalizzati
<a name="ion-serde-specifying-your-own-path-extractors"></a>

Se i campi Amazon Ion non vengono mappati in modo ordinato alle colonne Hive, puoi specificare estrattori di percorso personalizzati. Nella clausola `WITH SERDEPROPERTIES` dell'istruzione `CREATE TABLE`, utilizza la seguente sintassi.

```
WITH SERDEPROPERTIES (
   "ion.path_extractor.case_sensitive" = "<Boolean>", 
   "ion.<column_name>.path_extractor" = "<path_extractor_expression>"
)
```

**Nota**  
Per impostazione predefinita, gli estrattori di percorso non distinguono tra maiuscole e minuscole. Per ignorare questa impostazione, imposta la [ion.path_extractor.case_sensitive](ion-serde-using-ion-serde-properties.md#ioncase) SerDe proprietà su`true`.

# Utilizzare percorsi di ricerca negli estrattori di percorso
<a name="ion-serde-using-search-paths-in-path-extractors"></a>

La sintassi della SerDe proprietà per l'estrattore di percorsi contiene: *<path\$1extractor\$1expression>*

```
"ion.<column_name>.path_extractor" = "<path_extractor_expression>"         
```

Puoi utilizzare il *<path\$1extractor\$1expression>* per specificare un percorso di ricerca che analizzi il documento Amazon Ion e trovi i dati corrispondenti. Il percorso di ricerca è racchiuso tra parentesi e può contenere uno o più dei seguenti componenti separati da spazi.
+ **Carattere jolly**: corrisponde a tutti i valori.
+ **Index (Indice)**: corrisponde al valore dell'indice numerico specificato. Gli indici sono a base zero.
+ **Testo**: corrisponde a tutti i valori i cui nomi di campo corrispondono al testo specificato.
+ **Annotazioni**: corrisponde ai valori specificati da un componente di percorso avvolto con le annotazioni specificate.

L'esempio seguente mostra un documento Amazon Ion e alcuni esempi di percorsi di ricerca.

```
-- Amazon Ion document
{
    foo: ["foo1", "foo2"] ,
    bar: "myBarValue", 
    bar: A::"annotatedValue"
}

-- Example search paths
(foo 0)       # matches "foo1"
(1)           # matches "myBarValue"
(*)           # matches ["foo1", "foo2"], "myBarValue" and A::"annotatedValue"
()            # matches {foo: ["foo1", "foo2"] , bar: "myBarValue", bar: A::"annotatedValue"}
(bar)         # matches "myBarValue" and A::"annotatedValue"
(A::bar)      # matches A::"annotatedValue"
```

# Esempi di estrattori di percorso
<a name="ion-serde-examples"></a>

I seguenti esempi di estrattori di percorso mostrano come appiattire e rinominare i campi o estrarre dati come testo Amazon Ion.

## Appiattire e rinominare i campi
<a name="ion-serde-flattening-and-renaming-fields"></a>

L'esempio seguente mostra una serie di percorsi di ricerca che appiattiscono e rinominano i campi. Nell'esempio vengono utilizzati i percorsi di ricerca per effettuare le operazioni seguenti:
+ Mappatura della colonna `nickname` per il campo `alias`
+ Mappatura della colonna `name` per il sottocampo `name` situato nella struttura `identification`.

Di seguito è riportato l'esempio di documento Amazon Ion.

```
-- Example Amazon Ion Document
{
    identification: {
        name: "John Smith",
        driver_license: "XXXX"
    },
    
    alias: "Johnny"    
}
```

Di seguito è riportato l'esempio dell'istruzione `CREATE TABLE` che definisce gli estrattori di percorso.

```
-- Example DDL Query
CREATE EXTERNAL TABLE example_schema2 (
    name STRING,
    nickname STRING
)
ROW FORMAT SERDE
 'com.amazon.ionhiveserde.IonHiveSerDe'
WITH SERDEPROPERTIES (
 'ion.nickname.path_extractor' = '(alias)',
 'ion.name.path_extractor' = '(identification name)'
 )
STORED AS ION
LOCATION 's3://amzn-s3-demo-bucket/path_extraction2/'
```

L'esempio seguente mostra i dati estratti.

```
-- Extracted Table
| name         |   nickname   |
|--------------|--------------|
| "John Smith" |  "Johnny"    |
```

Per ulteriori informazioni sui percorsi di ricerca e altri esempi di percorsi di ricerca, consulta la pagina [Ion Java Path Extraction](https://github.com/amzn/ion-java-path-extraction) su GitHub.

## Estrarre dati di volo in formato testo
<a name="ion-serde-extracting-flight-data-to-text-format"></a>

La seguente query di esempio `CREATE TABLE` utilizza `WITH SERDEPROPERTIES` per aggiungere estrattori di percorso per estrarre i dati di volo e specifica la codifica di output come testo Amazon Ion. Nell'esempio viene utilizzata la sintassi `STORED AS ION`.

```
CREATE EXTERNAL TABLE flights_ion (
    yr INT,
    quarter INT,
    month INT,
    dayofmonth INT,
    dayofweek INT,
    flightdate STRING,
    uniquecarrier STRING,
    airlineid INT,
)
ROW FORMAT SERDE
 'com.amazon.ionhiveserde.IonHiveSerDe'
WITH SERDEPROPERTIES (
 'ion.encoding' = 'TEXT',
 'ion.yr.path_extractor'='(year)',
 'ion.quarter.path_extractor'='(results quarter)',
 'ion.month.path_extractor'='(date month)')
STORED AS ION
LOCATION 's3://amzn-s3-demo-bucket/'
```