首页/新闻资讯/正文详情

Flink Hive 方言 CREATE 语句完全指南:数据库、表、视图、宏与函数

发布时间:2026/9/23 8:54:48 来源:云帆数科 栏目:资讯中心
Flink Hive 方言 CREATE 语句完全指南:数据库、表、视图、宏与函数
大数据流处理批处理数据工程【免费下载链接】flink项目地址https://gitcode.com/gh_mirrors/fli/flink点击查看免费下载本指南基于 Apache Flink 的 Hive 方言Hive Dialect能力系统讲解在使用 Hive 语法编写 SQL 时支持的 5 类 CREATE 语句CREATE DATABASE、CREATE TABLE、CREATE VIEW、CREATE MACRO与CREATE FUNCTION。你将掌握每类语句的完整语法、关键参数语义、与 Hive 原生语法的兼容边界并结合仓库源码与集成测试理解其底层实现与最佳实践从而在 Flink 与 Hive 之间无缝迁移建表/建库脚本。前置准备如何切换到 Hive 方言Hive 方言从 Flink 1.11.0 开始引入目的是让用户直接使用 Hive 语法编写 SQL改善与 Hive 的互操作性减少在 Flink 与 Hive 之间来回切换执行不同语句的成本。Flink 目前支持default与hive两种 SQL 方言且可以在会话中按语句动态切换无需重启会话详见 Hive 方言概览。在进入 CREATE 语句讲解之前先确认以下前提必须已添加 Hive 相关依赖参考 Hive connector 的 dependencies 章节确保当前 Catalog 是 HiveCatalog否则将回落到 Flink 默认方言强烈建议加载 HiveModule 并将其置于 Module 列表首位以便函数解析时优先使用 Hive 内置函数Hive 方言只支持db.table两级标识符不支持带 Catalog 名的标识符部分特性是否可用取决于实际使用的 Hive 版本例如更新数据库位置仅 Hive 2.4.0 支持Hive 方言主要面向批模式部分语法如 Sort/Cluster/Distribute By、Transform在流模式下尚未支持。三种设置方言的方式# SQL Client通过 table.sql-dialect 属性动态切换 Flink SQL SET table.sql-dialect hive; -- 使用 Hive 方言 [INFO] Session property has been set. Flink SQL SET table.sql-dialect default; -- 使用 Flink 默认方言 [INFO] Session property has been set.# 启动 HiveServer2 Endpoint 的 SQL Gateway 默认即 Hive 方言可直接使用 jdbc:hive2 SET table.sql-dialect default; -- 切回 Flink 默认方言 jdbc:hive2 SET table.sql-dialect hive; -- 切回 Hive 方言// Table API (Java)通过 TableConfig 设置方言 EnvironmentSettings settings EnvironmentSettings.inStreamingMode(); TableEnvironment tableEnv TableEnvironment.create(settings); tableEnv.getConfig().setSqlDialect(SqlDialect.HIVE); // 使用 Hive 方言 tableEnv.getConfig().setSqlDialect(SqlDialect.DEFAULT); // 使用默认方言# Table API (Python) from pyflink.table import * settings EnvironmentSettings.in_batch_mode() t_env TableEnvironment.create(settings) t_env.get_config().set_sql_dialect(SqlDialect.HIVE) t_env.get_config().set_sql_dialect(SqlDialect.DEFAULT)CREATE DATABASE功能说明CREATE DATABASE或等价的CREATE SCHEMA用于创建指定名称的数据库。语法CREATE (DATABASE|SCHEMA) [IF NOT EXISTS] database_name [COMMENT database_comment] [LOCATION hdfs_path] [WITH DBPROPERTIES (property_nameproperty_value, ...)];各子句语义IF NOT EXISTS目标数据库已存在时静默跳过不报错COMMENT为数据库添加注释LOCATION指定数据库在文件系统如 HDFS上的存储路径若不指定则落到 Hive 默认 warehouse 下WITH DBPROPERTIES为数据库附加键值对元数据可通过DESCRIBE DATABASE EXTENDED查看。示例CREATE DATABASE db1; CREATE DATABASE IF NOT EXISTS db1 COMMENT db1 LOCATION /user/hive/warehouse/db1 WITH DBPROPERTIES (nameexample-db);从源码实现看CREATE DATABASE属于 DDL 节点集合DDL_NODES中的TOK_CREATEDATABASE见 HiveParser.java其执行结果通过 HiveCatalog 写入 Hive Metastore。集成测试 HiveDialectITCase.testCreateDatabase 验证了create database db1 comment db1 comment后可通过hiveCatalog.getHiveDatabase(db1)读到注释LOCATION与DBPROPERTIES均被正确持久化locationUri与parameters.get(k1)与语句完全一致。CREATE TABLE功能说明CREATE TABLE用于在已有数据库中定义一张表包括管理表与外部表。注意Hive 方言目前不支持创建临时表。语法CREATE [EXTERNAL] TABLE [IF NOT EXISTS] [db_name.]table_name [(col_name data_type [column_constraint] [COMMENT col_comment], ... [table_constraint])] [COMMENT table_comment] [PARTITIONED BY (col_name data_type [COMMENT col_comment], ...)] [ [ROW FORMAT row_format] [STORED AS file_format] ] [LOCATION fs_path] [TBLPROPERTIES (property_nameproperty_value, ...)] [AS select_statment];支持的数据类型data_type : primitive_type | array_type | map_type | struct_type primitive_type : TINYINT | SMALLINT | INT | BIGINT | BOOLEAN | FLOAT | DOUBLE | DOUBLE PRECISION | STRING | BINARY | TIMESTAMP | DECIMAL | DECIMAL(precision, scale) | DATE | VARCHAR | CHAR array_type : ARRAY data_type struct_type : STRUCT col_name : data_type [COMMENT col_comment], ...其中map_type与array_type结构一致MAP key_type, value_type 、ARRAY data_type 支持与 Hive 相同的嵌套组合。行格式ROW FORMATrow_format: : DELIMITED [FIELDS TERMINATED BY char [ESCAPED BY char]] [COLLECTION ITEMS TERMINATED BY char] [MAP KEYS TERMINATED BY char] [LINES TERMINATED BY char] [NULL DEFINED AS char] | SERDE serde_name [WITH SERDEPROPERTIES (property_nameproperty_value, ...)]DELIMITED形式用于文本类分隔符配置字段分隔符FIELDS TERMINATED BY、转义字符ESCAPED BY、集合元素分隔符COLLECTION ITEMS TERMINATED BY、Map 键值分隔符MAP KEYS TERMINATED BY、行分隔符LINES TERMINATED BY以及空值表示NULL DEFINED ASSERDE形式直接指定 SerDe 类名并可通过WITH SERDEPROPERTIES传入 SerDe 参数。文件格式STORED ASfile_format: : SEQUENCEFILE | TEXTFILE | RCFILE | ORC | PARQUET | AVRO | INPUTFORMAT input_format_classname OUTPUTFORMAT output_format_classname内置支持SEQUENCEFILE、TEXTFILE、RCFILE、ORC、PARQUET、AVRO六种常见格式也可通过INPUTFORMAT ... OUTPUTFORMAT ...指定自定义的 InputFormat/OutputFormat 类。列约束与表约束column_constraint: : NOT NULL table_constraint: : [CONSTRAINT constraint_name] PRIMARY KEY (col_name, ...)示例-- 创建非分区表 CREATE TABLE t1(key string, value string); -- 创建分区表 CREATE TABLE pt1(key string, value string) PARTITIONED BY (year int, month int); -- 指定存储格式创建表 CREATE TABLE t1(key string, value string) STORED AS ORC; -- 指定行格式创建表自定义分隔符 CREATE TABLE t1(m MAPBIGINT, STRING) ROW FORMAT DELIMITED COLLECTION ITEMS TERMINATED BY ; MAP KEYS TERMINATED BY :; -- CTAS根据查询结果建表 CREATE TABLE t2 AS SELECT key, COUNT(1) FROM t1 GROUP BY key;源码与测试验证集成测试 HiveDialectITCase.testCreateTable 对上述各分支做了完整验证外部表CREATE EXTERNAL TABLE tbl1 ... LOCATION ... TBLPROPERTIES(k1v1)创建后Metastore 中表类型为EXTERNAL_TABLE分区键数量、Location、TBLPROPERTIES 均与语句一致存储格式STORED AS ORC会同时设置OrcSerde、OrcInputFormat与OrcOutputFormat自定义 SerDeROW FORMAT SERDE ...LazyBinarySerDe会写入对应serializationLib文本分隔符FIELDS TERMINATED BY |会同时写入 SerDe 参数的field.delim与serialization.formatLINES TERMINATED BY写入line.delimCOLLECTION ITEMS TERMINATED BY与MAP KEYS TERMINATED BY分别写入collection.delim与mapkey.delimIF NOT EXISTS重复执行建表不会覆盖已有表表创建时间不变约束在 Hive 3.1.0 上NOT NULL ... RELY会反映到 Flink Schema 的 nullable 属性NORELY则不会PRIMARY KEY (x) DISABLE RELY会被解析为带约束名的主键见 testCreateTableWithConstraintsCTASCREATE TABLE ... AS SELECT会依据查询结果的列名与类型建表且STORED AS指定的格式会被继承见 testCreateTableAs。CREATE VIEW功能说明CREATE VIEW创建指定名称的视图。若未显式提供列名视图列名将由 SELECT 表达式自动推导当 SELECT 包含未命名的标量表达式如x y时生成的列名为_C0、_C1等。重命名列时也可同时提供列注释注释不会自动从底层列继承。视图是纯逻辑对象不关联任何存储。查询引用视图时会先求值视图定义产生行集再交给外层查询继续处理。语法CREATE VIEW [IF NOT EXISTS] [db_name.]view_name [(column_name, ...) ] [COMMENT view_comment] [TBLPROPERTIES (property_name property_value, ...)] AS SELECT ...;示例CREATE VIEW IF NOT EXISTS v1 (key COMMENT key) COMMENT View for key1 AS SELECT key FROM src WHERE key 1;该示例创建视图v1显式声明列key并加注释视图本身带注释TBLPROPERTIES 可省略定义来自src表按key 1过滤后的结果。CREATE MACRO功能说明CREATE TEMPORARY MACRO使用给定的可选列列表作为表达式输入来创建一个宏。宏只存在于当前会话期间session 级别会话结束即失效。语法CREATE TEMPORARY MACRO macro_name([col_name col_type, ...]) expression;示例-- 无参宏 CREATE TEMPORARY MACRO fixed_number() 42; -- 单参数宏字符串长度加 2 CREATE TEMPORARY MACRO string_len_plus_two(x string) length(x) 2; -- 多参数宏 CREATE TEMPORARY MACRO simple_add (x int, y int) x y;在 HiveParser.java 中TOK_CREATEMACRO与TOK_DROPMACRO均被纳入 DDL 节点集合说明宏的创建/删除走的是 Hive 语法解析路径。同时测试代码还约束了宏命名的合法性宏名中不允许出现.字符见 HiveDialectITCase否则会抛出 CREATE TEMPORARY MACRO doesnt allow . character in the macro name 的错误。CREATE FUNCTION功能说明CREATE FUNCTION创建由指定类class_name实现的函数支持临时函数与永久函数两种形态并可通过USING JAR子句携带函数实现及其依赖的 Jar 包。语法创建临时函数函数仅存在于当前会话期间CREATE TEMPORARY FUNCTION function_name AS class_name [USING JAR file_uri];创建永久函数函数注册到 Metastore除非显式 DROP否则在所有会话中均存在CREATE FUNCTION [db_name.]function_name AS class_name [USING JAR file_uri];参数说明USING JAR file_uri该子句用于在创建函数时附带包含函数实现及其依赖的 Jar 包file_uri可以是本地文件路径也可以是分布式文件系统如 HDFS上的路径当函数在查询中被实际使用时Flink 会自动为远程 Jar 执行下载下载的 Jar 会在会话退出时被清理。示例-- 类 SimpleUdf 已存在于 classpath直接创建函数 CREATE FUNCTION simple_udf AS SimpleUdf; -- 类未在 classpath通过本地 Jar 提供实现 CREATE FUNCTION simple_udf AS SimpleUdf USING JAR /tmp/SimpleUdf.jar; -- 类未在 classpath通过 HDFS 远程 Jar 提供实现 CREATE FUNCTION simple_udf AS SimpleUdf USING JAR hdfs://namenode-host:port/path/SimpleUdf.jar;集成测试 testCreateFunctionUsingJar 验证了该流程的端到端可用性测试动态编译一个继承org.apache.hadoop.hive.ql.exec.UDF、实现evaluate(int)加一的 UDF 类打成 Jar然后分别用CREATE FUNCTION ... USING JAR与CREATE TEMPORARY FUNCTION ... USING JAR注册再通过SELECT add_one(x) FROM src查询结果正确返回[I[2], I[3]]证明 Jar 中的类在会话内可被正确加载与调用。底层实现Hive 方言的解析链路Hive 方言的解析器通过工厂机制注册到 Flink 的 Parser SPI 中。在 HiveParserFactory.java 中factoryIdentifier()返回SqlDialect.HIVE.name().toLowerCase()即hive与table.sql-dialect hive对应create(Context)将上下文强转为CalciteContext并构造HiveParser因为 Hive 解析器需要借助 CalciteContext 构建 Calcite 的 RelNode 逻辑计划。HiveParser内部维护了一个庞大的DDL_NODES集合见 HiveParser.java其中就包含本文涉及的TOK_CREATEDATABASE、TOK_CREATETABLE、TOK_CREATEVIEW、TOK_CREATEFUNCTION、TOK_CREATEMACRO等 Hive AST 节点。这从源码层面印证了Hive 方言并非在 Flink 默认语法之上做字符串替换而是直接复用 Hive 自带的语法解析器生成 AST再将其翻译为 Flink 的 Catalog 操作与逻辑计划从而最大程度保证与 Hive 语法的兼容性。相关语句速查掌握 CREATE 之后配套的 Hive 方言语句还包括ALTER 语句修改数据库、表、视图的属性/分区/SerDe 等DROP 语句删除数据库、表、视图、函数、宏SHOW 语句展示数据库、表、分区、函数等信息INSERT 语句 与 LOAD DATA 语句向 Hive 表写入或加载数据SET 语句配置 Hive 相关会话变量。结合 HiveDialectITCase.java 中 1300 余行覆盖建库、建表、约束、CTAS、INSERT/OVERWRITE、函数、宏等场景的集成测试可以确信在当前仓库所对应的 Flink 版本中上述 CREATE 语句族在批模式下已具备与 Hive 高度一致的语法与行为适合作为将 Hive 存量 DDL 迁移到 Flink 的可靠依据。赞分享大数据流处理批处理数据工程【免费下载链接】flink项目地址https://gitcode.com/gh_mirrors/fli/flink点击查看免费下载相关推荐Flink Hive 方言 DROP 语句完全指南数据库、表、视图、宏与函数的删除操作Flink Hive 方言 DROP 语句完全指南数据库、表、视图、宏与函数的删除操作 导读 本文系统讲解 Apache Flink 在启用 Hive 方言后大数据流处理批处理数据工程Flink Hive Dialect ALTER 语句完全指南数据库、表与视图的元数据变更实战Flink Hive Dialect ALTER 语句完全指南数据库、表与视图的元数据变更实战 本文是 Flink Hive Dialect 系列语法文档之一大数据流处理批处理数据工程Flink SQL DROP 语句完全指南删除 Catalog、表、数据库、视图与函数的语法与实现原理Flink SQL DROP 语句完全指南删除 Catalog、表、数据库、视图与函数的语法与实现原理 在 Flink Table SQL 编程体系中D大数据流处理批处理数据工程创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

相关推荐

Linux操作系统的基础IO
Linux操作系统的基础IO

目录系统文件IOopen函数0 & 1 & 2文件描述符的分配规则重定向输入重定向输出重定向追加重定向dup2FILE文件系统inode软硬链接软链接硬链接动态库和静态库动静态库的命名方式静态库制作一个库使用库动态库制作一个库使用库系统文件IO open函数 int open(const char *p… · 2026/9/23 8:54:47

Holoscan 与 HSB 传感器桥接模组:打通边缘实时 AI 感知的最后一公里
Holoscan 与 HSB 传感器桥接模组:打通边缘实时 AI 感知的最后一公里

导语医疗内镜、手术导航、工业在线检测、机器人感知 —— 这些场景对 AI 系统的要求早已不是 "能不能跑起来",而是 "能不能稳定、实时、低延迟地跑起来"。NVIDIA Holoscan 平台为这类任务关键型应用提供了全栈式的实时数据流处理能力&#xff0… · 2026/9/23 8:54:41

基于Java的教务系统开发指南:从权限模型到并发选课实战
基于Java的教务系统开发指南:从权限模型到并发选课实战

简介:这是一个基于Java的教务查询系统练手项目,使用SSM(SpringSpringMVCMybatis)整合开发,并引入Shiro安全框架、C3P0数据源、log4j日志及Bootstrap前端框架,适合初学Java后端、希望熟悉SSM整合流程的开发者… · 2026/9/23 8:54:41

预算有限的学生党如何用免费开源工具搭建编程开发环境?
预算有限的学生党如何用免费开源工具搭建编程开发环境?

这几年经常有大一新生跑来问我同一个问题:预算有限的情况下,编程开发软件到底该怎么选,是不是一定要咬牙买正版全家桶,或者直接用破解版?我的回答一直都很明确:你在学生阶段几乎找不到必须花钱才能解决核心… · 2026/9/23 14:33:20

2026最新什么是艺术:3个步骤解决看教程不会写项目的性能瓶颈
2026最新什么是艺术:3个步骤解决看教程不会写项目的性能瓶颈

2026最新什么是艺术:3个步骤解决看教程不会写项目的性能瓶颈 看了一堆教程还是不会写项目?这是很多开发者的常态。2026最新的技术栈变化太快,死记硬背代码片段根本行不通。真正的“什么是艺术”,不在于你背了多少API,而在于你能否识别性能瓶… · 2026/9/23 14:33:20

JY901九轴IMU校准算法详解:从零偏补偿到磁力计椭球拟合的完整实践
JY901九轴IMU校准算法详解:从零偏补偿到磁力计椭球拟合的完整实践

简介:这是针对JY901姿态传感器(兼容MPU9050/MPU9250)的校准算法说明文档,面向嵌入式开发与惯性导航应用人员,重点解决磁场与加速度零偏导致的姿态漂移问题。文档系统梳理了两条校准链路:磁场校准部分详细给… · 2026/9/23 14:33:20

2026最新继电器模块原理图解:3步搞懂底层逻辑
2026最新继电器模块原理图解:3步搞懂底层逻辑

2026最新继电器模块原理图解:3步搞懂底层逻辑 配置环境就卡半天,代码跑不通,日志一片红,这种抓狂感谁懂?很多学员在搞物联网项目时,一碰到硬件控制就头大,尤其是继电器模块,感觉就像个黑盒,通电就动,断电就停,中间到底发生了什么?在2026… · 2026/9/23 14:33:20

布隆过滤器与布谷鸟过滤器:原理、对比与应用
布隆过滤器与布谷鸟过滤器:原理、对比与应用

1. 过滤器技术的前世今生在计算机科学领域,空间效率和查询速度往往是一对矛盾体。当我们需要在海量数据中快速判断某个元素是否存在时,传统的数据结构如哈希表虽然准确,但内存消耗巨大;而直接遍历所有数据又会导致查询效率低下。这… · 2026/9/23 14:33:14

Python期末作业智能停车管理系统:从需求拆解到JSON持久化与flet界面完整指南
Python期末作业智能停车管理系统:从需求拆解到JSON持久化与flet界面完整指南

简介:一份用Python编写的智能停车管理系统模拟出入场项目,面向Python期末作业、课程设计或K12阶段进阶练习,可完整演示车辆入场、出场计费到信息持久化的过程。系统采用OpenCV实现车牌识别,结合YOLOOCR深度学习方案,利… · 2026/9/23 14:33:14

3招搞定手机怎么下载微信面试难题实战项目解析
3招搞定手机怎么下载微信面试难题实战项目解析

3招搞定手机怎么下载微信面试难题实战项目解析 面试被问“手机怎么下载微信”背后的原理,90%的人答不上来。别笑,这看似弱智的问题,实则是考察你对移动应用分发机制、安全校验及网络协议理解的试金石。我带过不少校招新人,他们背了八股文,却连一个A… · 2026/9/23 0:00:03

你有新短消息请注意查收:3个新手避坑指南搞定消息系统选型
你有新短消息请注意查收:3个新手避坑指南搞定消息系统选型

你有新短消息请注意查收:3个新手避坑指南搞定消息系统选型 面试被问“高并发下如何保证消息不丢失”,你张口就是“用Redis”,结果面试官追问“如果Redis宕机了怎么办”,你瞬间卡壳。这种场景太常见了,很多新手在背八股文时,只记住了技术名词… · 2026/9/23 0:00:29

Win7无线热点配置工具源码解析:解决API失效的3个实战技巧
Win7无线热点配置工具源码解析:解决API失效的3个实战技巧

Win7无线热点配置工具源码解析:解决API失效的3个实战技巧 Win7无线热点配置工具在Win10/11上跑不动?不是你的问题,是版本升级后 API 全变了。很多老项目里的 netsh wlan… · 2026/9/23 0:00:36

了解更多?预约专属演示

我们的顾问将为您一对一讲解产品与方案

企业微信二维码