本文为您介绍Hudi与Spark SQl集成后,支持的DDL语句。

背景信息

Spark SQL创建Hudi表时,可以通过options设置表配置信息,options参数如下表所示。
参数 描述
primaryKey 指定主键列,多个字段时使用逗号(,)隔开。
type 表类型,支持以下两种类型:
  • cow(默认值):表示Copy-On-Write类型表。
  • mor:表示Merge-On-Read类型表。
preCombineField 版本字段。

对应Hudi的DataSourceWriteOptions.PRECOMBINE_FIELD_OPT_KEY字段。

payloadClass 默认值为DefaultHoodieRecordPayload。

对应Hudi的DataSourceWriteOptions.PAYLOAD_CLASS_OPT_KEY字段。

创建非分区表

options通过primaryKey指定主键列,多个字段时使用逗号(,)隔开。创建非分区表的示例如下所示:
  • 创建表类型为cow,主键为id的非分区表。
    create table if not exists h0(
      id bigint, 
      name string, 
      price double
    ) using hudi
    options (
      type = 'cow',
      primaryKey = 'id'
    );
  • 创建表类型为mor,主键为id和name的非分区表。
    create table if not exists h0(
      id bigint, 
      name string, 
      price double
    ) using hudi
    options (
      type = 'mor',
      primaryKey = 'id,name'
    );
  • 创建表类型为cow的非分区表。
    create table if not exists h0(
      id bigint, 
      name string, 
      price double
    ) using hudi
    options (
      type = 'cow'
    );

创建分区表

创建分区表的示例如下所示。
create table if not exists  h_p0 (
id bigint,
name string,
dt string,
hh string  
) using hudi
location '/xx/xxx/h_p0'
options (
  type = 'cow',
  primaryKey = 'id',
  preCombineField = 'ts'
 ) 
partitioned by (dt, hh);
说明 本文代码示例中的 location为表所在的路径,可以是OSS路径,也可以是HDFS路径。主键为id,分区字段为dt和hh,版本字段为ts。

创建外表

支持在已经存在的Hudi表之上创建外表。创建外表示例如下所示。
create table h0
using hudi
location '/xx/xx/h0';

CTAS语法

通过以下示例为您介绍如何使用CTAS语法。

  • 示例1:
    create table if not exists h1 using hudi 
    as 
    select 1 as id, 'a1' as name, 10 as price;
  • 示例2:
    create table if not exists h2 using hudi
    partitioned by (dt)
    location '/xx/xx/h2'
    options (
      type = 'mor',
      primaryKey = 'id,name'
    ) as
    select 1 as id, 'a1' as name, 20 as price, '2021-01-03' as dt;