【Hive】数据类型
1.基本类型
整型:tinyint / samllint / int / bigint
浮点型:float / double / Decimals
布尔型:boolean
字符串:string / varchar / char
注意:默认情况下,整数型为INT型,当数字大于INT型的范围时,会自动解释执行为BIGINT,或者使用以下后缀进行说明。TINYINT - Y ,SMALLINT - S,BIGINT - L
Decimal用于表示任意精度的小数类型,且支持科学计数法和非科学计数法。
示例:CREATE TABLE foo (
a DECIMAL, – Defaults to decimal(10,0) //设置默认值
b DECIMAL(9, 7)
)
Varchar类型使用长度说明符(介于1和65355之间)创建,它定义字符串中允许的最大字符数。
Char字符类型与Varchar类似,但它们是固定长度的,意味着比指定长度值短的值用空格填充。
vname varchar(20),cname char(20) vname不够20字符不用空格填充,name用。
2.时间类型
(1)Timestamps
支持传统的UNIX时间戳和可选的纳秒精度。
- 支持的转化:
- 整数数字类型:以秒为单位解释为UNIX时间戳
- 浮点数值类型:以秒为单位解释为UNIX时间戳,带小数精度
- 字符串:符合JDBC java.sql.Timestamp格式“YYYY-MM-DD HH:MM:SS.fffffffff”(9位小数位精度)
时间戳被解释为无时间的,并被存储为从Unix纪元的偏移量。 提供了用于转换到和从时区转换的便捷UDFs(to_utc_timestamp,from_utc_timestamp)。
所有现有的日期时间UDFs(月,日,年,小时等)都使用TIMESTAMP数据类型。
Text files中的时间戳必须使用格式yyyy-mm-dd hh:mm:ss [.f …]。 如果它们是另一种格式,请将它们声明为适当的类型(INT,FLOAT,STRING等),并使用UDF将它们转换为时间戳。
在表级别上,可以通过向SerDe属性”timestamp.formats”(自版本1.2.0 with HIVE-9298)提供格式来支持备选时间戳格式。 例如,yyyy-MM-dd’T’HH:mm:ss.SSS,yyyy-MM-dd’T’HH:mm:ss。
(2)Dates
DATE值描述特定的年/月/日,格式为YYYY-MM-DD。 例如,DATE’2013-01-01’。 日期类型没有时间组件。 Date类型支持的值范围是0000-01-01到9999-12-31,这取决于Java Date类型的原始支持。
Date types只能在Date, Timestamp, or String types之间转换。
(3)Intervals
时间间隔。
3.复杂数据类型
Array
Map
Struct
示例
Array:
create table student(
sid int, sname string, grade array<float>); desc student; {1,Tom,[99,100,98]}
Map:
create table student2(
sid int, sname string, grade map<string,float>); desc student2; {1,Tom,<'math',100>}
Combine:
create table student3(
sid int, sname string, grade array<map<string,float>>); desc student3; {1,Tom,[<'math',100>,<'english',100>]}
Struct:
create table student4(
sid int, info struct<name:string,age:int,sex:string>) desc student4; {1,{'Tom', 10, 'boy'}}