创建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属性值保持一致。