更新时间:2024-12-06 GMT+08:00
分享

创建Hudi数据描述(外表)

外表是对OBS上数据的映射。GaussDB(DWS)通过外表方式访问OBS上的Hudi数据,具体可参见CREATE FOREIGN TABLE (SQL on OBS or Hadoop)

与一般OBS外表相比,Hudi外表没有特别的参数需要指定,只需要指定format为'hudi'即可,对于Hudi bucket表,需额外增加distribute by参数为hash(bk_col1,bk_col2...)。其中Hudi bucket表仅9.1.0.100及以上版本支持。

获取MRS上表定义

DWS Hudi外表是只读的,因此在创建外表之前需要明确目标数据定义了多少字段,每个字段是什么类型。Hudi外表支持的最大列数为5000列。

例如,对于MRS上的Hudi表,可以使用spark-sql来查询原始表定义:

1
SHOW create table rtd_mfdt_int_currency_t;

编写DWS表定义

  • 非bucket表

    复制MRS表所有列的定义,做适当的类型转换以适配DWS语法,创建OBS外表:

     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    11
    12
    CREATE FOREIGN TABLE rtd_mfdt_int_currency_ft(
    _hoodie_commit_time text,
    _hoodie_commit_seqno text,
    _hoodie_record_key text,
    _hoodie_partition_path text,
    _hoodie_file_name text,
    ...
    )SERVER obs_server OPTIONS (
    foldername '/erpgc-obs-test-01/s000/sbi_fnd/rtd_mfdt_int_currency_t/',
    format 'hudi',
    encoding 'utf-8'
    )distribute by roundrobin;
    

    其中,foldername为hudi数据在OBS上存储路径,对应MRS中Spark-sql表定义中的LOCATION,末尾要以“/”结尾。

  • bucket表

    复制MRS表所有列的定义,做适当的类型转换以适配DWS语法,创建OBS外表,指定hash分布方式:

     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    11
    12
    CREATE FOREIGN TABLE rtd_mfdt_int_currency_ft(
    _hoodie_commit_time text,
    _hoodie_commit_seqno text,
    _hoodie_record_key text,
    _hoodie_partition_path text,
    _hoodie_file_name text,
    ...
    )SERVER obs_server OPTIONS (
    foldername '/erpgc-obs-test-01/s000/sbi_fnd/rtd_mfdt_int_currency_t/',
    format 'hudi',
    encoding 'utf-8'
    )distribute by hash(bk_col1,bk_col2...);
    

    其中,foldername为hudi数据在OBS上存储路径,对应MRS中Spark-sql表定义中的LOCATION,末尾要以“/”结尾;

    distribute by为bucket表的分布列,与foldername/.hoodie/hoodie.index.properties文件中的hoodie.bucket.index.hash.field属性值保持一致。

相关文档