原始类型
TINYINT
1byte的长度,通过后缀Y声明,如:13Y。
SMALLINT
2byte长度,通过后缀S声明,如14S。
INT
4byte长度,普通数字默认为INT
FLOAT
4byte单精度浮点数
DOUBLE
8byte双精度浮点数
DECIMAL
可指定精度的浮点数,默认精度为decimal(10,0)
BINARY
二进制数据
BOOLEAN
取值TRUE或FALSE
STRING
字符串类型,最大容量2G
CHAR
字符类型,最大长度255
VARCHAR
变长类型的CHAR,最大长度65535
DATE
日期类型,格式:YYYY-MM-DD
TIMESTAMP
时间戳类型,格式:YYYY-MM-DD HH:MM:SS[.fff]
复合类型
ARRAY
数组类型,包含一系列统一类型的数据,如:[‘apple’,’juice’],可以通过index来访问。
MAP
映射表的类型,通过key来访问value,如:{1:”apple”,2:”juice”},fruit[1]=”apple”
STRUCT
用户自定义类型,同MAP类型类似,如:{1,“apple”},默认第一列为col1,依次递增
NAMED STRUCT
指定Name的Struct结构,通过Name直接访问value,如:{“apple”:“gala”},fruit.apple=”gala”
UNION
可以组合上述的任何数据类型,如:{123:[“man”,”women”]}
建表语句
CREATE TABLE table_test
(
col1 string,/*列名 列类型*/
col2 ARRAY<string>,
col3 STRUCT<name1:int,name2:string,name3:float>,
col4 MAP<string,int>
)
ROW FORMAT DELIMITED
FIELDS TERMINATED BY '|'/*指定每一行字段之间的分隔符*/
COLLECTIONS ITEMS TERMINATED BY ','/*指定数组元素的分隔符*/
MAP KEYS TERMINATED BY ':';/*指定MAP中Key和Value的分隔符*/
新建数据库后,hive会为每个数据库建立一个文件夹,文件夹的默认位置在:/user/hive/warehouse.
分区(partition)
默认情况下,一个简单的查询会扫描整个表文件,当表中的数据非常大的时候,会导致查询的效率较低.通过分区(partition)的方式,减少每次查询扫描的文件大小.
建立分区
CREATE TABLE ...
PARTITIONED BY (year INT,month INT) /*建立表分区,指定分区字段*/
ROW FORMAT DELIMITED ...
/*在表中增加分区*/
ALTER TABLE table_name ADD
PARTITION (year=2015,month=1)
PARTITION (year=2015,month=2)
/*显示partition信息*/
SHOW PARTITIONS table_name;
删除分区
ALTER TABLE table_name
DROP IF EXISTS PARTITION (year=2015,month=1);
载入分区数据
LOAD DATA LOCAL INPATH
'/path/to/file'
OVERWRITE INTO TABLE table_name
PARTITION (year=2015,month=1);
桶(bucket)
bucket是除了分区外的另外一种拆散表数据的方式.建表时,我们可以指定根据哪些字段分bucket和bucket的总数量.在实际使用中,推荐每个bucket的数据大小为HDFS block size的2*N倍.
/*在建表语句中,增加下列信息*/
CLUSTERED BY (bucket_field) INTO 2 BUCKETS