本文为自己翻译的译文,原文地址:https://cwiki.apache.org/confluence/display/Hive/LanguageManual+Types
Hive官方使用手册——数据类型
概述
这里列出了Hive中所有支持的数据类型。有关附加信息,请参阅教程中的类型系统。
对于HCatalog支持的数据类型,请参见:
数值型
TINYINT
(1-byte 有符号整型, 从-128
至127
)SMALLINT
(2-byte 有符号整型, 从-32,768
至32,767
)INT/INTEGER (4-byte 有符号整型, 从 -2,147,483,648 至 2,147,483,647)
BIGINT
(8-byte 有符号整型,从-9,223,372,036,854,775,808
至9,223,372,036,854,775,807
)FLOAT
(4-byte 单精度浮点数 )DOUBLE
(8-byte 双精度浮点数)DOUBLE PRECISION (DOUBLE的别名,从Hive 2.2.0开始提供支持)
DECIMAL
NUMERIC
(和DECIMAL
一样,从 Hive 3.0.0开始提供支持)
Date/Time 类型
String Types
Misc Types
BOOLEAN
BINARY
(注: 只是从Hive 0.8.0开始提供支持)
Complex Types
- arrays:
ARRAY<data_type>
(注: 从 Hive 0.14起允许负值和非常量表达式。) - maps:
MAP<primitive_type, data_type>
(注: 从 Hive 0.14起允许负值和非常量表达式。) - structs:
STRUCT<col_name : data_type [COMMENT col_comment], ...>
- union:
UNIONTYPE<data_type, data_type, ...>
(注: 只有从Hive 0.7.0开始可用。)
列类型
整数类型 (TINYINT
, SMALLINT
, INT/INTEGER
, BIGINT
)
默认情况下,整型文字被认为是INT型的,除非这个数字超过了INT的范围,在这种情况下,它被解释为BIGINT,或者如果在这个数字上出现了以下的后缀。
Type |
Postfix |
Example |
---|---|---|
TINYINT |
Y |
100Y |
SMALLINT |
S |
100S |
BIGINT |
L |
100L |
Version
INTEGER
is introduced as a synonym for INT
in Hive 2.2.0 (HIVE-14950).
Strings
字符串可以用单引号(')或双引号(')表示。Hive使用c样式在字符串中转义。
Varchar
Varchar类型创建时需要长度说明符(在1和65535之间),它定义了字符串中允许的最大字符数。如果一个字符串值被转换为varchar类型但是超过了长度说明符,那么字符串将自动被截断。字符长度是由字符串中包含的代码点的数量决定的。
跟字符串一样,尾部空格在varchar中非常重要,并且会影响比较结果。
局限性
非通用的UDF不能直接使用varchar类型作为输入参数或返回值。可以创建字符串UDF,varchar值将转换为字符串并传递给UDF。要直接使用varchar参数或返回varchar值,需要创建一个GenericUDF。
如果它们依赖基于反射的方法来检索类型信息,则可能存在其他不支持varchar的上下文。这包括一些SerDe实现。
Version
Varchar datatype was introduced in Hive 0.12.0 (HIVE-4844).
Char
Char类型与Varchar类似,但它们是固定长度的,这意味着比指定长度值短的部分是用空格填充的,因此在比较时,尾随空格并不重要。最大长度固定在255。
CREATE TABLE foo (bar CHAR(
10
))
|
Version
Char datatype was introduced in Hive 0.13.0 (HIVE-5191).
Timestamps
支持传统的UNIX时间戳和可选的纳秒精度。
支持的表示方式:
- 整型数字类型:以秒为单位解释为UNIX时间戳。
- 浮点数值类型:以秒为单位,以十进制精度解释为UNIX时间戳。
- 字符串:JDBC兼容java.sql.Timestamp格式 "
YYYY-MM-DD HH:MM:SS.fffffffff
" (9位小数精度)
时间戳实际是不被解释时间而是被存储为来自UNIX时代的偏移量。为转换时区提供方便的UDF(to_utc_timestamp
, from_utc_timestamp
)。
所有现有的datetime UDF(月、日、年、小时等)都使用TIMESTAMP
数据类型。
文本文件中的时间戳必须使用的格式为: yyyy-mm-dd hh:mm:ss[.f...]
。 如果它们是另一种格式,将它们声明为适当的类型(INT、FLOAT、STRING等),并使用UDF将它们转换为时间戳。
在表级别上,可以通过向SerDe属性“时间戳”提供格式来支持其他时间戳格式。格式”(as of release 1.2.0 with HIVE-9298)。例如, yyyy-MM-dd'T'HH:mm:ss.SSS,yyyy-MM-dd'T'HH:mm:ss.
Version
Timestamps were introduced in Hive