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.
Apache Hudi und Lake Formation mit Amazon EMR
Die EMR Amazon-Versionen 6.15.0 und höher bieten Unterstützung für eine differenzierte Zugriffskontrolle, die auf Apache Hudi basiert, wenn Sie Daten AWS Lake Formation mit Spark lesen und schreiben. SQL Amazon EMR unterstützt die Zugriffskontrolle auf Tabellen-, Zeilen-, Spalten- und Zellenebene mit Apache Hudi. Mit dieser Funktion können Sie Snapshot-Abfragen für copy-on-write Tabellen ausführen, um den neuesten Snapshot der Tabelle zu einem bestimmten Commit- oder Komprimierungszeitpunkt abzufragen.
Derzeit muss ein Lake Formation-fähiger EMR Amazon-Cluster die Commit-Zeitspalte von Hudi abrufen, um inkrementelle Abfragen und Zeitreiseabfragen durchzuführen. Die timestamp as of
Syntax und die Funktion von Spark werden nicht unterstützt. Spark.read()
Die richtige Syntax istselect * from table where _hoodie_commit_time <= point_in_time
. Weitere Informationen finden Sie unter Point-in-Time-Time-Travel-Abfragen in der Hudi-Tabelle
Die folgende Unterstützungsmatrix listet einige Kernfeatures von Apache Hudi mit Lake Formation auf:
Kopieren Sie beim Schreiben | Beim Lesen zusammenführen (MoR) | |
---|---|---|
Snapshot-Abfragen — Spark SQL |
✓ |
✓ |
Leseoptimierte Abfragen — Spark SQL |
✓ |
✓ |
Inkrementelle Abfragen |
✓ |
✓ |
Zeitreiseabfragen |
✓ |
✓ |
Metadaten-Tabellen |
✓ |
✓ |
DML |
✓ |
✓ |
DDLbefehle |
||
Spark-Datenquellenabfragen |
||
Spark-Datenquellenschreibvorgänge |
Abfragen von Hudi-Tabellen
In diesem Abschnitt wird gezeigt, wie Sie die oben beschriebenen unterstützten Abfragen auf einem Lake-Formation-fähigen Cluster ausführen können. Bei der Tabelle sollte es sich um eine registrierte Katalogtabelle handeln.
-
Verwenden Sie die folgenden Befehle, um die Spark-Shell zu starten.
spark-sql --jars /usr/lib/hudi/hudi-spark-bundle.jar \ --conf spark.serializer=org.apache.spark.serializer.KryoSerializer \ --conf spark.sql.catalog.spark_catalog=org.apache.spark.sql.hudi.catalog.HoodieCatalog \ --conf spark.sql.extensions=org.apache.spark.sql.hudi.HoodieSparkSessionExtension,com.amazonaws.emr.recordserver.connector.spark.sql.RecordServerSQLExtension \ --conf spark.sql.catalog.spark_catalog.lf.managed=true
Wenn Sie möchten, dass Lake Formation einen Datensatzserver zur Verwaltung Ihres Spark-Katalogs verwendet, setzen Sie
spark.sql.catalog.<managed_catalog_name>.lf.managed
ihn auf true. -
Verwenden Sie die folgenden Befehle, um den neuesten Snapshot der copy-on-write Tabellen abzufragen.
SELECT * FROM
my_hudi_cow_table
spark.read.table("
my_hudi_cow_table
") -
Um die neuesten komprimierten Daten von
MOR
-Tabellen abzufragen, können Sie die leseoptimierte Tabelle mit dem Suffix_ro
abfragen:SELECT * FROM
my_hudi_mor_table
_rospark.read.table("
my_hudi_mor_table
_ro")
Anmerkung
Die Leistung von Lesevorgängen auf Lake Formation-Clustern kann aufgrund von Optimierungen, die nicht unterstützt werden, langsamer sein. Zu diesen Features gehören das Auflisten von Dateien auf der Grundlage von Hudi-Metadaten und das Überspringen von Daten. Wir empfehlen Ihnen, die Leistung Ihrer Anwendung zu testen, um sicherzustellen, dass sie Ihrem SLA entspricht.