日本熟妇hd丰满老熟妇,中文字幕一区二区三区在线不卡 ,亚洲成片在线观看,免费女同在线一区二区

Hive訪問Delta Lake和Hudi數據

Hive不支持寫入數據到Delta Lake和Hudi,但是可以通過外部表的方式查詢Delta Lake和Hudi中的數據。本文通過示例為您介紹如何使用EMR上的Hive訪問Delta Lake和Hudi數據。

前提條件

  • 已創建包含Hive、Delta Lake和Hudi服務的集群,詳情請參見創建集群

  • 已登錄集群,詳情請參見登錄集群

使用限制

EMR-3.36.0及后續版本和EMR-5.2.0及后續版本,支持Hive對Hudi進行讀操作。

Hive訪問Delta Lake數據

  1. 執行以下命令,進入Spark命令行。

    spark-sql
  2. 在Spark中創建并查詢表數據。

    1. 執行以下命令,在Spark中創建Delta表。

      create table delta_table (id int) using delta;
    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. 在Hive中查看Delta Lake數據。

    1. 執行以下命令,進入Hive命令行。

      hive
    2. 執行以下命令,在Hive中查看Delta Lake表。

      desc formatted delta_table;
    3. 執行以下命令,在Hive中查看Delta Lake表的數據。

      select * from delta_table;

      返回如下信息。

      OK
      2
      3
      4
      0
      1
      Time taken: 1.897 seconds, Fetched: 5 row(s)
      說明

      查看數據與在Spark中插入的數據一致,說明Hive已經成功訪問了Delta Lake的數據。

Hive訪問Hudi數據

重要 EMR-3.36.0及后續版本和EMR-5.2.0及后續版本,支持Hive對Hudi進行讀操作。

Spark讀寫Hudi

  • 啟動方式

    • Spark2和Spark3 hudi0.11以下版本

      spark-sql \
      --conf 'spark.serializer=org.apache.spark.serializer.KryoSerializer' \
      --conf 'spark.sql.extensions=org.apache.spark.sql.hudi.HoodieSparkSessionExtension'
    • Spark3 hudi0.11及以上版本

      spark-sql \
      --conf 'spark.serializer=org.apache.spark.serializer.KryoSerializer' \
      --conf 'spark.sql.extensions=org.apache.spark.sql.hudi.HoodieSparkSessionExtension' \
      --conf 'spark.sql.catalog.spark_catalog=org.apache.spark.sql.hudi.catalog.HoodieCatalog'
  • 使用示例

    • 建表

      create table h0 (
        id bigint,
        name string,
        price double,
        ts long
      ) using hudi
      tblproperties (
        primaryKey="id",
        preCombineField="ts"
      );
    • 查看表詳情

      desc formatted h0;

      返回信息如下所示。

      _hoodie_commit_time     string
      _hoodie_commit_seqno    string
      _hoodie_record_key      string
      _hoodie_partition_path    string
      _hoodie_file_name       string
      id                      bigint
      name                    string
      price                   double
      ts                      bigint
      說明

      _hoodie_commit_time_hoodie_commit_seqno_hoodie_record_key_hoodie_partition_path_hoodie_file_name為Hudi默認添加的輔助字段。

    • 數據操作

      -- insert
      insert into h0 values (1, 'a1', 10, 1000), (2, 'a2', 11, 1000);
      
      -- update
      update h0 set name = 'a1_new' where id = 1;
      
      -- delete
      delete from h0 where id = 1;
    • 查詢

      • 示例1

        select id, name, price, ts from h0;

        查詢結果如下所示。

        2    a2    11.0    1000
      • 示例2

        select * from h0;

        查詢結果如下所示。

        4.820221130150621338    20221130150621338_0_1    id:2        40d6507e-0579-42ce-a10f-c5e07a3981e5-0_0-29-2007_2022113015062****.parquet    2    a2    11.0    1000
        說明

        由于當前為非分區表,所以_hoodie_partition_path為空。前四個字段為Hudi默認添加的輔助字段的值。

    更多Spark讀寫Hudi示例,請參見Spark Guide

Hive查詢Hudi

說明

Hudi僅支持Spark或者Flink建表和寫入數據,Hive僅支持查詢。

直接輸入hive命令進入Hive CLI命令行或者通過Beeline連接Hive ThriftServer,然后執行SQL語句即可。示例如下。

-- select
select * from h0;