文档首页/ 数据湖探索 DLI/ 常见问题/ DLI数据库和表类/ 为什么创建Hudi表没有在DLI控制台上显示?
更新时间:2025-07-04 GMT+08:00
分享

为什么创建Hudi表没有在DLI控制台上显示?

问题描述

使用Flink SQL语句创建的Hudi表未在DLI控制台显示无法通过控制台对该表进行管理和查询操作。

根因分析

DLI控制台的数据管理默认使用的是Hive Catalog,而Hudi表的元数据没有正确同步到Hive Catalog中。Hudi表的元数据管理是独立于Hive的,因此需要额外的配置来确保Hudi表的元数据能够被Hive Catalog识别和同步。

解决方案

Hudi表持久化是指将Hudi表的元数据和数据信息同步并保存到Hive的元数据存储中,以便 Hive 能够识别和管理这些表。

  • SQL作业

    如果仅使用SQL来操作Hudi数据,通常不需要配置额外的“持久化参数”,因为SQL作业本身已经提供了对Hudi数据的读写支持。

  • Flink OpenSource SQL作业

    为了将Hudi表的元数据持久化到DLI的数据管理(Hive Catalog),需要在创建Hudi表时添加一些特定的配置参数,这些参数用于通知Hudi将元数据同步到Hive Catalog。

    详细参数说明如表1所示。

    在DLI使用Hudi提交Flink SQL作业且配置,配置hive_sync相关参数,实时同步元数据至由DLI的操作示例请参考在DLI使用Hudi提交Flink SQL作业

    表1 创建Hudi结果表时配置的持久化参数

    参数名称

    参数描述

    hive_sync.enable

    是否启用向Hive同步表信息。

    当你需要将Hudi表的元数据同步到 Hive元数据存储中,以便通过Hive查询工具或在DLI控制台的数据管理中访问Hudi表时,需要将此参数设置为 true。

    • true:Hudi 将会把表的元数据(如表结构、分区信息等)同步到 Hive 中。
    • false:不会向Hive同步表信息。

    开启向hive同步表信息后会使用catalog相关权限,还需配置访问catalog的委托权限。

    hive_sync.mode

    Hudi表元数据同步到Hive的方式

    根据你的环境和需求选择合适的同步模式。

    • jdbc:通过JDBC连接到 Hive Server来同步元数据。
    • hms:通过Hive Meta Client 直接与Hive Metastore交互来同步元数据。
    • hiveql:通过执行Hive QL语句来同步元数据。

    hive_sync.table

    同步到Hive的表名称,Hudi表的元数据将同步到这个Hive表中

    hive_sync.db

    同步到Hive的数据库名称,Hudi表的元数据将同步到这个Hive数据库中的表。

    hive_sync.support_timestamp

    是否支持时间戳,用于确保Hudi表的元数据同步到Hive时能够正确处理时间戳字段。

    建议配置为True。

  • Spark jar作业

    在Spark jar中操作Hudi数据时,也需要配置一些参数来实现持久化和同步到Hive。

    详细参数说明如表2所示。

    在DLI使用Hudi提交Spark Jar作业且开启作业同步配置的示例请参考在DLI使用Hudi提交Spark Jar作业

    表2 Spark Jar作业同步Hive表参数配置

    参数

    描述

    默认值

    hoodie.datasource.hive_sync.enable

    是否同步hudi表信息到Hive。当使用DLI提供的元数据服务时,配置该参数代表同步至DLI的元数据中。

    建议该值设置为true,统一使用元数据服务管理hudi表。

    true

    hoodie.datasource.hive_sync.database

    要同步给Hive的数据库名。

    default

    hoodie.datasource.hive_sync.table

    要同步给Hive的表名,建议和hoodie.datasource.write.table.name的值保证一致。

    unknown

    hoodie.datasource.hive_sync.partition_fields

    用于确定Hive分区列。

    ""

    hoodie.datasource.hive_sync.partition_extractor_class

    用于提取hudi分区列值,将其转换成Hive分区列。

    org.apache.hudi.hive.SlashEncodedDayPartitionValueExtractor

    hoodie.datasource.hive_sync.support_timestamp

    当hudi表存在timestamp类型字段时,需指定此参数为true,以实现同步timestamp类型到hive元数据中。

    该值默认为false,默认将timestamp类型同步为bigInt,默认情况可能导致使用sql查询包含timestamp类型字段的hudi表出现错误。

    true

    hoodie.datasource.hive_sync.fast_sync

    Hudi同步Hive分区方式:

    • true:从最近一次hive同步后所修改的分区直接向Hive表中做add partition if not exist操作。
    • false:会根据修改的分区去hive表查询是否已存在,不存在的进行添加。

    true

    hoodie.datasource.hive_sync.mode

    hudi表同步Hive表的方式,在使用DLI提供的元数据服务时需要保证为hms:

    • hms:通过hive metastore client同步元数据。
    • jdbc:通过hive jdbc方式同步元数据。(DLI元数据服务不支持)
    • hiveql:执行hive ql方式同步元数据。(DLI元数据服务不支持)

    hms

    hoodie.datasource.hive_sync.username

    使用jdbc方式同步Hive时,指定的用户名。

    hive

    hoodie.datasource.hive_sync.password

    使用jdbc方式同步Hive时,指定的密码。

    hive

    hoodie.datasource.hive_sync.jdbcurl

    连接hive jdbc指定的连接。

    ""

    hoodie.datasource.hive_sync.use_jdbc

    是否使用Hive jdbc方式连接Hive同步Hudi表信息。建议该值设置为false,设置为false后jdbc连接相关配置无效。

    true

相关文档