

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

# Creazione di tabelle
<a name="tables-described"></a>

Anche se l'esecuzione di un crawler è il metodo consigliato per fare l'inventario dei dati negli archivi dati, puoi aggiungere tabelle di metadati manualmente. AWS Glue Data Catalog Questo approccio consente di avere un maggiore controllo sulle definizioni dei metadati e di personalizzarle in base a requisiti specifici.

È anche possibile aggiungere manualmente definizioni di tabella nel catalogo dati in questi modi:
+ Usando la console AWS Glue per creare manualmente una tabella nel AWS Glue Data Catalog. Per ulteriori informazioni, consulta [Creazione di tabelle mediante la console](#console-tables).
+ Usando l'operazione `CreateTable` nell'[AWS Glue API](aws-glue-api.md) per creare una tabella nel AWS Glue Data Catalog Per ulteriori informazioni, consulta [CreateTable azione (Python: create\$1table)](aws-glue-api-catalog-tables.md#aws-glue-api-catalog-tables-CreateTable).
+ Utilizza modelli. CloudFormation Per ulteriori informazioni, consulta [AWS CloudFormation per AWS Glue](populate-with-cloudformation-templates.md).

Quando definisci manualmente una tabella utilizzando la console o un'API, specifichi lo schema della tabella e il valore di un campo di classificazione che indica il tipo e il formato dei dati nell'origine dati. Se un crawler crea la tabella, lo schema e il formato dei dati sono determinati da un classificatore incorporato o da uno personalizzato. Per ulteriori informazioni sulla creazione di una tabella tramite la console AWS Glue, consulta [Creazione di tabelle mediante la console](#console-tables).

**Topics**
+ [Partizioni tabella](#tables-partition)
+ [Collegamenti di risorsa della tabella](#tables-resource-links)
+ [Creazione di tabelle mediante la console](#console-tables)
+ [Creazione di indici di partizione](partition-indexes.md)
+ [Aggiornamento delle tabelle del catalogo dati create manualmente usando i crawler](#update-manual-tables)
+ [Proprietà della tabella del catalogo dati](#table-properties)

## Partizioni tabella
<a name="tables-partition"></a>

Un a definizione di tabella AWS Glue di una cartella Amazon Simple Storage Service (Amazon S3) può descrivere una tabella partizionata. Ad esempio, per migliorare le prestazioni delle query, una tabella partizionata potrebbe separare i dati mensili in diversi file utilizzando il nome del mese come chiave. Le definizioni di tabella in AWS Glue includono la chiave di partizionamento di una tabella. Quando AWS Glue valuta i dati nelle cartelle Amazon S3 per catalogare una tabella, determina se viene aggiunta una singola tabella o una tabella partizionata. 

È possibile creare indici delle partizioni su una tabella per recuperare un sottoinsieme delle partizioni invece di caricare tutte le partizioni nella tabella. Per ulteriori informazioni sull'utilizzo degli indici delle partizioni, consulta [Creazione di indici di partizione](partition-indexes.md).

Perché AWS Glue possa creare una tabella partizionata per una cartella Amazon S3, devono essere vere tutte le condizioni seguenti:
+ Gli schemi dei file sono simili, come stabilito da AWS Glue.
+ Il formato dati dei file è lo stesso.
+ Il formato di compressione dei file è lo stesso.

Ad esempio, puoi avere un tuo bucket Amazon S3 denominato `my-app-bucket`, in cui vengono memorizzati i dati di vendita delle app iOS e Android. I dati sono partizionati in base ad anno, mese e giorno. I file di dati per le vendite iOS e Android hanno lo stesso schema, formato dei dati e formato di compressione. In AWS Glue Data Catalog, il AWS Glue crawler crea una definizione di tabella con chiavi di partizionamento per anno, mese e giorno. 

Il seguente elenco Amazon S3 di `my-app-bucket` mostra alcune delle partizioni. Il simbolo `=` viene utilizzato per assegnare i valori di chiave di partizione. 

```
   my-app-bucket/Sales/year=2010/month=feb/day=1/iOS.csv
   my-app-bucket/Sales/year=2010/month=feb/day=1/Android.csv
   my-app-bucket/Sales/year=2010/month=feb/day=2/iOS.csv
   my-app-bucket/Sales/year=2010/month=feb/day=2/Android.csv
   ...
   my-app-bucket/Sales/year=2017/month=feb/day=4/iOS.csv
   my-app-bucket/Sales/year=2017/month=feb/day=4/Android.csv
```

## Collegamenti di risorsa della tabella
<a name="tables-resource-links"></a>


|  | 
| --- |
| La console AWS Glue è stata recentemente aggiornata. La versione corrente della console non supporta i collegamenti di risorsa alla tabella. | 

Il catalogo dati può anche contenere *collegamenti di risorsa* della tabella. Un collegamento di risorsa della tabella è un collegamento a un database locale o condiviso. Al momento, puoi creare collegamenti di risorsa solo in AWS Lake Formation. Dopo aver creato un collegamento di risorsa a una tabella, è possibile utilizzare il nome del collegamento di risorsa ovunque desideri utilizzare il nome della tabella. Insieme alle tabelle di cui si è proprietari o che sono condivisi con l'utente, i collegamenti di risorsa alla tabella vengono restituiti da `glue:GetTables()` e vengono visualizzati come voci nella pagina **Tables** (Tabelle) della console AWS Glue.

Il catalogo dati può anche contenere collegamenti di risorsa ai database.

Per ulteriori informazioni sui collegamenti di risorsa, consulta [Creazione di collegamenti di risorsa](https://docs.aws.amazon.com/lake-formation/latest/dg/creating-resource-links.html) nella *Guida per gli sviluppatori di AWS Lake Formation *.

## Creazione di tabelle mediante la console
<a name="console-tables"></a>

Una tabella in AWS Glue Data Catalog è la definizione di metadati che rappresenta i dati in un archivio dati. Puoi creare tabelle quando esegui un crawler oppure puoi creare una tabella manualmente nella console AWS Glue . L'elenco **Tables (Tabelle)** nella console AWS Glue mostra i valori dei metadati della tabella. Usa le definizioni di tabella per specificare origini e destinazioni al momento della creazione di processi ETL (estrazione, trasformazione e caricamento). 

**Nota**  
A seguito delle recenti modifiche alla console di AWS gestione, potrebbe essere necessario modificare i ruoli IAM esistenti per disporre dell'[https://docs.aws.amazon.com/glue/latest/dg/aws-glue-api-catalog-tables.html#aws-glue-api-catalog-tables-SearchTables](https://docs.aws.amazon.com/glue/latest/dg/aws-glue-api-catalog-tables.html#aws-glue-api-catalog-tables-SearchTables)autorizzazione. Per la creazione di nuovi ruoli, l'autorizzazione dell'API `SearchTables` è già stata aggiunta come impostazione predefinita.

Per iniziare, accedi Console di gestione AWS e apri la AWS Glue console all'indirizzo [https://console.aws.amazon.com/glue/](https://console.aws.amazon.com/glue/). Scegli la scheda **Tables** (Tabelle) e usa il pulsante **Add tables** (Aggiungi tabelle) per creare tabelle con un crawler o digitando manualmente gli attributi. 

### Aggiunta di tabelle nella console
<a name="console-tables-add"></a>

Per usare un crawler per aggiungere tabelle, scegli **Add tables** (Aggiungi tabelle), **Add tables using a crawler** (Aggiungi tabelle utilizzando un crawler). Quindi segui le istruzioni nella procedura guidata **Add crawler** (Aggiungi crawler). Quando il crawler viene eseguito, vengono aggiunte tabelle al AWS Glue Data Catalog. Per ulteriori informazioni, consulta [Utilizzo dei crawler per compilare il Catalogo dati](add-crawler.md).

Se conosci gli attributi necessari per creare una definizione di tabella Amazon Simple Storage Service (Amazon S3) nel catalogo dati, puoi crearla con la procedura guidata di creazione di tabelle. Scegli **Add tables** (Aggiungi tabelle), **Add table manually** (Aggiungi tabella manualmente) e segui le istruzioni della procedura guidata **Add tables** (Aggiungi tabella).

Quando aggiungi una tabella manualmente attraverso la console, considera quanto segue:
+ Se prevedi di accedere alla tabella da Amazon Athena, fornisci un nome con solo caratteri alfanumerici e di sottolineatura. Per ulteriori informazioni, consulta [Nomi di Athena](https://docs.aws.amazon.com/athena/latest/ug/tables-databases-columns-names.html#ate-table-database-and-column-names-allow-only-underscore-special-characters).
+ L'ubicazione dei dati di origine deve essere un percorso Amazon S3.
+ Il formato dei dati deve corrispondere a uno dei formati elencati nella procedura guidata. La classificazione corrispondente e SerDe le altre proprietà della tabella vengono compilate automaticamente in base al formato scelto. È possibile definire tabelle con i seguenti formati:   
**Avro**  
Formato binario Apache Avro JSON.  
**CSV**  
Character separated values. È inoltre possibile specificare il delimitatore di virgola, barra verticale, punto e virgola, tabulazione o Ctrl-A.  
**JSON**  
JavaScript Notazione dell'oggetto.  
**XML**  
Formato Extensible Markup Language. Specificate il tag XML che definisce una riga nei dati. Le colonne sono definite all'interno dei tag di riga.  
**Parquet**  
Storage a colonne Apache Parquet.  
**ORC**  
Formato di file Optimized Row Columnar (ORC). Un formato progettato per archiviare in modo efficiente i dati Hive.
+ È possibile definire una chiave di partizione per la tabella.
+ Attualmente, le tabelle partizionate create con la console non possono essere utilizzate nei lavori ETL.

### Attributi della tabella
<a name="console-tables-attributes"></a>

Di seguito sono elencati alcuni importanti attributi della tua tabella:

**Name**  
Il nome viene stabilito in fase di creazione della tabella e non può essere modificato. Dovrai fare riferimento a un nome di tabella in molte operazioni AWS Glue.

**Database**  
L'oggetto container in cui la tabella risiede. Questo oggetto contiene un'organizzazione delle tabelle che esiste all'interno dell'archivio dati AWS Glue Data Catalog e potrebbe differire da quella dell'organizzazione del data store. Quando elimini un database, anche tutte le tabelle in esso contenute vengono eliminate dal catalogo dati. 

**Description**  
La descrizione della tabella. È possibile scrivere una descrizione per aiutare a comprendere i contenuti della tabella.

**Formato della tabella**  
Specificate la creazione di una AWS Glue tabella standard o di una tabella in formato Apache Iceberg.  
Il catalogo dati offre le seguenti opzioni di ottimizzazione delle tabelle per gestire l'archiviazione delle tabelle e migliorare le prestazioni delle query per le tabelle Iceberg.  
+ **Compattazione**: I file di dati vengono uniti e riscritti per rimuovere i dati obsoleti e consolidare i dati frammentati in file più grandi ed efficienti.
+ **Conservazione degli snapshot**: gli snapshot sono versioni con data e ora di una tabella Iceberg. Le configurazioni di conservazione degli snapshot consentono ai clienti di stabilire per quanto tempo conservare gli snapshot e quanti snapshot conservare. La configurazione di un ottimizzatore di conservazione degli snapshot può aiutare a gestire il sovraccarico di archiviazione rimuovendo gli snapshot più vecchi e non necessari e i relativi file sottostanti.
+ **Eliminazione di file orfani**: i file orfani sono file a cui non fanno più riferimento i metadati della tabella Iceberg. Questi file possono accumularsi nel tempo, soprattutto dopo operazioni come l'eliminazione di tabelle o i processi ETL non riusciti. L'abilitazione dell'eliminazione dei file orfani consente di AWS Glue identificare e rimuovere periodicamente questi file non necessari, liberando spazio di archiviazione.
Per ulteriori informazioni, consulta [Ottimizzazione delle tabelle Iceberg](table-optimizers.md).

**Configurazione di ottimizzazione**  
È possibile utilizzare le impostazioni predefinite o personalizzare le impostazioni per abilitare gli ottimizzatori di tabella.

**Ruolo IAM**  
 Per eseguire gli ottimizzatori delle tabelle, il servizio assume un ruolo IAM per conto dell'utente. Puoi scegliere un ruolo IAM utilizzando il menu a discesa. Assicurati che il ruolo disponga delle autorizzazioni necessarie per abilitare la compattazione.  
Consulta [Prerequisiti per l'ottimizzazione delle tabelle](optimization-prerequisites.md) per ulteriori informazioni sulle autorizzazioni necessarie per il ruolo IAM.

**Location (Ubicazione)**  
Il puntatore all'ubicazione dei dati in un datastore rappresentato da questa definizione di tabella.

**Classificazione**  
Un valore di categorizzazione fornito al momento della creazione della tabella. Solitamente viene scritto quando un crawler viene eseguito e specifica il formato dei dati di origine.

**Ultimo aggiornamento**  
Data e ora (UTC) in cui questa tabella è stata aggiornata nel catalogo dati.

**Data aggiunta**  
Data e ora (UTC) in cui questa tabella è stata aggiunta al catalogo dati.

**Deprecated**  
Se AWS Glue rileva che una tabella nel catalogo dati non è più presente nel datastore originale, la contrassegna come obsoleta nel catalogo dati. Se esegui un processo che fa riferimento a una tabella obsoleta, il processo potrebbe fallire. Modifica processi che fanno riferimento a tabelle obsolete per rimuoverle come origini e destinazioni. Consigliamo di eliminare le tabelle obsolete quando non sono più necessarie. 

**Connessione**  
Se AWS Glue richiede una connessione al datastore, il nome della connessione è associato alla tabella.

### Visualizzazione e gestione dei dettagli della tabella
<a name="console-tables-details"></a>

Per vedere i dettagli di una tabella esistente, scegli il nome tabella nell'elenco quindi scegli **Action, View details** (Operazione, Mostra dettagli).

I dettagli tabella includono le proprietà della tabella e del relativo schema. Questa vista mostra lo schema della tabella, inclusi i nomi colonna nell'ordine definito per la tabella, i tipi di dati e le colonne chiave per le partizioni. Se una colonna è di tipo complesso, puoi scegliere **View properties** (Visualizza proprietà) per visualizzare i dettagli della struttura di tale campo, come mostrato nell'esempio seguente:

```
{
"StorageDescriptor": 
    {
      "cols": {
         "FieldSchema": [
           {
             "name": "primary-1",
             "type": "CHAR",
             "comment": ""
           },
           {
             "name": "second ",
             "type": "STRING",
             "comment": ""
           }
         ]
      },
      "location": "s3://aws-logs-111122223333-us-east-1",
      "inputFormat": "",
      "outputFormat": "org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat",
      "compressed": "false", 
      "numBuckets": "0",
      "SerDeInfo": {
           "name": "",
           "serializationLib": "org.apache.hadoop.hive.serde2.OpenCSVSerde",
           "parameters": {
               "separatorChar": "|"
            }
      },
      "bucketCols": [],
      "sortCols": [],
      "parameters": {},
      "SkewedInfo": {},
      "storedAsSubDirectories": "false"
    },
    "parameters": {
       "classification": "csv"
    }
}
```

Per ulteriori informazioni sulle proprietà di una tabella, come `StorageDescriptor`, consulta [StorageDescriptor struttura](aws-glue-api-catalog-tables.md#aws-glue-api-catalog-tables-StorageDescriptor).

Per modificare lo schema di una tabella, scegli **Edit schema** (Modifica schema) per aggiungere o rimuovere colonne, modificarne i nomi e modificare i tipi di dati.

 Per confrontare diverse versioni di una tabella, incluso lo schema, scegli **Confronta versioni** per visualizzare un side-by-side confronto tra due versioni dello schema per una tabella. Per ulteriori informazioni, consulta [Confronto delle versioni dello schema della tabella](#console-tables-schema-comparison). 

Per visualizzare i file che costituiscono una partizione Amazon S3, scegli **View partition** (Visualizza partizione). Per tabelle Amazon S3, la colonna **Key** (Chiave) visualizza le chiavi di partizione usate per partizionare la tabella nel datastore di origine. Il partizionamento è un modo per dividere una tabella in parti correlate in base ai valori di una colonna chiave, ad esempio data, posizione o reparto. Per ulteriori informazioni sulle partizioni, cercare "hive partitioning." su Internet.

**Nota**  
Per ottenere step-by-step indicazioni sulla visualizzazione dei dettagli di una tabella, consulta il tutorial **Esplora la tabella** nella console.

### Confronto delle versioni dello schema della tabella
<a name="console-tables-schema-comparison"></a>

 Quando si confrontano due versioni di schemi di tabelle, è possibile confrontare le modifiche delle righe nidificate espandendo e comprimendo le righe nidificate, confrontare gli schemi di due versioni e visualizzare le side-by-side proprietà delle tabelle. side-by-side 

 Come confrontare le versioni 

1.  Dalla console AWS Glue, scegli **Tabelle**, quindi **Azioni** e scegli **Confronta versioni**.   
![\[Lo screenshot mostra il pulsante Azioni quando è selezionato. Il menu a discesa mostra l'opzione Confronta versioni.\]](http://docs.aws.amazon.com/it_it/glue/latest/dg/images/catalog-table-compare-versions.png)

1.  Scegli una versione da confrontare scegliendo il menu a discesa delle versioni. Quando si confrontano gli schemi, la scheda Schema è evidenziata in arancione. 

1.  Quando si confrontano le tabelle tra due versioni, gli schemi delle tabelle vengono visualizzati sul lato sinistro e destro dello schermo. Ciò consente di determinare visivamente le modifiche confrontando il nome della colonna, il tipo di dati, la chiave e i campi di commento. side-by-side Quando viene apportata una modifica, un'icona colorata mostra il tipo di modifica apportata. 
   +  Eliminata: contrassegnata da un'icona rossa, indica dove la colonna è stata rimossa da una versione precedente dello schema della tabella. 
   +  Modificata o spostata: contrassegnata da un'icona blu, indica dove la colonna è stata modificata o spostata in una versione più recente dello schema della tabella. 
   +  Aggiunta: contrassegnata da un'icona verde, indica dove la colonna è stata aggiunta a una versione più recente dello schema della tabella. 
   +  Modifiche annidate: contrassegnata da un'icona gialla, indica le modifiche nella colonna annidata. Scegli la colonna da espandere e visualizza le colonne che sono state eliminate, modificate, spostate o aggiunte.   
![\[Lo screenshot mostra il confronto dello schema della tabella tra due versioni. Sul lato sinistro c'è la versione precedente. Sul lato destro c'è la versione più recente. L'icona di eliminazione si trova accanto a una colonna che è stata rimossa dalla versione precedente e manca nella versione più recente.\]](http://docs.aws.amazon.com/it_it/glue/latest/dg/images/catalog-table-version-comparison.png)

1.  Utilizza la barra di ricerca dei campi di filtro per visualizzare i campi in base ai caratteri che inserisci qui. Se immetti un nome di colonna in una delle versioni della tabella, i campi filtrati vengono visualizzati in entrambe le versioni della tabella per mostrare dove sono state apportate le modifiche. 

1.  Per confrontare le proprietà, scegli la scheda **Proprietà**. 

1.  Per interrompere il confronto tra le versioni, scegli **Interrompi confronto** per tornare all'elenco delle tabelle. 

# Creazione di indici di partizione
<a name="partition-indexes"></a>

Nel corso del tempo, centinaia di migliaia di partizioni vengono aggiunte a una tabella. L'[GetPartitions API](https://docs.aws.amazon.com/glue/latest/webapi/API_GetPartitions.html) viene utilizzata per recuperare le partizioni nella tabella. L'API restituisce partizioni che corrispondono all'espressione fornita nella richiesta.

Prendiamo come esempio una tabella *sales\$1data* che è partizionata dalle chiavi *Country*, *Category*, *Year*, *Month* and *creationDate*. Se si desidera ottenere i dati di vendita per tutti gli articoli venduti per la categoria *Books* nell'anno 2020, dopo il *2020-08-15*, occorre inviare una richiesta `GetPartitions` con l'espressione “Category = 'Books' and creationDate > '2020-08-15'” al catalogo dati.

Se nella tabella non sono presenti indici delle partizioni, AWS Glue carica tutte le partizioni della tabella e quindi filtra le partizioni caricate utilizzando l'espressione di query fornita dall'utente nella richiesta `GetPartitions`. L'esecuzione della query richiede più tempo man mano che il numero di partizioni aumenta in una tabella senza indici. Con un indice, la query `GetPartitions` cercherà di recuperare un sottoinsieme delle partizioni invece di caricare tutte le partizioni nella tabella.

**Topics**
+ [Informazioni sugli indici delle partizioni](#partition-index-1)
+ [Creazione di una tabella con indici delle partizioni](#partition-index-creating-table)
+ [Aggiunta di un indice di partizione a una tabella esistente](#partition-index-existing-table)
+ [Descrizione degli indici delle partizioni su una tabella](#partition-index-describing)
+ [Limitazioni all'utilizzo degli indici delle partizioni](#partition-index-limitations)
+ [Utilizzo degli indici per una chiamata ottimizzata GetPartitions](#partition-index-getpartitions)
+ [Integrazione con i motori](#partition-index-integration-engines)

## Informazioni sugli indici delle partizioni
<a name="partition-index-1"></a>

Quando crei un indice di partizione, specifichi un elenco di chiavi di partizione già esistenti in una determinata tabella. L'indice delle partizioni è un sottoelenco di chiavi di partizione definite nella tabella. Un indice di partizione può essere creato su qualsiasi permutazione delle chiavi di partizione definite nella tabella. Per la tabella *sales\$1data* di cui sopra, gli indici possibili sono (country, category, creationDate), (country, category, year), (country, category), (country), (category, country, year, month) e così via.

Il catalogo dati concatenerà i valori delle partizioni nell'ordine fornito al momento della creazione dell'indice. L'indice viene creato in modo coerente man mano che le partizioni vengono aggiunte alla tabella. Gli indici possono essere creati per i tipi di colonna String (string, char e varchar), Numeric (int, bigint, long, tinyint e smallint) e Date (yyyy-MM-dd). 

**Tipi di dati supportati**
+ Data: una data in formato ISO, ad esempio `YYYY-MM-DD`. Ad esempio, la data `2020-08-15`. Il formato utilizza i trattini (‐) per separare l'anno, il mese e il giorno. L'intervallo consentito per le date di indicizzazione va da `0000-01-01` a `9999-12-31`.
+ String: una stringa letterale racchiusa tra virgolette singole o doppie. 
+ Char: lunghezza fissa dei dati dei caratteri specificata tra 1 e 255, ad esempio char(10).
+ Varchar: lunghezza variabile dei dati dei caratteri specificata tra 1 e 65.535, ad esempio varchar(10).
+ Numeric (numerico): int, bigint, long, tinyint e smallint

Gli indici sui tipi di dati Numeric, String e Date supportano gli operatori =, >, >=, <, <= e between. La soluzione di indicizzazione attualmente supporta solo l'operatore logico `AND`. Le sottoespressioni con gli operatori “LIKE”, “IN”, “OR” e “NOT” vengono ignorate nell'espressione il filtraggio con indice. Il filtraggio per la sottoespressione ignorata viene eseguito sulle partizioni recuperate dopo aver applicato il filtraggio dell'indice.

Per ogni partizione aggiunta a una tabella, viene creato un elemento indice corrispondente. Per una tabella con partizioni “n”, l'indice di partizione 1 risulterà come elementi indice di partizione “n”. L'indice di partizione “m” sulla stessa tabella risulterà come elementi di indice di partizione “m\$1n”. Ogni elemento dell'indice della partizione verrà addebitato in base alla policy dei prezzi AWS Glue corrente per l'archiviazione del catalogo dati. Per informazioni dettagliate sui prezzi degli oggetti di archiviazione, consulta [Prezzi di AWS Glue](https://aws.amazon.com/glue/pricing/).

## Creazione di una tabella con indici delle partizioni
<a name="partition-index-creating-table"></a>

È possibile creare un indice di partizione durante la creazione di una tabella. La richiesta `CreateTable` utilizza un elenco di [oggetti `PartitionIndex`](https://docs.aws.amazon.com/glue/latest/dg/aws-glue-api-catalog-tables.html#aws-glue-api-catalog-tables-PartitionIndex) come input. È possibile creare un massimo di 3 indici delle partizioni su una determinata tabella. Ogni indice di partizione richiede un nome e un elenco di `partitionKeys` definite per la tabella. Gli indici creati su una tabella possono essere recuperati utilizzando l'[API `GetPartitionIndexes`](https://docs.aws.amazon.com/glue/latest/dg/aws-glue-api-catalog-tables.html#aws-glue-api-catalog-tables-GetPartitionIndexes)

## Aggiunta di un indice di partizione a una tabella esistente
<a name="partition-index-existing-table"></a>

Per aggiungere un indice di partizione a una tabella esistente, utilizza l'operazione `CreatePartitionIndex`. Puoi creare un solo `PartitionIndex` per ogni operazione `CreatePartitionIndex`. L'aggiunta di un indice non influisce sulla disponibilità di una tabella, poiché durante la creazione degli indici la tabella continua a essere disponibile.

Lo stato dell'indice per una partizione aggiunta è impostato su CREATING (CREAZIONE IN CORSO) e la creazione dei dati di indice viene avviata. Se il processo per la creazione degli indici ha esito positivo, IndexStatus viene aggiornato in ACTIVE (ATTIVO) e, per un processo non riuscito, lo stato dell'indice viene aggiornato a FAILED (NON RIUSCITO). La creazione dell'indice può avere esito negativo per diversi motivi ed è possibile utilizzare l'operaizione `GetPartitionIndexes` per recuperare i dettagli dell'errore. I possibili errori sono:
+ ENCRYPTED\$1PARTITION\$1ERROR: la creazione di indici su una tabella con partizioni crittografate non è supportata.
+ INVALID\$1PARTITION\$1TYPE\$1DATA\$1ERROR: riscontrato quando il parametro `partitionKey` non è un valore valido per il tipo di dati della `partitionKey` corrispondente. Ad esempio: una `partitionKey` con il tipo di dati 'int' ha un valore 'foo'.
+ MISSING\$1PARTITION\$1VALUE\$1ERROR: riscontrato quando il `partitionValue` per un `indexedKey` non è presente. Ciò può accadere quando una tabella non è partizionata in modo coerente.
+ UNSUPPORTED\$1PARTITION\$1CHARACTER\$1ERROR: riscontrato quando il valore di una chiave di partizione indicizzata contiene i caratteri \$1u0000, \$1u0001 o \$1u0002
+ INTERNAL\$1ERROR: si è verificato un errore interno durante la creazione degli indici. 

## Descrizione degli indici delle partizioni su una tabella
<a name="partition-index-describing"></a>

Per recuperare gli indici delle partizioni creati su una tabella, utilizza l'operazione `GetPartitionIndexes`. La parte risposta mostra tutti gli indici della tabella insieme allo stato corrente di ciascun indice (`IndexStatus`).

L'`IndexStatus` di un indice può essere uno dei seguenti:
+ `CREATING`: l'indice è in fase di creazione e non è ancora disponibile per l'uso.
+ `ACTIVE`: l'indice è pronto per l'uso. Le richieste possono utilizzare l'indice per eseguire una query ottimizzata.
+ `DELETING`: l'indice è attualmente in fase di eliminazione e non può essere più utilizzato. Un indice nello stato attivo può essere eliminato utilizzando la richiesta `DeletePartitionIndex`, che sposta lo stato da ACTIVE (ATTIVO) a DELETING (ELIMINAZIONE IN CORSO).
+ `FAILED`: la creazione dell'indice su una tabella esistente non è riuscita. Ogni tabella memorizza gli ultimi 10 indici non riusciti.

Le possibili transizioni di stato per gli indici creati su una tabella esistente sono le seguenti:
+ CREATING → ACTIVE → DELETING (CREAZIONE → ATTIVO → ELIMINAZIONE IN CORSO)
+ CREATING → FAILED (IN FASE DI CREAZIONE → NON RIUSCITO)

## Limitazioni all'utilizzo degli indici delle partizioni
<a name="partition-index-limitations"></a>

Dopo aver creato un indice delle partizioni, prendi nota delle seguenti modifiche alla funzionalità di tabella e partizione:

**Creazione di una nuova partizione (dopo l'aggiunta dell'indice)**  
Dopo aver creato un indice delle partizioni su una tabella, tutte le nuove partizioni aggiunte alla tabella verranno convalidate per i controlli del tipo di dati per le chiavi indicizzate. Il valore di partizione delle chiavi indicizzate verrà convalidato per il formato del tipo di dati. Se il controllo del tipo di dati non riesce, l'operazione di creazione della partizione avrà esito negativo. Per la tabella *sales\$1data*, se viene creato un indice per le chiavi (category [categoria], year [anno]) in cui la categoria è di tipo `string` e l'anno di tipo `int`, la creazione della nuova partizione con un valore YEAR come “foo” non riuscirà.

Dopo che gli indici sono abilitati, l'aggiunta di partizioni con valori chiave indicizzati aventi i caratteri U\$10000, U\$100001 e U\$10002 inizierà ad avere esito negativo.

**Aggiornamenti tabella**  
Una volta creato un indice delle partizioni in una tabella, non è possibile modificare i nomi delle chiavi di partizione esistenti né modificare il tipo o l'ordine delle chiavi registrate con l'indice.

## Utilizzo degli indici per una chiamata ottimizzata GetPartitions
<a name="partition-index-getpartitions"></a>

Quando chiami `GetPartitions` su una tabella con un indice, puoi includere un'espressione e, se possibile, il catalogo dati utilizzerà un indice. La prima chiave dell'indice deve essere trasmessa nell'espressione per utilizzare gli indici nel filtro. L'ottimizzazione dell'indice nel filtraggio viene applicata come miglior tentativo. Il catalogo dati tenta di utilizzare il più possibile l'ottimizzazione dell'indice, ma in caso di indice mancante o di operatore non supportato, ritorna all'implementazione esistente di caricamento di tutte le partizioni. 

Per la tabella *sales\$1data* di cui sopra, aggiungiamo l'indice [Country, Category, Year]. Se “Country” non viene trasmesso nell'espressione, l'indice registrato non sarà in grado di filtrare le partizioni utilizzando gli indici. È possibile aggiungere fino a 3 indici per supportare vari modelli di query.

Prendiamo alcune espressioni di esempio e vediamo come funzionano gli indici:


| Espressioni | Come verrà utilizzato l'indice | 
| --- | --- | 
|  Country = 'US'  |  L'indice verrà utilizzato per filtrare le partizioni.  | 
|  Country = 'US' and Category = 'Shoes'  |  L'indice verrà utilizzato per filtrare le partizioni.  | 
|  Category = 'Shoes'  |  Gli indici non utilizzati come “country” non verranno specificati nell'espressione. Tutte le partizioni verranno caricate per restituire una risposta.  | 
|  Country = 'US' and Category = 'Shoes' and Year > '2018'  |  L'indice verrà utilizzato per filtrare le partizioni.  | 
|  Country = 'US' and Category = 'Shoes' and Year > '2018' and month = 2  |  L'indice verrà utilizzato per recuperare tutte le partizioni con country = “US” e category = “shoes” e year > 2018. Quindi, verrà eseguito il filtraggio sull'espressione del mese.  | 
|  Country = 'US' AND Category = 'Shoes' OR Year > '2018'  |  Gli indici non verranno utilizzati poiché nell'espressone è presente l'operatore `OR`.  | 
|  Country = 'US' AND Category = 'Shoes' AND (Year = 2017 OR Year = '2018')  |  L'indice verrà utilizzato per recuperare tutte le partizioni con country = “US” e category = “shoes” e quindi verrà eseguito il filtraggio sull'espressione del mese.  | 
|  Country in ('US', 'UK') AND Category = 'Shoes'  |  Gli indici non verranno utilizzati per il filtraggio poiché l'operatore `IN` al momento non è supportato.  | 
|  Country = 'US' AND Category in ('Shoes', 'Books')  |  L'indice verrà utilizzato per recuperare tutte le partizioni con country = “US”, quindi verrà eseguito il filtro sull'espressione Category.  | 
|  Country = 'US' AND Category in ('Shoes', 'Books') AND (creationDate > '2023-9-01')  |  L'indice verrà utilizzato per recuperare tutte le partizioni con country = “US”, con creationDate > '2023-9-01', quindi verrà eseguito il filtro sull'espressione Category.  | 

## Integrazione con i motori
<a name="partition-index-integration-engines"></a>

Redshift Spectrum, Amazon EMR ed AWS Glue ETL Spark DataFrames sono in grado di utilizzare gli indici per recuperare le partizioni dopo che gli indici sono in uno stato ATTIVO in. AWS Glue [Athena](https://docs.aws.amazon.com/athena/latest/ug/glue-best-practices.html#glue-best-practices-partition-index) e i [frame dinamici AWS Glue ETL](https://docs.aws.amazon.com/glue/latest/dg/aws-glue-programming-etl-partitions.html#aws-glue-programming-etl-partitions-cat-predicates) richiedono di eseguire ulteriori passaggi per utilizzare gli indici per il miglioramento delle query.

### Abilitare la filtrazione delle partizioni
<a name="enable-partition-filtering-athena"></a>

Per abilitare la filtrazione delle partizioni in Athena, è necessario aggiornare le proprietà della tabella come segue:

1. ****Nella console, in Data Catalog, scegli Tabelle. AWS Glue ****

1. Scegliere una tabella .

1. In **Azioni**, scegliere **Modifica tabella**.

1. In **Proprietà della tabella**, aggiungere quanto segue:
   + Chiave – `partition_filtering.enabled`
   + Valore: `true`

1. Scegli **Applica**.

In alternativa, è possibile impostare questo parametro eseguendo una query [MODIFICA DELLE PROPRIETÀ DEL SET DI TABELLE](https://docs.aws.amazon.com/athena/latest/ug/alter-table-set-tblproperties.html) in Athena.

```
ALTER TABLE partition_index.table_with_index
SET TBLPROPERTIES ('partition_filtering.enabled' = 'true')
```

## Aggiornamento delle tabelle del catalogo dati create manualmente usando i crawler
<a name="update-manual-tables"></a>

Potresti voler creare le AWS Glue Data Catalog tabelle manualmente e poi mantenerle aggiornate con i AWS Glue crawler. I crawler in esecuzione su una pianificazione possono aggiungere nuove partizioni e aggiornare le tabelle con qualsiasi modifica dello schema. Questo vale anche per le tabelle migrate da un metastore Apache Hive.

Per fare ciò, quando definisci un crawler, invece di specificare uno o più datastoe come origine di un crawling, puoi specificare una o più tabelle del catalogo dati esistenti. Il crawler esegue quindi il crawling dei datastore specificati dalle tabelle del catalogo. In questo caso, non vengono create nuove tabelle mentre le tabelle create manualmente vengono aggiornate.

Di seguito sono riportati altri motivi per cui puoi creare manualmente le tabelle di catalogo e specificarle come origini del crawler:
+ Desideri scegliere il nome della tabella del catalogo e non fare affidamento sull'algoritmo di denominazione della tabella del catalogo.
+ Desideri impedire la creazione di nuove tabelle nel caso in cui i file con un formato che potrebbe interrompere il rilevamento della partizione vengano erroneamente salvati nel percorso dell'origine dati.

Per ulteriori informazioni, consulta [Fase 2: Scelta delle origini dei dati e dei classificatori](define-crawler-choose-data-sources.md).

## Proprietà della tabella del catalogo dati
<a name="table-properties"></a>

 Le proprietà della tabella, o parametri, come sono noti nella AWS CLI, sono stringhe di chiavi e valori non convalidate. È possibile impostare le proprie proprietà sulla tabella per supportare gli usi del catalogo dati all'esterno di AWS Glue. È possibile che lo facciano anche altri servizi che utilizzano il Data Catalog. AWS Glue imposta alcune proprietà della tabella durante l'esecuzione di job o crawler. Salvo diversa indicazione, queste proprietà sono per uso interno, non supportiamo il fatto che continuino a esistere nella loro forma attuale o che supportino il comportamento del prodotto se queste proprietà vengono modificate manualmente. 

 Per ulteriori informazioni sulle proprietà delle tabelle impostate dai AWS Glue crawler, consultate. [Parametri impostati sulle tabelle del catalogo dati dal crawler](table-properties-crawler.md) 