网站首页 > 精选文章 / 正文
Impala 的 SQL 语法遵循 SQL-92 标准,并在内置函数等领域包含许多行业扩展。有关将 SQL 代码从各种数据库系统调整到 Impala的一般讨论,请参阅将 SQL 从其他数据库系统移植到 Impala。
由于 Impala 和 Hive 共享相同的元存储数据库,并且它们的表通常可以互换使用,因此以下部分详细介绍了 Impala 和 Hive 之间的差异。
Impala 中不提供 HiveQL 功能
当前版本的 Impala 不支持您可能在 HiveQL 中熟悉的以下 SQL 功能:
- 可扩展性机制,例如TRANSFORM自定义文件格式或自定义 SerDes。
- 数据DATE类型。
- XML 函数。
- HiveQL 中的某些聚合函数:covar_pop, covar_samp, corr, percentile, percentile_approx, histogram_numeric, collect_set; Impala 支持Impala聚合函数 中列出的聚合函数集和Impala 分析函数中列出的分析函数。
- 采样。
- 横向视图。在Impala 2.3及更高版本中,Impala 支持使用连接表示法而不是关键字对复杂类型( STRUCT、ARRAY或)进行查询。有关 Impala 对复杂类型支持的详细信息, 请参阅复杂类型(仅限 Impala 2.3 或更高版本) 。MAPEXPLODE()
从 Impala 1.2 开始支持用户定义函数 (UDF)。 有关 Impala UDF 的完整详细信息, 请参阅用户定义函数 (UDF) 。
- Impala 支持用 C++ 编写的高性能 UDF,以及重用一些基于 Java 的 Hive UDF。
- Impala 支持标量 UDF 和用户定义的聚合函数 (UDAF)。Impala 目前不支持用户定义的表生成函数 (UDTF)。
- 基于 Java 的 UDF 仅支持 Impala 支持的列类型。
- current_user()无法通过 Impala 从 Java UDF 调用 Hive函数。
Impala 目前不支持以下 HiveQL 语句:
- ANALYZE TABLE(Impala 的等价物是COMPUTE STATS)
- DESCRIBE COLUMN
- DESCRIBE DATABASE
- EXPORT TABLE
- IMPORT TABLE
- SHOW TABLE EXTENDED
- SHOW TBLPROPERTIES
- SHOW INDEXES
- SHOW COLUMNS
- INSERT OVERWRITE DIRECTORY; 使用 或将查询结果具体化到与 Impala 表关联的 HDFS 目录中。 INSERT OVERWRITE table_nameCREATE TABLE AS SELECT
Impala 仅尊重serialization.null.formatTEXT 表的表属性,并忽略 Parquet 和其他格式的属性。Hive 尊重serialization.null.format Parquet 和其他格式的属性,并在扫描期间将匹配值转换为 NULL。有关在 Impala 中使用表属性的信息, 请参阅将文本数据文件与 Impala 表一起使用。
Impala 和 HiveQL 功能之间的语义差异
本节介绍 Impala 和 Hive 具有相似功能的实例,有时包括相同的语法,但这些功能的运行时语义存在差异。
安全:
Impala 利用Apache Ranger授权框架,该框架提供基于角色的细粒度访问控制,以保护数据免遭未经授权的访问或篡改。
Hive 组件现在包括启用 Ranger 的GRANT、 REVOKE和CREATE/DROP ROLE语句。早期的 Hive 版本有一个特权系统GRANT和REVOKE语句,主要目的是防止意外删除数据,而不是防止恶意用户的安全机制。
Impala 可以利用通过 HiveGRANT和REVOKE语句设置的权限。Impala 在 Impala 2.0 及更高版本中有自己的GRANT声明REVOKE。有关 Impala 中授权的详细信息, 请参阅Impala 授权。
SQL 语句和子句:
在某些情况下,Impala SQL 语句的语义与 HiveQL 有所不同,它们使用相似的 SQL 语句和子句名称:
- Impala 对查询提示使用不同的语法和名称,[SHUFFLE]而 [NOSHUFFLE]不是MapJoinor StreamJoin。有关 Impala 详细信息, 请参阅 Impala SELECT 语句中的连接。
- Impala 不公开SORT BY、DISTRIBUTE BY或的 MapReduce 特定功能CLUSTER BY。
- Impala 不要求查询包含FROM子句。
数据类型:
- Impala 支持一组有限的隐式转换。这有助于避免意外的转换行为产生不良结果。
- Impala 不会在字符串和数字或布尔类型之间隐式转换。始终用于CAST()这些转换。
- 当从较小或不太精确的类型转换为较大或更精确的类型时,Impala 确实会在数字类型之间执行隐式转换。例如,Impala 会隐式将 a 转换 SMALLINT为 a BIGINTor FLOAT,但从 to 转换 DOUBLE为FLOATor INTto需要在查询中TINYINT调用。CAST()
- Impala 确实执行从字符串到时间戳的隐式转换。TIMESTAMPImpala 对数据类型和 格式字符串有一组有限的文字格式 from_unixtime();有关详细信息,请参阅TIMESTAMP 数据类型。
- 有关每种数据类型的隐式和显式转换的完整详细信息,请参阅数据类型下的主题,有关函数的详细信息,请参阅 Impala 类型转换函数CAST()。
- Impala 不会使用本地时区存储或解释时间戳,以避免意外时区问题导致出现不良结果。时间戳是相对于 UTC 存储和解释的。对于 Impala 和 Hive 之间类似命名的日期/时间函数的某些调用,这种差异可能会产生不同的结果。有关 Impala 函数的详细信息,请参阅Impala 日期和时间函数。请参阅TIMESTAMP 数据类型TIMESTAMP,了解 Impala 如何处理时区的讨论,以及在处理 Parquet 编码数据或在本地时区和 UTC 之间进行转换时, 可用于使 Impala 更紧密地匹配 Hive 行为的配置选项。
- ImpalaTIMESTAMP类型可以表示从 1400-01-01 到 9999-12-31 的日期范围。这与 Hive 日期范围不同,Hive 日期范围为 0000-01-01 到 9999-12-31。
- Impala 不会将列溢出返回为NULL,以便客户可以区分NULL数据和溢出条件,就像在传统数据库系统中所做的那样。Impala 返回该类型范围内的最大值或最小值。例如,有效值 tinyint范围为 -128 到 127。在 Impala 中,tinyint 值为 -200 的 a 返回 -128 而不是NULL。tinyint值为 200 的 A 返回 127。
其他功能:
- Impala 不提供虚拟列。
- Impala 不公开锁定。
- Impala 不公开某些配置属性。
Tags:show columns
猜你喜欢
- 2025-01-12 c#设计一个文件夹加密软件
- 2025-01-12 查询 MySQL 字段注释的 5 种方法
- 2025-01-12 SQL SERVER 2014如何跟踪程序执行哪些SQL语句
- 2025-01-12 部署Enterprise Architect生成的SQL语句
- 2025-01-12 14 个 SQL 拿来就用语句实例!
- 2025-01-12 mysql1366错误:字符集冲突导致插入数据异常,解决方案
- 2025-01-12 Doris语法笔记
- 2025-01-12 12.3 PyQt5表格介绍【树控件】-QTreeWidget
- 2025-01-12 MySQL 常用脚本
- 2025-01-12 MYSQL中数据库服务器、连接、数据库、表、字段的字符编码