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 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/
). 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 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 ins3://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 Sies3://amzn-s3-demo-bucket2
stattdessen separate Ordnerstrukturen wies3://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
stattuserId
), 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 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 SieMSCK 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 FehlermeldungPartitionen fehlen im Dateisystem
. Dies tritt auf, weilMSCK 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::Table
Vorlage verwenden, um eine Tabelle für die Verwendung in Athena zu erstellen, ohne dieTableType
Eigenschaft anzugeben, und dann eine DDL Abfrage wieSHOW CREATE TABLE
oder 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
CreateTable
API Aufrufs oder der AWS CloudFormation Vorlage einen Wert für das TableInputTableType
Attribut an. Mögliche Werte fürTableType
sindEXTERNAL_TABLE
oderVIRTUAL_VIEW
.Diese Anforderung gilt nur, wenn Sie eine Tabelle mithilfe der AWS Glue
CreateTable
API Operation oder derAWS::Glue::Table
Vorlage erstellen. Wenn Sie mithilfe einer DDL Anweisung oder eines AWS Glue Crawlers eine Tabelle für Athena erstellen, wird dieTableType
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.