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à.
MSCK REPAIR TABLE
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 in.s3://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
Tieni presente che 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) abbia 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. Notate che SHOWPARTITIONSanalogamente elenca solo le partizioni nei metadati, non le partizioni nel file system. -
Errore "NullPointerException name is null»
Se si utilizza l' AWS Glue CreateTableAPIoperazione 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 DDL query 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 AWS GlueCreateTable
API chiamata o del modello.AWS CloudFormation I valori possibili perTableType
includonoEXTERNAL_TABLE
oVIRTUAL_VIEW
.Questo requisito si applica solo quando si crea una tabella utilizzando l' AWS Glue
CreateTable
APIoperazione o ilAWS::Glue::Table
modello. Se si crea una tabella per Athena utilizzando un'DDListruzione o un AWS Glue crawler, laTableType
proprietà viene definita automaticamente.
Nelle sezioni seguenti vengono fornite informazioni aggiuntive.
Allow glue: BatchCreatePartition nella policy IAM
Esamina le IAM politiche associate al ruolo che stai utilizzando per ricoprireMSCK
REPAIR TABLE
. Quando si utilizza il AWS Glue Data Catalog con Athena, la IAM politica deve consentire l'azioneglue:BatchCreatePartition
. Per un esempio di IAM politica che consente l'glue:BatchCreatePartition
azione, vediAWS 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.