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 il comando MSCK REPAIR TABLE
per aggiornare i metadati nel catalogo dopo aver aggiunto le partizioni compatibili con Hive.
Il comando MSCK REPAIR TABLE
esegue la scansione di un file system, ad esempio Amazon S3 per la ricerca di partizioni compatibili con Hive aggiunte al file system dopo la creazione della tabella. MSCK REPAIR TABLE
confronta le partizioni nei metadati della tabella e le partizioni in S3. Se sono presenti nuove partizioni nella posizione S3 specificata al momento della creazione della tabella, queste vengono aggiunte ai metadati e alla tabella Athena.
Quando si aggiungono partizioni fisiche, i metadati nel catalogo diventano incoerenti con il layout dei dati nel file system e devono essere aggiunte al catalogo informazioni sulle nuove partizioni. Per aggiornare i metadati, esegui MSCK REPAIR TABLE
in modo da poter interrogare i dati nelle nuove partizioni da Athena.
Nota
MSCK REPAIR TABLE
aggiunge solo partizioni ai metadati; non le rimuove. Per rimuovere le partizioni dai metadati dopo che le partizioni sono state eliminate manualmente in Amazon S3, eseguire il comando ALTER TABLE
. Per ulteriori informazioni, consulta ALTER TABLE DROP
PARTITION. table-name
DROP
PARTITION
Considerazioni e limitazioni
Quando si utilizza MSCK REPAIR TABLE
, tenere presenti le informazioni seguenti:
-
È possibile che l'aggiunta di tutte le partizioni richieda vari minuti. Se l'operazione scade, acquisirà lo stato "incompleta" laddove al catalogo siano state aggiunte solo alcune partizioni. In tal caso sarà necessario eseguire
MSCK REPAIR TABLE
sulla stessa tabella finché non vengono aggiunte tutte le partizioni. Per ulteriori informazioni, consulta Come partizionare i dati. -
Per le partizioni che non sono compatibili con Hive, utilizzare ALTER TABLE ADD PARTITION per caricare le partizioni in modo da poter eseguire una query sui dati.
-
Le posizioni delle partizioni da utilizzare con Athena devono utilizzare il protocollo
s3
(ad esempio,s3://amzn-s3-demo-bucket/
). In Athena, i percorsi che utilizzano altri protocolli (ad esempio,folder
/s3a://
) determineranno errori quando le querybucket
/folder
/MSCK REPAIR TABLE
vengono eseguite sulle tabelle contenenti. -
Poiché
MSCK REPAIR TABLE
analizza sia una cartella che le relative sottocartelle per trovare uno schema di partizioni corrispondente, assicurarsi di conservare i dati per tabelle separate in gerarchie di cartelle separate. Ad esempio, supponiamo di avere dati per la tabella 1 ins3://amzn-s3-demo-bucket1
e dati per la tabella 2 ins3://amzn-s3-demo-bucket1/table-2-data
. Se entrambe le tabelle sono partizionate per stringa,MSCK REPAIR TABLE
aggiungerà le partizioni per la tabella 2 alla tabella 1. Per evitare ciò, usa invece strutture di cartelle separate comes3://amzn-s3-demo-bucket1
e.s3://amzn-s3-demo-bucket2
Questo comportamento è coerente con Amazon EMR e Apache Hive. -
A causa di un problema noto,
MSCK REPAIR TABLE
avrà esito negativo e non verrà inviato alcun messaggio di errore quando i valori delle partizioni contengono i due punti (:
) (ad esempio, quando il valore della partizione è un timestamp). Come soluzione alternativa, utilizza ALTER TABLE ADD PARTITION. -
MSCK REPAIR TABLE
non aggiunge nomi di colonne di partizione che iniziano con un carattere di sottolineatura (_). Per ovviare al problema della limitazione, utilizza ALTER TABLE ADD PARTITION.
Riepilogo
MSCK REPAIR TABLE table_name
Esempi
MSCK REPAIR TABLE orders;
Risoluzione dei problemi
Dopo l'esecuzioneMSCK REPAIR TABLE
, se Athena non aggiunge le partizioni alla tabella in AWS Glue Data Catalog, verifica quanto segue:
-
AWS Glue accesso: assicurati che il ruolo AWS Identity and Access Management (IAM) disponga di una politica che consenta l'azione
glue:BatchCreatePartition
. Per ulteriori informazioni, consultare Allow glue: BatchCreatePartition nella policy IAM riportata di seguito in questo documento. -
Accesso ad Amazon S3: assicurati che il ruolo disponga di una policy con autorizzazioni sufficienti per accedere ad Amazon S3, inclusa l'operazione
s3:DescribeJob
. Per un esempio di quali operazioni Amazon S3 consentire, consulta la policy del bucket di esempio in Configura l'accesso tra account in Athena ai bucket Amazon S3. -
Maiuscole e minuscole delle chiavi oggetto Amazon S3: assicurati che il percorso Amazon S3 sia in minuscolo invece che in camel case (ad esempio
userid
invece diuserId
) o utilizzaALTER TABLE ADD PARTITION
per specificare i nomi delle chiavi oggetto. Per ulteriori informazioni, consultare Modificare o ridefinire il percorso Amazon S3 riportata di seguito in questo documento. -
Timeout per query –
MSCK REPAIR TABLE
viene utilizzato al meglio quando si crea una tabella per la prima volta o quando vi è incertezza sulla parità tra i metadati dei dati e delle partizioni. Se utilizziMSCK REPAIR TABLE
per aggiungere frequentemente nuove partizioni (ad esempio, su base giornaliera) e si verificano timeout di query, prendere in considerazione l'utilizzo di ALTER TABLE ADD PARTITION. -
Partizioni mancanti dal file system: se elimini manualmente una partizione in Amazon S3 e poi esegui
MSCK REPAIR TABLE
, è possibile che venga visualizzato il messaggio di errorePartizioni mancanti dal file system
. Ciò si verifica perchéMSCK REPAIR TABLE
non rimuove le partizioni obsolete dai metadati della tabella. Per rimuovere le partizioni eliminate dai metadati della tabella, eseguire invece ALTER TABLE DROP PARTITION. Nota cheSHOW PARTITIONS elenca in modo simile solo le partizioni nei metadati, non le partizioni nel file system. -
Errore «NullPointerException name is null»
Se si utilizza l'operazione AWS Glue CreateTableAPI o il AWS CloudFormation
AWS::Glue::Table
modello per creare una tabella da utilizzare in Athena senza specificare laTableType
proprietà e quindi si esegue una query DDL comeSHOW CREATE TABLE
oMSCK REPAIR TABLE
, è possibile ricevere il messaggio di erroreFAILED: NullPointerException
Name is null.Per risolvere l'errore, specifica un valore per l'TableInput
TableType
attributo come parte della chiamata o del modello AWS GlueCreateTable
API.AWS CloudFormation I valori possibili perTableType
includonoEXTERNAL_TABLE
oVIRTUAL_VIEW
.Questo requisito si applica solo quando si crea una tabella utilizzando l'operazione AWS Glue
CreateTable
API o ilAWS::Glue::Table
modello. Se si crea una tabella per Athena utilizzando un'istruzione DDL o un crawler AWS Glue , la proprietàTableType
viene definita automaticamente.
Nelle sezioni seguenti vengono fornite informazioni aggiuntive.
Allow glue: BatchCreatePartition nella policy IAM
Esamina le policy IAM collegate al ruolo che stai utilizzando per eseguire MSCK
REPAIR TABLE
. Quando si utilizza AWS Glue Data Catalog con Athena, la policy IAM deve consentire l'azioneglue:BatchCreatePartition
. Per un esempio di policy IAM che consente l'operazione glue:BatchCreatePartition
, vedere AWS politica gestita: AmazonAthenaFullAccess.
Modificare o ridefinire il percorso Amazon S3
Se una o più chiavi oggetto nel percorso Amazon S3 sono in maiuscolo anziché in minuscolo, MSCK REPAIR TABLE
potrebbe non essere in grado di aggiungere le partizioni a AWS Glue Data Catalog. Ad esempio, se il percorso Amazon S3 include il nome della chiave oggetto userId
, le seguenti partizioni potrebbero non essere aggiunte a AWS Glue Data Catalog:
s3://amzn-s3-demo-bucket/path/userId=1/
s3://amzn-s3-demo-bucket/path/userId=2/
s3://amzn-s3-demo-bucket/path/userId=3/
Per risolvere il problema, procedi in uno dei seguenti modi:
-
Usa le lettere minuscole anziché le maiuscole camel quando crei le tue chiavi oggetto Amazon S3:
s3://amzn-s3-demo-bucket/path/userid=1/ s3://amzn-s3-demo-bucket/path/userid=2/ s3://amzn-s3-demo-bucket/path/userid=3/
-
Utilizza ALTER TABLE ADD PARTITION per ridefinire il percorso, come nell'esempio seguente:
ALTER TABLE table_name ADD [IF NOT EXISTS] PARTITION (userId=1) LOCATION 's3://amzn-s3-demo-bucket/path/userId=1/' PARTITION (userId=2) LOCATION 's3://amzn-s3-demo-bucket/path/userId=2/' PARTITION (userId=3) LOCATION 's3://amzn-s3-demo-bucket/path/userId=3/'
Tieni presente che, sebbene i nomi delle chiavi degli oggetti di Amazon S3 possano utilizzare lettere maiuscole, i nomi dei bucket di Amazon S3 devono essere sempre in minuscolo. Per ulteriori informazioni, consulta le Linee guida per la denominazione delle chiavi oggetto e le Regole di denominazione dei bucket nella Guida per l'utente di Amazon S3.