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 aus. Weitere Informationen finden Sie unter ALTER TABLE DROP
PARTITION. table-name 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 TABLEfü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/). In Athena führen Speicherorte, die andere Protokolle verwenden (z. B.folder/s3a://), zu Abfragefehlern, wennbucket/folder/MSCK REPAIR TABLE-Abfragen für die enthaltenen Tabellen ausgeführt werden. -
Da es sich bei
MSCK REPAIR TABLEdurchsucht 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 ins3://amzn-s3-demo-bucket1und Daten für Tabelle 2 ins3://amzn-s3-demo-bucket1/table-2-data. Wenn beide Tabellen nach einer Zeichenfolge partitioniert sind,MSCK REPAIR TABLEwerden die Partitionen für Tabelle 2 zu Tabelle 1 hinzugefügt. Um dies zu vermeiden, verwenden Sies3://amzn-s3-demo-bucket2stattdessen separate Ordnerstrukturen wies3://amzn-s3-demo-bucket1und. Beachten Sie, dass dieses Verhalten mit Amazon EMR und Apache Hive übereinstimmt. -
Aufgrund eines bekannten Problems schlägt
MSCK REPAIR TABLEohne 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 TABLEfü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:BatchCreatePartitionAktion 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 Kontenübergreifenden Zugriff in Athena auf Amazon S3 S3-Buckets konfigurieren. -
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.
useridstattuserId), oder verwenden SieALTER 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 Abfragen –
MSCK REPAIR TABLEwird 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 SieMSCK REPAIR TABLEverwenden, 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 TABLEausführen, erhalten Sie möglicherweise die FehlermeldungPartitionen fehlen im Dateisystem. Dies tritt auf, weilMSCK REPAIR TABLEkeine 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 dieTableTypeEigenschaft anzugeben, und dann eine DDL Abfrage wieSHOW CREATE TABLEoder ausführenMSCK REPAIR TABLE, können Sie die Fehlermeldung erhaltenFAILED: NullPointerException Name ist null.Um den Fehler zu beheben, geben Sie im Rahmen des AWS Glue
CreateTableAPI Aufrufs oder der AWS CloudFormation Vorlage einen Wert für das TableInputTableTypeAttribut an. Mögliche Werte fürTableTypesindEXTERNAL_TABLEoderVIRTUAL_VIEW.Diese Anforderung gilt nur, wenn Sie eine Tabelle mithilfe der AWS Glue
CreateTableAPI Operation oder derAWS::Glue::TableVorlage erstellen. Wenn Sie mithilfe einer DDL Anweisung oder eines AWS Glue Crawlers eine Tabelle für Athena erstellen, wird dieTableTypeEigenschaft 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.