【无标题】

背景

  • Flink Table/SQL 任务开发中,常见多种数据源混合使用,如 Kafka、Hive 等。
  • 生产要求 :Kafka 等 Source 表不要注册到 Hive Metastore,Hive Sink 表必须在 HiveCatalog/Hive Metastore 中注册,以保证数据治理、权限、血缘等规范。

常见问题

  • 误操作:在 HiveCatalog 下创建了 Kafka Source 表,导致该表结构同步进 Hive Metastore,Hive CLI 能查到"假表",影响治理。
  • 跨 Catalog 查询:切换 Catalog 后直接用表名引用其它 Catalog 下的表,会报 "Object not found" 错误。

方法:全限定名写法(生产环境标准)

步骤

  1. 注册 HiveCatalog,但不切换

    java 复制代码
    tenv.registerCatalog("myhive", hive);
  2. 在默认 Catalog 下创建 Kafka 源表

    java 复制代码
    tenv.useCatalog("default_catalog"); 
    tenv.executeSql("CREATE TABLE kafka_source (...) WITH ('connector'='kafka', ...)");
    ---------------------
    比如:
          tenv.useCatalog("default_catalog"); 
          tenv.executeSql(
                "CREATE TABLE IF NOT EXISTS kafka_source ( " +
                        " id STRING, " +
                        " name STRING, " +
                        " age INT " +
                        ") WITH ( " +
                        " 'connector' = 'kafka', " +
                        " 'topic' = 'flinktest1', " +
                        " 'properties.bootstrap.servers' = '192.168.77.88:9092', " +
                        " 'properties.group.id' = 'flink-group', " +
                        " 'scan.startup.mode' = 'earliest-offset', " +
                        " 'format' = 'json', " +
                        " 'json.fail-on-missing-field' = 'false', " +
                        " 'json.ignore-parse-errors' = 'true' " +
                        ")"
        );

```

  1. 切换到 HiveCatalog,创建 Sink 表

    java 复制代码
    tenv.useCatalog("myhive");
    tenv.executeSql("CREATE TABLE hive_sink (...) WITH ('connector'='hive', ...)");
    -----------------------
    比如:
        tenv.useCatalog(name);
        tenv.executeSql(
                "CREATE TABLE IF NOT EXISTS hive_sink ( " +
                        " id STRING, " +
                        " name STRING, " +
                        " age INT " +
                        ") WITH ( " +
                        " 'connector' = 'hive', " +
                        " 'table-name' = 'hive_sink' " +
                        ")"
        );
  2. insert 时,使用全限定名引用 Source 表

    java 复制代码
    tenv.executeSql("INSERT INTO hive_sink SELECT * FROM default_catalog.default_database.kafka_source");

关键点

  • Kafka Source 表只在 Flink 的 default_catalog 下注册,不写入 Hive Metastore。
  • Hive Sink 表只在 HiveCatalog 下注册,Hive CLI 能查到。
  • 跨 Catalog SQL 必须用全限定名 catalog.database.table。

优点

  • 保证 Hive Metastore 只含有真实的 Hive 表,血缘、权限清晰。
  • 避免非 Hive connector 表污染 HiveCatalog。
  • 生产安全,结构清晰。

最佳实践建议

  • Kafka/HBase/Print 等 Source 表,严禁在 HiveCatalog 下创建!
  • 跨 Catalog 访问 Source,SQL 必须用全限定名 catalog.database.table
  • 团队协作时将此写法纳入开发规范。

示意图

text 复制代码
[default_catalog]      [HiveCatalog(myhive)]
    |   kafka_source          |   hive_sink
    |   (仅 Flink 可见)         |   (Hive 可见)
    |                        |
           insert ... select default_catalog.default_database.kafka_source
相关推荐
青云交33 分钟前
Java 大视界 -- Java+Flink CDC 构建实时数据同步系统:从 MySQL 到 Hive 全增量同步(443)
java·mysql·flink·实时数据同步·java+flink cdc·mysql→hive·全增量同步
Jackeyzhe12 小时前
Flink源码阅读:Task数据交互
flink
面向Google编程12 小时前
Flink源码阅读:Netty通信
大数据·flink
金刚猿18 小时前
工作流调度平台 Dolphinscheduler - Standalone 单机部署 + Flink 部署【kafka消息推送、flink 消费】
大数据·flink
杂家1 天前
Hudi集成Flink
大数据·flink·eclipse
CappuccinoRose2 天前
流计算概述
python·flink·流计算·数据流·pyflink
yumgpkpm2 天前
AI评判:信创替代对Cloudera CDH CDP Hadoop大数据平台有何影响?
大数据·hive·oracle·flink·kafka·hbase·cloudera
Hello.Reader2 天前
PyFlink 向量化 UDF(Vectorized UDF)Arrow 批传输原理、pandas 标量/聚合函数、配置与内存陷阱、五种写法一网打尽
python·flink·pandas
虫小宝2 天前
导购电商平台用户行为分析系统:基于Flink的实时数据处理架构
大数据·架构·flink
驾数者2 天前
Flink SQL格式集成:JSON、Avro、Protobuf序列化详解
sql·flink·json