- Connectors
- Table & SQL Connectors
- Hive
- Hive 方言
Hive 方言
本文档是 Apache Flink 的旧版本。建议访问 最新的稳定版本。
从 1.11.0 开始,在使用 Hive 方言时,Flink 允许用户用 Hive 语法来编写 SQL 语句。通过提供与 Hive 语法的兼容性,我们旨在改善与 Hive 的互操作性,并减少用户需要在 Flink 和 Hive 之间切换来执行不同语句的情况。
使用 Hive 方言
Flink 目前支持两种 SQL 方言: default
和 hive
。你需要先切换到 Hive 方言,然后才能使用 Hive 语法编写。下面介绍如何使用 SQL 客户端和 Table API 设置方言。
还要注意,你可以为执行的每个语句动态切换方言。无需重新启动会话即可使用其他方言。
SQL 客户端
SQL 方言可以通过 table.sql-dialect
属性指定。因此你可以通过 SQL 客户端 yaml 文件中的 configuration
部分来设置初始方言。
你同样可以在 SQL 客户端启动后设置方言。
Table API
你可以使用 Table API 为 TableEnvironment 设置方言。
DDL
本章节列出了 Hive 方言支持的 DDL 语句。我们主要关注语法。你可以参考 Hive 文档
了解每个 DDL 语句的语义。
CATALOG
Show
DATABASE
Show
Create
Alter
Update Properties
Update Owner
Update Location
Drop
Use
TABLE
Show
Create
Alter
Rename
Update Properties
Update Location
如果指定了 partition_spec
,那么必须完整,即具有所有分区列的值。如果指定了,该操作将作用在对应分区上而不是表上。
如果指定了 partition_spec
,那么必须完整,即具有所有分区列的值。如果指定了,该操作将作用在对应分区上而不是表上。
Update SerDe Properties
如果指定了 partition_spec
,那么必须完整,即具有所有分区列的值。如果指定了,该操作将作用在对应分区上而不是表上。
Add Partitions
Drop Partitions
Add/Replace Columns
Change Column
Drop
VIEW
Create
Alter
注意: 变更视图只在 Table API 中有效,SQL 客户端不支持。
Rename
Update Properties
Update As Select
Drop
FUNCTION
Show
Create
Drop
DML
INSERT
如果指定了 partition_spec
,可以是完整或者部分分区列。如果是部分指定,则可以省略动态分区的列名。
DQL
目前,对于DQL语句 Hive 方言和 Flink SQL 支持的语法相同。有关更多详细信息,请参考Flink SQL 查询。并且建议切换到 default
方言来执行 DQL 语句。
注意
以下是使用 Hive 方言的一些注意事项。
- Hive 方言只能用于操作 Hive 表,不能用于一般表。Hive 方言应与HiveCatalog一起使用。
- 虽然所有 Hive 版本支持相同的语法,但是一些特定的功能是否可用仍取决于你使用的Hive 版本。例如,更新数据库位置
只在 Hive-2.4.0 或更高版本支持。
- Hive 和 Calcite 有不同的保留关键字集合。例如,
default
是 Calcite 的保留关键字,却不是 Hive 的保留关键字。即使使用 Hive 方言, 也必须使用反引号 ( ` ) 引用此类关键字才能将其用作标识符。
- 由于扩展的查询语句的不兼容性,在 Flink 中创建的视图是不能在 Hive 中查询的。