1、变量和属性
hive中有四个命名空间来存储变量和属性。
hivevar -> 用户自定义变量
hiveconf -> hive相关配置属性
system -> java程序中的配置属性
env -> shell环境中的变量
设置变量
hive>set hivevar:test=aaa;
读取变量
hive>set hivevar:foo=bar;
hivecar:test=bar
或者
hive>set foo;
test=bar
变量引用
hive> create table test (i int,${foo} string );
hive> describe test;
OK
i int
bar string
Time taken: 0.19 seconds, Fetched: 2 row(s)
读取其他命名空间变量
hive> set system:user.name;
hive> set env:HOME;
hivevar和hiveconf在读取变量的时候不需要指定命名空间
而system和env在读取变量的时候一定要指定命名空间
2、HIVE中“一次使用”命令
我们可以通过终端交互的方式执行命令,例如
hive>
也可以采用一次使用命令,执行完后立刻退出;例如
hive -e "select * from test";
加个-e参数即可
3、HIVE从文件中执行命令
文件 test.hql内容如下
select * from test;
set env:HOME;
执行
hive -f /目录/test.hql
4、hiverc文件
hive命令启动的时候,会自动执行$HOME目录下.hiverc文件。
如果一些命令频繁执行,可放在这个文件里。
5、基础数据类型
hive支持大多数据库中存在的数据类型
数据类型 | 说明 |
---|---|
TININT | 1byte整数 |
SMALINT | 2byte整数 |
INT | 4byte整数 |
BIGINT | 8byte整数 |
BOOLEAN | 布尔类型 |
FOLAT | 单精度浮点数 |
DOUBLE | 双精度浮点数 |
STRING | 字符串 |
TIMESTAMP | 整数,浮点数或字符串 |
BINARY | 字节数据 |
hive中的string是没有长度限制的,跟普通的关系型数据库不同。
6、集合数据类型
hive支持struct,map,array三种数据类型
数据类型 | 说明 |
---|---|
struct | 跟c语言里面查不多,也是也算是对象,可以通过 字段名.属性名 来获取值 |
map | 键值对类型,可以通过字段名[‘属性名’]来获取值 |
array | 数组,可以通过字段名[下标]来获取值 |
这些类型在普通的关系型数据库中不支持,可能需要进行多表关联。但是对于大数据系统来说,更加注重的是吞吐量,一堆数据放在一块,从头开始寻址,减少磁盘的寻址次数。
来建个表试试
hive> create table person (
> name string,
> height float,
> child array<string>,
> score map<string,float>,
> home struct<city:string,state:string>);
7、文本文件数据编码
分隔符 | 说明 |
---|---|
\n | 换行 |
^A | 字段间分割 |
^B | 数组元素间分割、struct间分割,键值对间分割 |
^C | 键和值之间分割 |
我们利用这种编码格式制造文件,文件可以被hive进行解析。
这个要注意键盘上能找到^和A但直接输入时不行的,vim文件时,需要:set list开启看隐藏字符模式,然后ctrl+v 然后ctrl+a 这种 才能打出字段间分割。
8、读时模式
传统数据库在插入或更新数据时,会对数据格式进行校验,这种称为写时模式。而hive则时读时模式,存入的时候不做校验,而是在数据读取的时候做修正,例如字段不存在或者类型错误,会展示null。
ps:本文参考书籍《hive编程指南》