MSCK REPAIR TABLE - Amazon Athena

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 table-name DROP PARTITION. Per ulteriori informazioni, consulta ALTER TABLE 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 Partizionamento dei dati in Athena.

  • 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://DOC-EXAMPLE-BUCKET/folder/). In Athena, i percorsi che utilizzano altri protocolli (ad esempio, s3a://bucket/folder/) determineranno errori quando le query 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 in s3://DOC-EXAMPLE-BUCKET1 e dati per la tabella 2 ins3://DOC-EXAMPLE-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 come s3://DOC-EXAMPLE-BUCKET1 e. s3://DOC-EXAMPLE-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'azioneglue: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 Accesso tra account in Athena a 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 di userId) o utilizza ALTER 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 queryMSCK 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 utilizzi MSCK 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 errore Partizioni 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::Tablemodello per creare una tabella da utilizzare in Athena senza specificare la TableType proprietà e quindi si esegue una query DDL come SHOW CREATE TABLE oMSCK REPAIR TABLE, è possibile ricevere il messaggio di errore FAILED: NullPointerException Name is null.

    Per risolvere l'errore, specifica un valore per l'TableInputTableTypeattributo come parte della chiamata o del modello AWS GlueCreateTable API.AWS CloudFormation I valori possibili per TableType includono EXTERNAL_TABLE o VIRTUAL_VIEW.

    Questo requisito si applica solo quando si crea una tabella utilizzando l'operazione AWS Glue CreateTable API o il AWS::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://DOC-EXAMPLE-BUCKET/path/userId=1/ s3://DOC-EXAMPLE-BUCKET/path/userId=2/ s3://DOC-EXAMPLE-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://DOC-EXAMPLE-BUCKET/path/userid=1/ s3://DOC-EXAMPLE-BUCKET/path/userid=2/ s3://DOC-EXAMPLE-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://DOC-EXAMPLE-BUCKET/path/userId=1/' PARTITION (userId=2) LOCATION 's3://DOC-EXAMPLE-BUCKET/path/userId=2/' PARTITION (userId=3) LOCATION 's3://DOC-EXAMPLE-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.