【无标题】

背景

  • 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
相关推荐
大大大大晴天1 天前
Flink生产问题排障-Kryo serializer scala extensions are not available
大数据·flink
yumgpkpm5 天前
AI视频生成:Wan 2.2(阿里通义万相)在华为昇腾下的部署?
人工智能·hadoop·elasticsearch·zookeeper·flink·kafka·cloudera
后季暖5 天前
flink火焰图使用
大数据·flink
weixin_395448916 天前
cursor日志0224
eureka·flink·etcd
代码匠心6 天前
从零开始学Flink:Flink SQL 元数据持久化实战
大数据·flink·flink sql·大数据处理
Hello.Reader6 天前
Flink Metrics 实战自定义指标、系统指标、排障观测一把梭
大数据·flink
忙碌5446 天前
OpenTelemetry实战指南:构建云原生全链路可观测性体系
ios·flink·apache·iphone
大大大大晴天6 天前
Flink生产问题排障-HBaseSink超时
flink
weixin_395448916 天前
dataset.py_0224_cursor
eureka·flink·etcd