翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。
Amazon EMR での Apache Hudi と Lake Formation
Amazon EMR リリース 6.15.0 以降には、Spark SQL AWS Lake Formation でデータを読み書きするときに、Apache Hudi を使用した に基づくきめ細かなアクセスコントロールのサポートが含まれています。Amazon EMR は、Apache Hudi を使用した、テーブル、行、列、セルレベルのアクセスコントロールをサポートしています。この機能を利用してコピーオンライトテーブルに対してスナップショットクエリを実行することで、特定のコミットまたは圧縮の瞬間におけるテーブルの最新のスナップショットをクエリすることができます。
現在、Lake Formation 対応の Amazon EMR クラスターは、増分クエリとタイムトラベルクエリを実行するために Hudi のコミット時間列を取得する必要があります。Spark の timestamp as of
構文と Spark.read()
関数はサポートされていません。正しい構文は select * from table where _hoodie_commit_time <= point_in_time
です。詳細については、「Point in time Time-Travel queries on Hudi table
以下のサポートマトリックスには、Apache Hudi と Lake Formation の連携の主要機能の一部がリストされています。
Copy on Write | 読み取り時マージ | |
---|---|---|
スナップショットクエリ - Spark SQL |
✓ |
✓ |
読み取り最適化クエリ - Spark SQL |
✓ |
✓ |
増分クエリ |
✓ |
✓ |
タイムトラベルクエリ |
✓ |
✓ |
メタデータテーブル |
✓ |
✓ |
DML |
✓ |
✓ |
DDL コマンド |
||
Spark データソースクエリ |
||
Spark データソース書き込み |
Hudi テーブルのクエリ
このセクションでは、Lake Formation 対応クラスターで前述のサポート対象クエリを実行する方法を示します。テーブルは、登録済みのカタログテーブルである必要があります。
-
Spark シェルを起動するには、次のコマンドを使用します。
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
Lake Formation でレコードサーバーを使用して Spark カタログを管理する場合は、
spark.sql.catalog.<managed_catalog_name>.lf.managed
を true に設定します。 -
copy-on-write テーブルの最新のスナップショットをクエリするには、次のコマンドを使用します。
SELECT * FROM
my_hudi_cow_table
spark.read.table("
my_hudi_cow_table
") -
MOR
テーブルの最新の圧縮データをクエリするには、読み取り最適化テーブル (サフィックス_ro
付き) に対するクエリを実行します。SELECT * FROM
my_hudi_mor_table
_rospark.read.table("
my_hudi_mor_table
_ro")
注記
Lake Formation クラスターでの読み取りのパフォーマンスは、最適化がサポートされていないために低くなる可能性があります。これらの機能には、Hudi メタデータに基づくファイルリストやデータスキップなどがあります。アプリケーションのパフォーマンスをテストして、要件を満たしているか確認することをお勧めします。