hive学习小记1

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,
    > score map,
    > home struct);

7、文本文件数据编码

分隔符 说明
\n 换行
^A 字段间分割
^B 数组元素间分割、struct间分割,键值对间分割
^C 键和值之间分割

我们利用这种编码格式制造文件,文件可以被hive进行解析。
这个要注意键盘上能找到^和A但直接输入时不行的,vim文件时,需要:set list开启看隐藏字符模式,然后ctrl+v 然后ctrl+a 这种 才能打出字段间分割。

8、读时模式

传统数据库在插入或更新数据时,会对数据格式进行校验,这种称为写时模式。而hive则时读时模式,存入的时候不做校验,而是在数据读取的时候做修正,例如字段不存在或者类型错误,会展示null。

ps:本文参考书籍《hive编程指南》

你可能感兴趣的:(大数据)