Apache Hudi と Lake Formation - Amazon EMR

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

Apache Hudi と Lake Formation

Amazon EMRリリース 6.15.0 以降には、Spark AWS Lake Formation でデータの読み取りと書き込みを行うときに、Apache Hudi を使用した に基づくきめ細かなアクセスコントロールのサポートが含まれていますSQL。Amazon EMRは、Apache Hudi によるテーブル、行、列、およびセルレベルのアクセスコントロールをサポートしています。この機能を使用すると、テーブルで copy-on-writeスナップショットクエリを実行して、特定のコミットまたは圧縮の瞬間にテーブルの最新スナップショットをクエリできます。

現在、Lake Formation 対応の Amazon EMRクラスターは、増分クエリとタイムトラベルクエリを実行するために Hudi のコミット時間列を取得する必要があります。Spark のtimestamp as of構文と Spark.read()関数はサポートされていません。正しい構文は ですselect * from table where _hoodie_commit_time <= point_in_time。詳細については、「Hudi テーブルのポイントインタイムトラベルクエリ」を参照してください。

以下のサポートマトリックスには、Apache Hudi と Lake Formation の連携の主要機能の一部がリストされています。

Copy on Write 読み取り時マージ

スナップショットクエリ - Spark SQL

読み取り最適化クエリ - Spark SQL

増分クエリ

タイムトラベルクエリ

メタデータテーブル

DML INSERT コマンド

DDL コマンド

Spark データソースクエリ

Spark データソース書き込み

Hudi テーブルのクエリ

このセクションでは、Lake Formation 対応クラスターで前述のサポート対象クエリを実行する方法を示します。テーブルは、登録済みのカタログテーブルである必要があります。

  1. 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 カタログを管理する場合は、true spark.sql.catalog.<managed_catalog_name>.lf.managed に設定します。

  2. テーブルの copy-on-write最新のスナップショットをクエリするには、次のコマンドを使用します。

    SELECT * FROM my_hudi_cow_table
    spark.read.table("my_hudi_cow_table")
  3. MOR テーブルの最新の圧縮データをクエリするには、読み取り最適化テーブル (サフィックス _ro 付き) に対するクエリを実行します。

    SELECT * FROM my_hudi_mor_table_ro
    spark.read.table("my_hudi_mor_table_ro")
注記

Lake Formation クラスターでの読み取りのパフォーマンスは、最適化がサポートされていないために低くなる可能性があります。これらの機能には、Hudi メタデータに基づくファイルリストやデータスキップなどがあります。アプリケーションのパフォーマンスをテストして、要件を満たしているか確認することをお勧めします。