资讯详情

Flink Hive 方言 SHOW 语句完全指南:DATABASES / TABLES / VIEWS / PARTITIONS / FUNCTIONS

📅 2026/9/21 18:17:42 | 华诺云谱 👁 阅读
Flink Hive 方言 SHOW 语句完全指南:DATABASES / TABLES / VIEWS / PARTITIONS / FUNCTIONS
Flink Hive 方言 SHOW 语句完全指南DATABASES / TABLES / VIEWS / PARTITIONS / FUNCTIONS【免费下载链接】flink项目地址: https://gitcode.com/gh_mirrors/fli/flink在 Flink 的 Hive 方言Hive Dialect模式下用户可以完全使用 Hive 语法编写 SQL其中元数据查询类语句的兼容性是迁移存量 Hive 作业到 Flink场景中最常被用到的一环。本文以 Flink 官方文档 Hive 方言 SHOW 语句 为核心骨架系统讲解 Hive 方言下支持的SHOW DATABASES、SHOW TABLES、SHOW VIEWS、SHOW PARTITIONS、SHOW FUNCTIONS五种语句的语法、语义与典型用法并结合本仓库 SQL 解析器flink-sql-parser与 Planner 测试源码深入剖析这些语句在 Flink 内部是如何被解析与执行的。读完本文你将能够在 Flink 中无缝使用 Hive 风格的 SHOW 语句完成元数据浏览并理解其与 Flink 默认方言行为的差异。背景Hive 方言中的元数据查询支持从 Flink 1.11.0 开始Flink 允许用户在 Hive 方言模式下用 Hive 语法编写 SQL目标是改善与 Hive 的互操作性减少用户在 Flink 与 Hive 之间来回切换执行语句的成本详见 Hive 方言概览。当前 Flink 支持default与hive两种 SQL 方言其中default是 Flink 原生方言。在 Hive 方言下目前支持的 SHOW 语句有SHOW DATABASESSHOW TABLESSHOW VIEWSSHOW PARTITIONSSHOW FUNCTIONS这些语句与 Hive 本身的语义保持一致用于从当前关联的 Metastore即 HiveCatalog中列出数据库、表、视图、分区和函数等元数据。使用前提如何切换到 Hive 方言要使用 Hive 方言编写 SHOW 语句需要先满足以下前置条件添加 Hive 相关依赖必须将 Hive 依赖加入 classpath具体依赖清单参考 Hive 连接器文档 中的 dependencies 一节。当前 Catalog 必须是 HiveCatalog否则将使用 Flink 的默认方言。在启动了 HiveServer2 Endpoint 的 SQL Gateway 中默认当前 Catalog 就是 HiveCatalog。建议优先加载 HiveModule将 HiveModule 放在 Module 列表首位以便函数解析时优先使用 Hive 内置函数这对SHOW FUNCTIONS的结果集合有直接影响。标识符限制Hive 方言只支持db.table这种两级标识符不支持带 Catalog 名字的标识符。运行模式Hive 方言主要在批模式下使用某些 Hive 语法如 Sort/Cluster/Distributed 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.SQL GatewayHiveServer2 Endpoint默认即为 Hive 方言无需手动切换如需使用默认方言再手动切换# 假设已经通过 beeline 连接上了 SQL Gateway jdbc:hive2 SET table.sql-dialect default; -- 使用 Flink 默认方言 jdbc:hive2 SET table.sql-dialect hive; -- 使用 Hive 方言Table API通过TableEnvironment的配置项设置EnvironmentSettings settings EnvironmentSettings.inStreamingMode(); TableEnvironment tableEnv TableEnvironment.create(settings); // to use hive dialect tableEnv.getConfig().setSqlDialect(SqlDialect.HIVE); // to use default dialect tableEnv.getConfig().setSqlDialect(SqlDialect.DEFAULT);从源码层面看table.sql-dialect这一配置项定义于 TableConfigOptions.java其默认值为default取值目前仅支持default与hive两种文档描述为The SQL dialect defines how to parse a SQL query. A different SQL dialect may support different SQL grammar.。这也解释了为什么只有切换到hive方言后Hive 风格的 SHOW 语句才可用。SHOW DATABASES列出 Metastore 中所有数据库描述SHOW DATABASES用于列出当前 MetastoreHiveCatalog 对应的 Hive Metastore中定义的所有数据库。语法SHOW (DATABASES|SCHEMAS);其中SCHEMA与DATABASE可以互换使用含义完全相同——这与 Hive 原生行为一致SHOW SCHEMAS是SHOW DATABASES的别名写法。该语句在 flink-sql-parser 的语法规则 中对应SqlShowDatabases()解析函数并额外支持FROM/IN catalog_name、LIKE等扩展语法parserImpls.ftl第 204-249 行可返回带 catalog 与过滤条件的SqlShowDatabases节点。使用示例-- 列出所有数据库两条语句等价 SHOW DATABASES; SHOW SCHEMAS;SHOW TABLES列出当前数据库中的表与视图描述SHOW TABLES列出当前数据库中的所有基础表base tables和视图views。注意这里的当前指的是当前会话/环境中选定的数据库USE database_name之后所指向的库与 Hive 的行为一致。语法SHOW TABLES;在 Flink 默认方言中SHOW TABLES还支持FROM/IN db、[NOT] LIKE pattern等扩展参见 SqlShowTables 解析规则 与 TableEnvironmentTest.scala 中的测试例如SHOW TABLES FROM catalog1.db1 like p_r%在 Hive 方言下则严格遵循 Hive 的SHOW TABLES;语义。SHOW VIEWS列出当前数据库中的所有视图描述SHOW VIEWS列出当前数据库中的所有视图views。与SHOW TABLES的区别在于它只返回视图不包含基础表。语法SHOW VIEWS;在解析层面该语句对应parserImpls.ftl中的SqlShowViews()规则第 631-638 行直接构造SqlShowViews语法节点不带过滤条件。SHOW PARTITIONS列出表的分区信息SHOW PARTITIONS是五种 SHOW 语句中语法最丰富、参数最复杂的一个也是 Hive 表尤其是分区表运维中最常用的元数据查询语句。描述SHOW PARTITIONS用于列出指定基础表的所有已存在分区或者在指定了 partition spec分区规格时列出与给定分区规格匹配的分区。语法SHOW PARTITIONS table_name [ partition_spec ]; partition_spec: : (partition_column partition_col_value, partition_column partition_col_value, ...)参数说明partition_specpartition_spec是可选参数用于限定返回的分区范围不指定返回该表的全部分区。完整指定为所有分区列都给出取值此时返回与该完整规格精确匹配的分区实际上相当于确认该分区是否存在。部分指定partial只需为部分分区列给出取值返回所有满足这些约束的分区。这在按年份、月份等维度下钻浏览分区时非常实用。示例-- 列出 t1 的全部分区 SHOW PARTITIONS t1; -- 指定完整分区规格列出精确匹配的分区 SHOW PARTITIONS t1 PARTITION (year 2022, month 12); -- 指定部分分区规格列出所有满足 year 2022 的分区不论 month 取值 SHOW PARTITIONS t1 PARTITION (year 2022);源码实现在 SqlShowPartitions.java 中SHOW PARTITIONS被建模为一个SqlSpecialOperator(SHOW PARTITIONS, SqlKind.OTHER)类型的 SqlCall其两个操作数分别是tableIdentifier目标表名必填不允许为 nullpartitionSpecSqlNodeList类型的分区规格可空即语法中[ partition_spec ]部分。在unparseSQL 还原阶段当 partition spec 非空时会以PARTITION (...)关键字形式输出。语法解析规则位于 parserImpls.ftl 第 2538-2553 行负责将PARTITION (colvalue, ...)解析为分区键值对列表。测试验证Planner 侧的单元测试 SqlOtherOperationConverterTest.java 验证了SHOW PARTITIONS的解析与转换行为operation parse(show partitions tbl); // asSummaryString() SHOW PARTITIONS builtin.default.tbl operation parse(show partitions tbl partition (dt2020-04-30 01:02:03)); // asSummaryString() SHOW PARTITIONS builtin.default.tbl PARTITION (dt2020-04-30 01:02:03)从测试断言可以看到SHOW PARTITIONS tbl最终会被转换为带完整 catalog 三元组builtin.default.tbl的ShowPartitionsOperation且分区值2020-04-30 01:02:03会被保留在 partition spec 中。这说明在解析后Flink 会将该语句统一规整为catalog.database.table形式的操作对象便于后续按 catalog 体系路由执行。SHOW FUNCTIONS列出用户自定义与内置函数描述SHOW FUNCTIONS用于列出所有的用户自定义函数UDF与内置函数built-in functions。语法SHOW FUNCTIONS;在 Hive 方言 HiveModule 的组合下该语句返回的函数集合会包含 Hive 的内置函数前提是按照前文前置条件将 HiveModule 加载到 Module 列表首位。解析规则见 SqlShowFunctions同样支持requireUser仅用户自定义函数、FROM/IN database、LIKE等扩展变体。执行链路与更多 SHOW 变体从执行链路看Hive 方言下的 SHOW 语句与 Flink 默认方言共用同一套解析 → 转换 → 执行管线解析由 flink-sql-parser 模块基于 Calcite 生成的FlinkSqlParserImpl完成Hive 方言与默认方言的语法差异体现在 parserImpls.ftl 中的不同解析规则分支转换SqlNodeToOperationConversion将SqlShowDatabases、SqlShowTables、SqlShowViews、SqlShowPartitions、SqlShowFunctions等语法节点分别转换为ShowDatabasesOperation、ShowTablesOperation、ShowViewsOperation、ShowPartitionsOperation、ShowFunctionsOperation这些 Operation 类定义于 flink-table-api-java 的 operations 包执行由TableEnvironmentImpl.executeSql根据 Operation 类型分派到对应的元数据查询逻辑最终从当前 CatalogHive 方言下为 HiveCatalog读取元数据并返回TableResult。另外需要说明的是Flink 默认方言本身也支持SHOW CREATE TABLE、SHOW CURRENT CATALOG、SHOW CURRENT DATABASE、SHOW MODULES、SHOW JARS等更丰富的 SHOW 变体相关测试见 SqlOtherOperationConverterTest 与 ParserImplTest而本文所述的SHOW DATABASES/TABLES/VIEWS/PARTITIONS/FUNCTIONS五种语句则是 Hive 方言明确支持、与 Hive 原生语法对齐的集合。在使用时请根据当前方言选择对应的语法子集。小结与延伸阅读在 Hive 方言下SHOW DATABASES、SHOW TABLES、SHOW VIEWS、SHOW PARTITIONS、SHOW FUNCTIONS五条语句完整覆盖了日常开发中最常见的元数据浏览需求其中SHOW PARTITIONS的 partition spec支持部分指定是最具 Hive 特色的能力。其底层由 flink-sql-parser 的解析规则与 flink-table-api 的 Operation 体系共同支撑与 Flink 默认方言复用同一执行框架仅在语法语义上向 Hive 对齐。若希望进一步了解 Hive 方言下的其他语句可继续阅读本目录下的系列文档CREATE 语句、ALTER 语句、DROP 语句、INSERT 语句、LOAD DATA 语句 以及 SET 语句配合 Hive 方言概览 可全面掌握 Hive 语法在 Flink 中的使用边界。【免费下载链接】flink项目地址: https://gitcode.com/gh_mirrors/fli/flink创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
📝

华诺云谱内容团队

资深建站顾问 · 行业研究员

10年+企业数字化服务经验,专注智能建站、SEO优化与品牌营销,持续输出建站技巧、行业洞察与营销干货,已帮助5000+企业实现数字化增长。

你可能需要的服务

订阅华诺云谱资讯周报

每周一封,精选建站技巧、SEO与营销干货,直达邮箱。已有 8,000+ 企业主订阅,助你少走弯路。