すべてのプロダクト
Search
ドキュメントセンター

E-MapReduce:Delta テーブルのデータのクエリ

最終更新日:Jan 11, 2025

E-MapReduce(EMR)で Spark を使用して Delta テーブルを作成すると、テーブルのメタデータが Hive Metastore に同期されます。他のテーブルのデータをクエリするのと同じ方法で、Delta テーブルのデータをクエリできます。また、Hive に外部テーブルを作成して、Delta テーブルのデータをクエリすることもできます。このトピックでは、Spark を使用して Delta テーブルを作成し、Hive、Presto、または Trino を使用して Delta テーブルのデータをクエリする方法について説明します。また、既存の Delta テーブルのデータをクエリするために Hive に外部テーブルを作成する方法についても説明します。

背景情報

制限事項

このトピックは、EMR V3.37.0 以降のマイナーバージョン、EMR V5.3.0 以降のマイナーバージョン、および EMR V4.10.0 に適用されます。

Spark を使用して Delta テーブルを作成し、テーブル内のデータをクエリする

  1. Spark CLI を開きます。
    1. SSH モードで EMR クラスタのマスターノードにログオンします。詳細については、クラスタへのログオンをご参照ください。
    2. 次のコマンドを実行して、Spark CLI を開きます。
      spark-sql
  2. Spark でテーブルを作成し、テーブル内のデータをクエリします。
    1. 次のコマンドを実行して、Spark に delta_table という名前の Delta Lake テーブルを作成します。
      create table delta_table (id int) using delta location "/tmp/delta_table";
    2. 次のコマンドを実行して、テーブルにデータを挿入します。
      insert into delta_table values 0,1,2,3,4;
    3. 次のコマンドを実行して、テーブル内のデータをクエリします。
      select * from delta_table;
      次の内容を含む情報が返されます。
      2
      3
      4
      0
      1
      Time taken: 1.847 seconds, Fetched 5 row(s)
  3. Delta テーブルのデータをクエリします。

    Hive を使用してDelta テーブルのデータをクエリする

    重要
    • EMR V3.37.0 以降のマイナーバージョンでは、Hive を使用して Delta テーブルのデータをクエリする場合、EMR コンソールで、またはコマンドを実行してカスタムパラメータを追加する必要があります。EMR コンソールで追加する必要があるパラメータは、Hive の実行エンジンによって異なります。Hive on MapReduce を使用する場合は、[設定] タブの Hive サービスの [hive-site.xml] サブタブで [hive.input.format] パラメータを追加し、パラメータを [io.delta.hive.hiveinputformat] に設定する必要があります。Hive on Tez を使用する場合は、[hive.tez.input.format] パラメータを追加し、パラメータを [io.delta.hive.hiveinputformat] に設定する必要があります。詳細については、パラメータの追加をご参照ください。

    • ADD COLUMN ステートメントを実行して Delta テーブルに列を追加する場合、新しいフィールドをパーティションフィールドの前に追加することをお勧めします。これにより、Hive を使用して Delta テーブルのデータをクエリするときにデータ例外が発生するのを防ぎます。詳細については、ALTER TABLEをご参照ください。

    1. 次のコマンドを実行して、Hive CLI を開きます。

      hive
    2. 次のコマンドを実行して、Delta テーブルのデータをクエリします。

      select * from delta_table;

      次の出力が返されます。

      2
      3
      4
      0
      1
      Time taken: 2.937 seconds, Fetched: 5 row(s)
      説明

      返されるデータは、Spark を使用して Delta テーブルに挿入したデータと同じです。これは、Hive から Delta テーブルへのアクセスが成功したことを示しています。

    Presto を使用して Delta テーブルのデータをクエリする

    1. 次のコマンドを実行して、Presto CLI を開きます。

      presto --server master-1-1:8889 --catalog delta --schema default --user hadoop

      上記コマンドのパラメータ:

      • --server master-1-1:8889:Presto サービスの IP アドレスとポート番号。

      • --catalog delta:接続するデータソースの名前。

      • --schema default:使用するデータベースの名前。この例では、デフォルトのデータベースが使用されます。ビジネス要件に基づいてこのパラメータを変更できます。

      • --user hadoop:認証用のユーザー名。

    2. 次のコマンドを実行して、Delta テーブルのデータをクエリします。

      select * from delta_table;

      次の出力が返されます。

       id
      ----
        2
        3
        4
        0
        1
      (5 rows)
      説明

      返されるデータは、Spark を使用して Delta テーブルに挿入したデータと同じです。これは、Presto から Delta テーブルへのアクセスが成功したことを示しています。

    Trino を使用して Delta テーブルのデータをクエリする

    1. 次のコマンドを実行して、Trino CLI を開きます。

      trino --server master-1-1:9090 --catalog delta --schema default --user hadoop

      上記コマンドのパラメータ:

      • --server master-1-1:9090:Trino サービスの IP アドレスとポート番号。

      • --catalog delta:接続するデータソースの名前。

      • --schema default:使用するデータベースの名前。この例では、デフォルトのデータベースが使用されます。ビジネス要件に基づいてこのパラメータを変更できます。

      • --user hadoop:認証用のユーザー名。

    2. 次のコマンドを実行して、Delta テーブルのデータをクエリします。

      select * from delta_table;

      次の出力が返されます。

       id
      ----
        2
        3
        4
        0
        1
      (5 rows)
      説明

      返されるデータは、Spark を使用して Delta テーブルに挿入したデータと同じです。これは、Trino から Delta テーブルへのアクセスが成功したことを示しています。

Hive に外部テーブルを作成する

EMR では、既存の Delta テーブルのデータをクエリするために Hive に外部テーブルを作成できます。サンプルコード:

CREATE EXTERNAL TABLE delta_tbl (name string, age int, city string)
ROW FORMAT SERDE 'org.apache.hadoop.hive.ql.io.parquet.serde.ParquetHiveSerDe'
WITH SERDEPROPERTIES("path" = "/path/to/delta")
STORED AS INPUTFORMAT 'io.delta.hive.DeltaInputFormat'
OUTPUTFORMAT 'io.delta.hive.DeltaOutputFormat'
LOCATION '/path/to/delta'
TBLPROPERTIES("spark.sql.sources.provider" = "delta");

クラスタが EMR V3.37.0 以降のマイナーバージョンの場合、Hive Storage Handler を使用して外部テーブルを作成することもできます。サンプルコード:

CREATE EXTERNAL TABLE delta_tbl123 (name string, age int, city string)
STORED BY 'io.delta.hive.DeltaStorageHandler'
WITH SERDEPROPERTIES("path" = "/path/to/delta")
LOCATION '/path/to/delta'
TBLPROPERTIES("spark.sql.sources.provider" = "delta");
説明

前述のステートメントでは、SERDEPROPERTIESpathspark.sql.sources.providerTBLPROPERTIES手順 3 が設定されており、Spark SQL を使用して外部テーブルをクエリできるようにしています。外部テーブルを作成した後、Hive、Presto、または Trino を使用して外部テーブルをクエリできます。方法は、Spark を使用して作成された Delta テーブルをクエリする場合と同じです。詳細については、 をご参照ください。