MSCK REPAIR TABLE - Amazon Athena

Die vorliegende Übersetzung wurde maschinell erstellt. Im Falle eines Konflikts oder eines Widerspruchs zwischen dieser übersetzten Fassung und der englischen Fassung (einschließlich infolge von Verzögerungen bei der Übersetzung) ist die englische Fassung maßgeblich.

MSCK REPAIR TABLE

Verwenden Sie den MSCK REPAIR TABLE-Befehl, um die Metadaten im Katalog zu aktualisieren, nachdem Sie mit Hive kompatible Partitionen hinzugefügt haben.

Der MSCK REPAIR TABLE-Befehl durchsucht ein Dateisystem, z. B., Amazon S3, nach mit Hive kompatiblen Partitionen, die dem Dateisystem hinzugefügt wurden, nachdem die Tabelle erstellt wurde. MSCK REPAIR TABLE vergleicht die Partitionen in den Tabellenmetadaten und die Partitionen in S3. Wenn neue Partitionen am S3-Speicherort vorhanden sind, den Sie beim Erstellen der Tabelle angegeben haben, werden diese Partitionen den Metadaten und der Athena-Tabelle hinzugefügt.

Wenn Sie physische Partitionen hinzufügen, werden die Metadaten im Katalog mit dem Layout der Daten im Dateisystem inkonsistent und Informationen über die neuen Partitionen müssen dem Katalog hinzugefügt werden. Um die Metadaten zu aktualisieren, führen Sie MSCK REPAIR TABLE aus, damit Sie die Daten in den neuen Partitionen von Athena abfragen können.

Anmerkung

MSCK REPAIR TABLE fügt nur Partitionen zu Metadaten hinzu; sie werden nicht entfernt. Um Partitionen aus den Metadaten zu entfernen, nachdem die Partitionen in Amazon S3 manuell gelöscht wurden, führen Sie den Befehl ALTER TABLE table-name DROP PARTITION aus. Weitere Informationen finden Sie unter ALTER TABLE DROP PARTITION.

Überlegungen und Einschränkungen

Beachten Sie bei der Verwendung von MSCK REPAIR TABLE die folgenden Punkte:

  • Möglicherweise dauert es etwas, bis alle Partitionen hinzugefügt wurden. Wird das Zeitlimit für diese Operation überschritten, ist der Status "unvollständig", da nur einige Partitionen zum Katalog hinzugefügt wurden. Führen Sie MSCK REPAIR TABLE für dieselbe Tabelle so lange aus, bis alle Partitionen hinzugefügt wurden. Weitere Informationen finden Sie unter Ihre Daten partitionieren.

  • Verwenden Sie für nicht mit Hive kompatible Partitionen ALTER TABLE ADD PARTITION, um sie zu laden und ihre Daten abzufragen.

  • Partitionsspeicherorte zur Verwendung mit Athena müssen das s3-Protokoll verwenden (z. B. s3://amzn-s3-demo-bucket/folder/). In Athena führen Speicherorte, die andere Protokolle verwenden (z. B.s3a://bucket/folder/ ), zu Abfragefehlern, wenn MSCK REPAIR TABLE-Abfragen für die enthaltenen Tabellen ausgeführt werden.

  • Da es sich bei MSCK REPAIR TABLE durchsucht sowohl einen Ordner als auch seine Unterordner, um ein übereinstimmendes Partitionsschema zu finden. Achten Sie darauf, dass die Daten für separate Tabellen in separaten Ordnerhierarchien aufbewahrt werden. Nehmen wir beispielsweise an, Sie haben Daten für Tabelle 1 in s3://amzn-s3-demo-bucket1 und Daten für Tabelle 2 ins3://amzn-s3-demo-bucket1/table-2-data. Wenn beide Tabellen nach einer Zeichenfolge partitioniert sind, MSCK REPAIR TABLE werden die Partitionen für Tabelle 2 zu Tabelle 1 hinzugefügt. Um dies zu vermeiden, verwenden Sie s3://amzn-s3-demo-bucket2 stattdessen separate Ordnerstrukturen wie s3://amzn-s3-demo-bucket1 und. Beachten Sie, dass dieses Verhalten mit Amazon EMR und Apache Hive übereinstimmt.

  • Aufgrund eines bekannten Problems schlägt MSCK REPAIR TABLE ohne Fehlermeldung fehl, wenn Partitionswerte einen Doppelpunkt (:) enthalten (wenn der Partitionswert z. B. ein Zeitstempel ist). Als Problemumgehung verwenden Sie ALTER TABLE ADD PARTITION.

  • MSCK REPAIR TABLE fügt keine Partitionsspaltennamen hinzu, die mit einem Unterstrich (_) beginnen. Verwenden Sie ALTER TABLE ADD PARTITION, um dieses Limit zu umgehen.

Syntax

MSCK REPAIR TABLE table_name

Beispiele

MSCK REPAIR TABLE orders;

Fehlerbehebung

Wenn Athena nach der Ausführung MSCK REPAIR TABLE die Partitionen nicht zur Tabelle in der hinzufügt AWS Glue Data Catalog, überprüfen Sie Folgendes:

  • AWS Glue access — Stellen Sie sicher, dass die Rolle AWS Identity and Access Management (IAM) über eine Richtlinie verfügt, die die glue:BatchCreatePartition Aktion zulässt. Weitere Informationen finden Sie unter Kleber zulassen: BatchCreatePartition in der Richtlinie IAM an späterer Stelle in diesem Dokument.

  • Amazon-S3-Zugriff – Stellen Sie sicher, dass die Rolle über eine Richtlinie mit ausreichenden Berechtigungen für den Zugriff auf Amazon S3 verfügt, einschließlich der s3:DescribeJob-Aktion. Ein Beispiel dafür, welche Amazon-S3-Aktionen zulässig sind, finden Sie in der Beispiel-Bucket-Richtlinie in Kontoübergreifender Zugriff auf Amazon-S3-Buckets in Athena.

  • Amazon-S3-Objektschlüssel-Case-Schreibweise – Achten Sie darauf, dass der Amazon-S3-Pfad in Kleinbuchstaben und nicht mit der Camel-Case-Schreibweise geschrieben ist (z. B. userid statt userId), oder verwenden Sie ALTER TABLE ADD PARTITION, um die Objektschlüsselnamen anzugeben. Weitere Informationen finden Sie unter Den Amazon-S3-Pfad ändern oder neu definieren an späterer Stelle in diesem Dokument.

  • Zeitüberschreitungen bei AbfragenMSCK REPAIR TABLE wird am besten verwendet, wenn eine Tabelle zum ersten Mal erstellt wird oder wenn Unsicherheit bezüglich der Parität zwischen Daten und Partitionsmetadaten besteht. Wenn Sie MSCK REPAIR TABLE verwenden, um häufig neue Partitionen hinzuzufügen (z. B. täglich) und Abfragezeitüberschreitungen auftreten, sollten Sie ALTER TABLE ADD PARTITION verwenden.

  • Partitionen, die im Dateisystem fehlen – Wenn Sie eine Partition manuell in Amazon S3 löschen und dann MSCK REPAIR TABLE ausführen, erhalten Sie möglicherweise die Fehlermeldung Partitionen fehlen im Dateisystem. Dies tritt auf, weil MSCK REPAIR TABLE keine veralteten Partitionen aus den Tabellenmetadaten entfernt. Um die gelöschten Partitionen aus den Tabellenmetadaten zu entfernen, führen Sie stattdessen ALTER TABLE DROP PARTITION aus. Beachten Sie, dass SHOWPARTITIONSebenfalls nur die Partitionen in den Metadaten aufgeführt werden, nicht die Partitionen im Dateisystem.

  • Fehler „NullPointerException Name ist Null“

    Wenn Sie die AWS Glue CreateTableAPIOperation oder die AWS CloudFormation AWS::Glue::TableVorlage verwenden, um eine Tabelle für die Verwendung in Athena zu erstellen, ohne die TableType Eigenschaft anzugeben, und dann eine DDL Abfrage wie SHOW CREATE TABLE oder ausführenMSCK REPAIR TABLE, können Sie die Fehlermeldung erhalten FAILED: NullPointerException Name ist null.

    Um den Fehler zu beheben, geben Sie im Rahmen des AWS Glue CreateTable API Aufrufs oder der AWS CloudFormation Vorlage einen Wert für das TableInputTableTypeAttribut an. Mögliche Werte für TableType sind EXTERNAL_TABLE oder VIRTUAL_VIEW.

    Diese Anforderung gilt nur, wenn Sie eine Tabelle mithilfe der AWS Glue CreateTable API Operation oder der AWS::Glue::Table Vorlage erstellen. Wenn Sie mithilfe einer DDL Anweisung oder eines AWS Glue Crawlers eine Tabelle für Athena erstellen, wird die TableType Eigenschaft automatisch für Sie definiert.

In den folgenden Abschnitten finden Sie zusätzliche Informationen.

Kleber zulassen: BatchCreatePartition in der Richtlinie IAM

Prüfen Sie die IAM Richtlinien, die der Rolle zugeordnet sind, die Sie zum Ausführen verwendenMSCK REPAIR TABLE. Wenn Sie das AWS Glue Data Catalog mit Athena verwenden, muss die IAM Richtlinie die glue:BatchCreatePartition Aktion zulassen. Ein Beispiel für eine IAM Richtlinie, die diese glue:BatchCreatePartition Aktion zulässt, finden Sie unterAWS verwaltete Richtlinie: AmazonAthenaFullAccess.

Den Amazon-S3-Pfad ändern oder neu definieren

Wenn ein oder mehrere Objektschlüssel im Amazon-S3-Pfad in Großbuchstaben statt in Kleinbuchstaben geschrieben sind, werden die MSCK REPAIR TABLE möglicherweise nicht zur AWS Glue Data Catalog hinzugefügt. Wenn Ihr Amazon-S3-Pfad beispielsweise den Objektschlüsselnamen userId enthält, werden die folgenden Partitionen möglicherweise nicht zur AWS Glue Data Catalog hinzugefügt:

s3://amzn-s3-demo-bucket/path/userId=1/ s3://amzn-s3-demo-bucket/path/userId=2/ s3://amzn-s3-demo-bucket/path/userId=3/

Sie lösen dieses Problem, indem Sie einen der folgenden Schritte ausführen:

  • Verwenden Sie Kleinbuchstaben statt Großbuchstaben, wenn Sie Ihre Amazon-S3-Objektschlüssel erstellen:

    s3://amzn-s3-demo-bucket/path/userid=1/ s3://amzn-s3-demo-bucket/path/userid=2/ s3://amzn-s3-demo-bucket/path/userid=3/
  • Verwenden Sie ALTER TABLE ADD PARTITION, um den Standort neu zu definieren, wie im folgenden Beispiel:

    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/'

Beachten Sie, dass Amazon-S3-Objektschlüsselnamen zwar Großbuchstaben verwenden können, die Amazon-S3-Bucket-Namen selbst jedoch immer in Kleinbuchstaben geschrieben werden müssen. Weitere Informationen finden Sie unter Richtlinien zur Benennung von Objektschlüsseln und Regeln zur Benennung von Buckets im Amazon-S3-Benutzerhandbuch.