更新时间:2024-11-29 GMT+08:00

CREATE TABLE

命令功能

CREATE TABLE命令通过指定带有表属性的字段列表来创建Hudi Table。

命令格式

CREATE TABLE [ IF NOT EXISTS] [database_name.]table_name

[ (columnTypeList)]

USING hudi

[ COMMENT table_comment ]

[ LOCATION location_path ]

[ OPTIONS (options_list) ]

参数描述

表1 CREATE TABLE参数描述

参数

描述

database_name

Database名称,由字母、数字和下划线(_)组成。

table_name

Database中的表名,由字母、数字和下划线(_)组成。

columnTypeList

以逗号分隔的带数据类型以及列默认值(可选)的列表。列名由字母、数字和下划线(_)组成。

using

参数hudi,定义和创建Hudi table。

table_comment

表的描述信息。

location_path

HDFS路径,指定该路径Hudi 表会创建为外表。

options_list

Hudi table属性列表。

表2 CREATE TABLE Options描述

参数

描述

primaryKey

主键名,多个字段用逗号分隔,该字段为必填字段。

type

表类型。'cow' 表示 COPY-ON-WRITE 表,'mor' 表示 MERGE-ON-READ 表。未指定type的话,默认值为 'cow'。

preCombineField

表的Pre-Combine字段,该字段为必填字段。

payloadClass

使用preCombineField字段进行数据过滤的逻辑,默认使用DefaultHoodieRecordPayload,同时也提供了多种预置Payload供用户使用,如OverwriteNonDefaultsWithLatestAvroPayload、OverwriteWithLatestAvroPayload及EmptyHoodieRecordPayload。

useCache

是否在Spark中缓存表的relation,无需用户配置。为支持SparkSQL中对COW表增量视图查询,默认将COW表中该值置为false。

示例

  • 创建非分区表
    create table if not exists hudi_table0 (
    id int,
    name string,
    price double
    ) using hudi
    options (
    type = 'cow',
    primaryKey = 'id',
    preCombineField = 'price'
    );
  • 创建分区表
    create table if not exists hudi_table_p0 (
    id bigint,
    name string,
    ts bigint,
    dt string,
    hh string
    ) using hudi
    options (
    type = 'cow',
    primaryKey = 'id',
    preCombineField = 'ts'
    )
    partitioned by (dt, hh);
  • 在指定路径下创建表
    create table if not exists h3(
    id bigint,
    name string,
    price double
    ) using hudi
    
    options (
    primaryKey = 'id',
    preCombineField = 'price'
    )
    location '/path/to/hudi/h3';
  • 创建表指定表属性
    create table if not exists h3(
    id bigint,
    name string,
    price double
    ) using hudi
    options (
    primaryKey = 'id',
    type = 'mor',
    preCombineField = 'name',
    hoodie.cleaner.fileversions.retained = '20',
    hoodie.keep.max.commits = '20'
    );
  • 创建表指定列默认值
    create table if not exists h3(
    id bigint,
    name string,
    price double default 12.34
    ) using hudi
    options (
    primaryKey = 'id',
    type = 'mor',
    preCombineField = 'name'
    );

注意事项

  • Hudi当前不支持使用char、varchar、tinyint、smallint类型,建议使用string或int类型。
  • Hudi当前只有int、bigint、float、double、decimal、string、date、timestamp、boolean、binary类型支持设置默认值。
  • Hudi表必须指定primaryKey与preCombineField。
  • 在指定路径下创建表时,如果路径下已存在Hudi表,则建表时不需要指定列。

系统响应

Table创建成功,创建成功的消息将被记录在系统日志中。