Hudi Hive建表流程

1. 准备工作

在开始建表之前,需要确保以下条件已满足:

  • 已安装和配置好Hudi和Hive
  • 已创建好Hudi集群和Hive表空间
  • 已准备好需要导入的数据文件

2. 建立Hive外部表

Hudi是建立在Hive之上的,因此首先需要在Hive中创建一个外部表,用于将Hudi数据与Hive进行关联。

CREATE EXTERNAL TABLE hudi_table (
  id INT,
  name STRING,
  age INT
)
ROW FORMAT SERDE 'org.apache.hudi.hadoop.HoodieParquetInputFormat'
STORED AS
INPUTFORMAT 'org.apache.hudi.hadoop.HoodieParquetInputFormat'
OUTPUTFORMAT 'org.apache.hadoop.hive.ql.io.parquet.MapredParquetOutputFormat'
LOCATION 'hdfs://path/to/hudi/data';

代码解释:

  • CREATE EXTERNAL TABLE:创建一个外部表
  • hudi_table:表名
  • id, name, age:表的列名和数据类型
  • ROW FORMAT SERDE:指定Hudi Parquet格式的InputFormat
  • STORED AS:指定Hudi Parquet格式的OutputFormat
  • LOCATION:指定Hudi数据存储的HDFS路径

3. 创建Hudi表

接下来需要创建一个Hudi表,这样才能使用Hudi的特性进行数据操作。

CREATE TABLE hudi_table_hudi
ROW FORMAT SERDE 'org.apache.hudi.hadoop.HoodieParquetInputFormat'
STORED AS
INPUTFORMAT 'org.apache.hudi.hadoop.HoodieParquetInputFormat'
OUTPUTFORMAT 'org.apache.hadoop.hive.ql.io.parquet.MapredParquetOutputFormat'
LOCATION 'hdfs://path/to/hudi/data'
TBLPROPERTIES (
  'hoodie.table.name' = 'hudi_table',
  'hoodie.table.type' = 'COPY_ON_WRITE'
);

代码解释:

  • CREATE TABLE:创建一个Hudi表
  • hudi_table_hudi:表名,以"_hudi"结尾,表示这是一个Hudi表
  • ROW FORMAT SERDE:指定Hudi Parquet格式的InputFormat
  • STORED AS:指定Hudi Parquet格式的OutputFormat
  • LOCATION:指定Hudi数据存储的HDFS路径
  • TBLPROPERTIES:表的属性
    • 'hoodie.table.name' = 'hudi_table':指定关联的Hive外部表名
    • 'hoodie.table.type' = 'COPY_ON_WRITE':指定Hudi表的类型,这里使用的是Copy-on-Write模式

4. 导入数据

现在可以将数据导入到Hudi表中。

INSERT INTO TABLE hudi_table_hudi
SELECT * FROM hudi_table;

代码解释:

  • INSERT INTO TABLE:将数据插入到Hudi表中
  • hudi_table_hudi:目标表,即Hudi表
  • SELECT * FROM hudi_table:从Hive外部表中选择全部数据,并将其插入到Hudi表中

5. 查询数据

现在可以对Hudi表进行查询操作了。

SELECT * FROM hudi_table_hudi;

代码解释:

  • SELECT * FROM hudi_table_hudi:查询Hudi表中的全部数据

关系图

erDiagram
    hudi_table ||--o{ hudi_table_hudi : "1"

饼状图

pie
    title Hudi表数据分布
    "男" : 70
    "女" : 30

以上就是使用Hudi在Hive中建立表的完整流程,通过这种方式可以实现对Hudi表的数据操作和查询。请按照上述步骤进行操作,并根据实际情况进行相应的调整。希望对你有所帮助!