基本数据类型
因为这些基本的数据类型都是 java 中的接口进行实现的,因此与 java 中数据类型是基本一致的:
数据类型的隐式转换
Hive 中基本数据类型遵循以下层次结构,按 照这个层次结构,子类型到祖先类型允许隐式转换。
数据类型的显示转换
使用cast函数进行强制类型转换,若强制类型转换失败,返回NULL
hive> select cast('1111s' as int);
OK
NULL
hive> select cast('1111' as int);
OK
1111
集合数据类型
包括:array,map,struct,union
hive > select array(1,2,3);
[1,2,3]
-- 使用[]访问数组元素
hive > select arrp[0] from (select array(1,2,3) arr) tmp;
-- 使用[]访问map元素,若不存在返回NULL
hive > select mymap['1'] from (select map('a', 1, 'b', 2, 'c', 3) as mymap) tmp;
-- 给struct中的字段命名
hive> select named_struct("name", "username1", "id", 7, "salary", 12880.68);
OK{
"name":"username1","id":7,"salary":12880.68}
-- 使用 列名.字段名 访问具体信息
hive> select userinfo.id
> from (select named_struct("name", "username1", "id", 7, "salary", 12880.68) userinfo) tmp;
-- union 数据类型
hive> select create_union(0, "zhansan", 19, 8000.88) uinfo;
Hive默认分隔符
字段之间:^A 用于分隔字段
元素之间: ^B 用于分隔 ARRAY、MAP、STRUCT 中的元素
key-value之间:^C Map中 key、value之间的分隔符
hive中没有定义专门的数据格式,可以由用户指定。
用户定义数据格式需要指定三个属性:
- 列分隔符:"\t"
- 行分隔符:"\n"
- 读取文件数据的方式
注意:
记载数据过程中,hive不会对数据本身进行修改,只是将数据内容复制或移动到相应的HDFS目录
Hive数据导出到本地时,系统默认分隔符是是A、B、^C 这些特殊字符,使用cat 或者 vim 并不会看到,但可以使用cat -A file.dat
DDL(data definition language)命令
建表语句
-- 创建数据库。添加备注,指定数据库在存放位置
hive (default)> create database if not exists mydb2
comment 'this is mydb2' location '/user/hive/mydb2.db';
查看数据库
-- 查看所有数据库
show databases;
-- 查看数据库信息
desc database mydb2;
desc database extended mydb2;
describe database extended mydb2;
使用数据库
use mydb;
删除数据库
-- 删除一个空数据库
drop database databasename;
-- 如果数据库不为空,使用 cascade 强制删除
drop database databasename cascade;
建表语法
create [external] table [IF NOT EXISTS] table_name
[(colName colType [comment 'comment'], ...)]
[comment table_comment]
[partition by (colName colType [comment col_comment], ...)] [clustered BY (colName, colName, ...)
[sorted by (col_name [ASC|DESC], ...)] into num_buckets buckets]
[row format row_format] [stored as file_format]
[LOCATION hdfs_path]
[TBLPROPERTIES (property_name=property_value, .