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.
Verwenden von Athena zum Abfragen von Apache-Hudi-Datensätzen
Apache HudiUpsert
bezieht sich auf die Möglichkeit, Datensätze in einen vorhandenen Datensatz einzufügen, wenn sie noch nicht vorhanden sind, oder sie zu aktualisieren, wenn dies der Fall ist.
Hudi verarbeitet Dateneinfügungs- und Aktualisierungsereignisse, ohne viele kleine Dateien zu erstellen, die Leistungsprobleme bei der Analyse verursachen können. Apache Hudi verfolgt automatisch Änderungen und führt Dateien zusammen, damit sie die optimale Größe behalten. Dadurch entfällt die Notwendigkeit, benutzerdefinierte Lösungen zu erstellen, die viele kleine Dateien überwachen und in weniger große Dateien umschreiben.
Hudi-Datensätze eignen sich für die folgenden Anwendungsfälle:
-
Einhaltung von Datenschutzbestimmungen wie der Datenschutz-Grundverordnung
(GDPR) und dem California Consumer Privacy Act (CCPA), die das Recht der Menschen auf Entfernung personenbezogener Daten oder Änderung der Verwendung ihrer Daten durchsetzen. -
Arbeiten mit Streaming-Daten von Sensoren und anderen IoT-Geräten (Internet of Things), die bestimmte Dateneinfüge- und Aktualisierungsereignisse erfordern.
-
Implementieren eines Change-Data-Capture (CDC)-Systems
.
Von Hudi verwaltete Datensätze werden mithilfe von offenen Speicherformaten in Amazon S3 gespeichert. Derzeit kann Athena komprimierte Hudi-Datensätze lesen, aber keine Hudi-Daten schreiben. Athena unterstützt bis zu Hudi-Version 0.8.0 mit Athena-Engine-Version 2 und Hudi-Version 0.14.0 mit Athena-Engine-Version 3. Änderungen sind vorbehalten. Athena kann die Lesekompatibilität mit Tabellen, die mit späteren Versionen von Hudi erstellt wurden, nicht garantieren. Weitere Informationen zum Athena-Engine-Versioning finden Sie unter Athena-Engine-Versionierung. Weitere Informationen zu Hudi-Features und Versionsverwaltung finden Sie in der Hudi-Dokumentation
Hudi-Datensatz-Tabellen-Typen
Ein Hudi-Datensatz kann einen der folgenden Typen haben:
-
Copy on Write (CoW, Beim Schreiben kopieren) – Daten werden in einem spaltenbasierten Format (Parquet) gespeichert, und jedes Update erstellt während eines Schreibvorgangs eine neue Version von Dateien.
-
Merge on Read (MoR, Beim Lesen zusammenführen) – Daten werden mit einer Kombination aus spalten- (Parquet) und zeilenbasierten (Avro) Formaten gespeichert. Updates werden in zeilenbasierten
delta
-Dateien protokolliert und nach Bedarf komprimiert, um neue Versionen der Spaltendateien zu erstellen.
Bei CoW-Datasets wird jedes Mal, wenn ein Datensatz aktualisiert wird, die Datei, die den Datensatz enthält, mit den aktualisierten Werten neu geschrieben. Bei einem MoR-Datensatz schreibt Hudi jedes Mal, wenn es eine Aktualisierung gibt, nur die Zeile für den geänderten Datensatz. MoR eignet sich besser für schreib- oder änderungsintensive Workloads mit weniger Lesevorgängen. CoW eignet sich besser für leseintensive Workloads für Daten, die sich seltener ändern.
Hudi bietet drei Abfragetypen für den Zugriff auf die Daten:
-
Snapshots – Abfragen, die den neuesten Snapshot der Tabelle ab einer bestimmten Commit- oder Komprimierungsaktion anzeigen. Bei MoR-Tabellen stellen Snapshot-Abfragen den neuesten Status der Tabelle dar, indem die Basis- und Deltadateien des letzten Datei-Slices zum Zeitpunkt der Abfrage zusammengeführt werden.
-
Inkrementelle Abfragen – Abfragen sehen nur neue Daten, die seit einem bestimmten Commit/Komprimierung in die Tabelle geschrieben wurden. Dies bietet effektiv Änderungsströme, um inkrementelle Data-Pipelines zu ermöglichen.
-
Lesen von optimierten Abfragen – Bei MoR-Tabellen sehen Abfragen die neuesten komprimierten Daten. Bei CoW-Tabellen sehen Abfragen die neuesten festgeschriebenen Daten.
Die folgende Tabelle zeigt die möglichen Hudi-Abfragetypen für jeden Tabellentyp.
Tabellentyp | Mögliche Hudi-Abfragetypen |
---|---|
Kopieren Sie beim Schreiben | Snapshot, inkrementell |
Beim Lesen zusammenführen | Snapshot, inkrementell, leseoptimiert |
Derzeit unterstützt Athena-Snapshot-Abfragen und lese-optimierte Abfragen, aber keine inkrementellen Abfragen. In MoR-Tabellen werden alle Daten, die leseoptimierten Abfragen ausgesetzt sind, komprimiert. Dies bietet eine gute Leistung, enthält jedoch nicht die neuesten Delta-Commits. Snapshot-Abfragen enthalten die aktuellsten Daten, verursachen jedoch einen gewissen Rechenaufwand, wodurch diese Abfragen weniger leistungsfähig sind.
Weitere Informationen zu den Kompromissen zwischen Tabellen- und Abfragetypen finden Sie unter Tabellen- und Abfragetypen
Hudi Terminologieänderung: Ansichten sind jetzt Abfragen
Ab Version 0.5.1 hat Apache Hudi einige seiner Terminologie geändert. Was früher Ansichten waren, werden in späteren Versionen Abfragen genannt. In der folgenden Tabelle werden die Änderungen zwischen dem alten und dem neuen Term zusammengefasst.
Alter Begriff | Neuer Begriff |
---|---|
CoW: Lese-optimierte Ansicht MoR: Echtzeitansicht |
Snapshotabfragen |
Inkrementelle Ansicht | Inkrementelle Abfrage |
MoR-Lese-optimierte Ansicht | Leseoptimierte Abfrage |
Tabellen aus Bootstrap-Operation
Ab Apache Hudi Version 0.6.0 bietet das Bootstrap-Feature eine bessere Leistung mit vorhandenen Parquet-Datensätzen. Anstatt den Datensatz neu zu schreiben, kann ein Bootstrap-Vorgang nur Metadaten generieren und den Datensatz an Ort und Stelle belassen.
Sie können Athena verwenden, um Tabellen aus einem Bootstrap-Vorgang abzufragen, genau wie andere Tabellen, die auf Daten in Amazon S3 basieren. Geben Sie in Ihrer CREATE TABLE
-Anweisung den Hudi-Tabellenpfad in Ihrer LOCATION
-Klausel an.
Weitere Informationen zum Erstellen von Hudi-Tabellen mithilfe der Bootstrap-Operation in Amazon EMR finden Sie im Artikel Neue Funktionen von Apache Hudi, die in Amazon EMR verfügbar sind, im Big Data-Blog
Liste der Hudi-Metadaten
Apache Hudi verfügt über eine Metadatentabelle
Von diesen Features unterstützt Athena derzeit nur den Dateiauflistungsindex. Der Dateiauflistungsindex eliminiert Dateisystemaufrufe wie „Dateien auflisten“, indem er die Informationen aus einem Index abruft, der die Zuordnung von Partitionen zu Dateien verwaltet. Dadurch entfällt die Notwendigkeit, jede einzelne Partition unter dem Tabellenpfad rekursiv aufzulisten, um einen Überblick über das Dateisystem zu erhalten. Wenn Sie mit großen Datensätzen arbeiten, reduziert diese Indizierung die Latenz, die sonst beim Abrufen der Dateiliste bei Schreib- und Abfragen auftreten würde, drastisch. Außerdem werden Engpässe wie die Drosselung von Anforderungslimits Amazon-S3-LIST
-Aufrufen vermieden.
Anmerkung
Athena unterstützt derzeit weder das Überspringen von Daten noch die Bloom-Filter-Indizierung.
Die Hudi-Metadatentabelle aktivieren
Die auf Metadatentabellen basierende Dateiauflistung ist standardmäßig deaktiviert. Um die Hudi-Metadatentabelle und die zugehörige Dateiauflistungsfunktion zu aktivieren, setzen Sie die hudi.metadata-listing-enabled
-Tabelleneigenschaft auf TRUE
.
Beispiel
Im folgenden ALTER TABLE SET TBLPROPERTIES
-Beispiel wird die Metadatentabelle in der partition_cow
-Beispieltabelle aktiviert.
ALTER TABLE partition_cow SET TBLPROPERTIES('hudi.metadata-listing-enabled'='TRUE')
Überlegungen und Einschränkungen
-
Athena unterstützt keine inkrementellen Abfragen.
-
Athena unterstützt CTAS oder INSERT INTO auf Hudi-Daten nicht. Wenn Sie Athena-Unterstützung beim Schreiben von Hudi-Datensätzen wünschen, senden Sie Feedback an
<athena-feedback@amazon.com>
.Weitere Informationen zum Schreiben von Hudi-Daten finden Sie in den folgenden Ressourcen:
-
Arbeiten mit einem Hudi-Datensatz im Amazon-EMR-Versionshandbuch.
-
Schreiben von Daten
in der Apache-Hudi-Dokumentation.
-
-
Die Verwendung von MSCK REPAIR TABLE auf Hudi-Tabellen in Athena wird nicht unterstützt. Wenn Sie eine Hudi-Tabelle laden müssen, die nicht in erstellt wurde, verwenden Sie. AWS GlueALTER TABLE ADD PARTITION
-
Überspringen von S3-Glacier-Objekten wird nicht unterstützt – Wenn sich Objekte in der Apache–Hudi-Tabelle in einer Amazon-S3-Glacier-Speicherklasse befinden, hat das Setzen der Tabelleneigenschaft
read_restored_glacier_objects
auffalse
keine Auswirkung.Angenommen, Sie führen den folgenden Befehl aus:
ALTER TABLE
table_name
SET TBLPROPERTIES ('read_restored_glacier_objects' = 'false')Bei Iceberg- und Delta-Lake-Tabellen erzeugt der Befehl den Fehler
Unsupported table property key: read_restored_glacier_objects
. Bei Hudi-Tabellen erzeugt derALTER TABLE
-Befehl keinen Fehler, aber Amazon-S3-Glacier-Objekte werden immer noch nicht übersprungen. Beim Ausführen vonSELECT
-Abfragen nach demALTER TABLE
-Befehl werden weiterhin alle Objekte zurückgegeben.
Weitere Ressourcen
Weitere Ressourcen zur Verwendung von Apache Hudi mit Athena finden Sie in den folgenden Ressourcen.
Video
Das folgende Video zeigt, wie Sie mit Amazon Athena ein leseoptimierter Apache-Hudi-Datensatz in Ihrem Amazon-S3-basierten Data Lake abfragen können.
Blog-Posts
In den folgenden AWS Big-Data-Blogbeiträgen wird beschrieben, wie Sie Apache Hudi mit Athena verwenden können.
Erstellen von Hudi-Tabellen
Dieser Abschnitt enthält Beispiele für CREATE-TABLE-Anweisungen in Athena für partitionierte und nicht partitionierte Tabellen von Hudi-Daten.
Wenn Sie bereits Hudi-Tabellen erstellt haben AWS Glue, können Sie diese direkt in Athena abfragen. Wenn Sie in Athena partitionierte Hudi-Tabellen erstellen, müssen Sie ALTER TABLE
ADD PARTITION
ausführen, um die Hudi-Daten zu laden, bevor Sie sie abfragen können.
Copy on Write (CoW), Tabellenbeispiele erstellen
Nicht partitionierte CoW-Tabelle
Im folgenden Beispiel wird eine unpartitionierte CoW-Tabelle in Athena erstellt.
CREATE EXTERNAL TABLE `non_partition_cow`( `_hoodie_commit_time` string, `_hoodie_commit_seqno` string, `_hoodie_record_key` string, `_hoodie_partition_path` string, `_hoodie_file_name` string, `event_id` string, `event_time` string, `event_name` string, `event_guests` int, `event_type` string) ROW FORMAT SERDE 'org.apache.hadoop.hive.ql.io.parquet.serde.ParquetHiveSerDe' STORED AS INPUTFORMAT 'org.apache.hudi.hadoop.HoodieParquetInputFormat' OUTPUTFORMAT 'org.apache.hadoop.hive.ql.io.parquet.MapredParquetOutputFormat' LOCATION 's3://DOC-EXAMPLE-BUCKET/
folder
/non_partition_cow/'
Partitionierte CoW-Tabelle
Im folgenden Beispiel wird eine partitionierte CoW-Tabelle in Athena erstellt.
CREATE EXTERNAL TABLE `partition_cow`( `_hoodie_commit_time` string, `_hoodie_commit_seqno` string, `_hoodie_record_key` string, `_hoodie_partition_path` string, `_hoodie_file_name` string, `event_id` string, `event_time` string, `event_name` string, `event_guests` int) PARTITIONED BY ( `event_type` string) ROW FORMAT SERDE 'org.apache.hadoop.hive.ql.io.parquet.serde.ParquetHiveSerDe' STORED AS INPUTFORMAT 'org.apache.hudi.hadoop.HoodieParquetInputFormat' OUTPUTFORMAT 'org.apache.hadoop.hive.ql.io.parquet.MapredParquetOutputFormat' LOCATION 's3://DOC-EXAMPLE-BUCKET/
folder
/partition_cow/'
Im folgenden ALTER TABLE ADD PARTITION
-Beispiel werden der partition_cow
-Beispieltabelle zwei Partitionen hinzugefügt.
ALTER TABLE partition_cow ADD PARTITION (event_type = 'one') LOCATION 's3://DOC-EXAMPLE-BUCKET/
folder
/partition_cow/one/' PARTITION (event_type = 'two') LOCATION 's3://DOC-EXAMPLE-BUCKET/folder
/partition_cow/two/'
„Beim Lesen zusammenführen (MoR)“ Tabellenbeispiele erstellen
Hudi erstellt zwei Tabellen im Metastore für MoR: eine Tabelle für Snapshot-Abfragen und eine Tabelle für leseoptimierte Abfragen. Beide Tabellen können abgefragt werden. In Hudi-Versionen vor 0.5.1 hatte die Tabelle für leseoptimierte Abfragen den Namen, den Sie beim Erstellen der Tabelle angegeben haben. Ab Hudi-Version 0.5.1 wird dem Tabellennamen standardmäßig ein _ro
angehängt. Der Name der Tabelle für Snapshot-Abfragen ist der Name, den Sie mit angehängtem _rt
angegeben haben.
Nicht partitionierte Merge-on-Read (MoR)-Tabelle
Im folgenden Beispiel wird eine nicht partitionierte MoR-Tabelle in Athena für leseoptimierte Abfragen erstellt. Beachten Sie, dass leseoptimierte Abfragen das Eingabeformat HoodieParquetInputFormat
verwenden.
CREATE EXTERNAL TABLE `nonpartition_mor`( `_hoodie_commit_time` string, `_hoodie_commit_seqno` string, `_hoodie_record_key` string, `_hoodie_partition_path` string, `_hoodie_file_name` string, `event_id` string, `event_time` string, `event_name` string, `event_guests` int, `event_type` string) ROW FORMAT SERDE 'org.apache.hadoop.hive.ql.io.parquet.serde.ParquetHiveSerDe' STORED AS INPUTFORMAT 'org.apache.hudi.hadoop.HoodieParquetInputFormat' OUTPUTFORMAT 'org.apache.hadoop.hive.ql.io.parquet.MapredParquetOutputFormat' LOCATION 's3://DOC-EXAMPLE-BUCKET/
folder
/nonpartition_mor/'
Im folgenden Beispiel wird eine nicht partitionierte MoR-Tabelle in Athena für Snapshot-Abfragen erstellt. Verwenden Sie für Snapshot-Abfragen das Eingabeformat HoodieParquetRealtimeInputFormat
.
CREATE EXTERNAL TABLE `nonpartition_mor_rt`( `_hoodie_commit_time` string, `_hoodie_commit_seqno` string, `_hoodie_record_key` string, `_hoodie_partition_path` string, `_hoodie_file_name` string, `event_id` string, `event_time` string, `event_name` string, `event_guests` int, `event_type` string) ROW FORMAT SERDE 'org.apache.hadoop.hive.ql.io.parquet.serde.ParquetHiveSerDe' STORED AS INPUTFORMAT 'org.apache.hudi.hadoop.realtime.HoodieParquetRealtimeInputFormat' OUTPUTFORMAT 'org.apache.hadoop.hive.ql.io.parquet.MapredParquetOutputFormat' LOCATION 's3://DOC-EXAMPLE-BUCKET/
folder
/nonpartition_mor/'
Partitionierte Merge-on-Read-(MoR)-Tabelle
Im folgenden Beispiel wird eine partitionierte MoR-Tabelle in Athena für leseoptimierte Abfragen erstellt.
CREATE EXTERNAL TABLE `partition_mor`( `_hoodie_commit_time` string, `_hoodie_commit_seqno` string, `_hoodie_record_key` string, `_hoodie_partition_path` string, `_hoodie_file_name` string, `event_id` string, `event_time` string, `event_name` string, `event_guests` int) PARTITIONED BY ( `event_type` string) ROW FORMAT SERDE 'org.apache.hadoop.hive.ql.io.parquet.serde.ParquetHiveSerDe' STORED AS INPUTFORMAT 'org.apache.hudi.hadoop.HoodieParquetInputFormat' OUTPUTFORMAT 'org.apache.hadoop.hive.ql.io.parquet.MapredParquetOutputFormat' LOCATION 's3://DOC-EXAMPLE-BUCKET/
folder
/partition_mor/'
Im folgenden ALTER TABLE ADD PARTITION
-Beispiel werden der partition_mor
-Beispieltabelle zwei Partitionen hinzugefügt.
ALTER TABLE partition_mor ADD PARTITION (event_type = 'one') LOCATION 's3://DOC-EXAMPLE-BUCKET/
folder
/partition_mor/one/' PARTITION (event_type = 'two') LOCATION 's3://DOC-EXAMPLE-BUCKET/folder
/partition_mor/two/'
Im folgenden Beispiel wird eine partitionierte MoR-Tabelle in Athena für Snapshot-Abfragen erstellt.
CREATE EXTERNAL TABLE `partition_mor_rt`( `_hoodie_commit_time` string, `_hoodie_commit_seqno` string, `_hoodie_record_key` string, `_hoodie_partition_path` string, `_hoodie_file_name` string, `event_id` string, `event_time` string, `event_name` string, `event_guests` int) PARTITIONED BY ( `event_type` string) ROW FORMAT SERDE 'org.apache.hadoop.hive.ql.io.parquet.serde.ParquetHiveSerDe' STORED AS INPUTFORMAT 'org.apache.hudi.hadoop.realtime.HoodieParquetRealtimeInputFormat' OUTPUTFORMAT 'org.apache.hadoop.hive.ql.io.parquet.MapredParquetOutputFormat' LOCATION 's3://DOC-EXAMPLE-BUCKET/
folder
/partition_mor/'
Ebenso werden im folgenden ALTER TABLE ADD PARTITION
-Beispiel der partition_mor_rt
-Beispieltabelle zwei Partitionen hinzugefügt.
ALTER TABLE partition_mor_rt ADD PARTITION (event_type = 'one') LOCATION 's3://DOC-EXAMPLE-BUCKET/
folder
/partition_mor/one/' PARTITION (event_type = 'two') LOCATION 's3://DOC-EXAMPLE-BUCKET/folder
/partition_mor/two/'
Weitere Ressourcen
-
Informationen zur Verwendung von AWS Glue benutzerdefinierten Konnektoren und AWS Glue 2.0-Jobs zum Erstellen einer Apache Hudi-Tabelle, die Sie mit Athena abfragen können, finden Sie unter Schreiben in Apache Hudi-Tabellen mithilfe eines AWS Glue benutzerdefinierten Konnektors
im AWS Big Data-Blog. -
Einen Artikel über die Verwendung von Apache Hudi und Amazon Athena zur Erstellung eines Datenverarbeitungs-Frameworks für einen Data Lake finden Sie unter Simplify Operational Data Processing in Data Lakes using AWS Glue und Apache Hudi
im AWS Big Data-Blog. AWS Glue