数据仓库 面向分析(大而全、准确性):
是面向主题、集成、不可修改、反映历史变化 用于数据分析,辅助管理决策
数据库 面向事务(一致性、时效性)
可以让用户在做数据分析统计时缩小数据扫描的范围,因为可以在select时指定要统计的分区,提高查询效率。
分区字段是隐藏的,非建表字段,但是select会查出来
一张表可以有多个分区,分区下也可以有多个分区,无限套娃
PARTIONED BY(col_name data_type)
单个分区或者表中的数据量越来越大,当分区不能更细粒的划分数据时,所以会采用分桶技术将数据更细粒度的划分和管理。
Hive数据类型 | Java数据类型 | 长度 | 示例 |
TINYINT | byte | 1字节 | 6 |
SMALLINT | short | 2字节 | 6 |
INT | int | 4字节 | 6 |
BIGINT | long | 5字节 | 6 |
BOOLEAN | boolean | 布尔类型 true / false |
true/false |
FLOAT | float | 单精度浮点数 | 3.1415926 |
DOBULE | double | 双精度浮点数 | 3.1415926 |
STRING | String | 字符串 可以使用单引号或者双引号 |
“中华人民共和国” |
TIMESTAMP | 时间类型 | ||
BINARY | 字节数组 |
数据类型 | 描述 | 语法示例 |
MAP | MAP 是一组键-值对 元组集合,使用数组表示法可以访问数据。例如,如果某个列的数据类型是 MAP,其中 键->值对是 ’first’->’John’和’last’>’Doe’ ,那么可以通过字段名[‘last’]获取最后一个元素 |
map() 例如:map |
ARRAY | 数组是一组具有相同类型 和名称 的变量的集合。这些变量称为数组的元素,每个数组元素都有一个编号,编号从 零开始。例如,数组值为 [‘John’, ‘Doe’] ,那么第 2 个元素可以通过数组名[1]进行引用。 |
Array() 例如:array |
STRUCT | 和 c 语言中的 struct 类似,都可以通过“点”符号访 问元素内容。例如,如果某个列的数据类型 是 STRUCT{first STRING, last STRING} ,那么第 1 个元素可以通过字段.first来引用。 |
struct() 例如:struct<street:string, city:string> 格式为: 字段名:字段类型 |
集合类型之array (1) 先创建一张表:
create table t_array(id int,name string,hobby array)
row format delimited
fields terminated by ','
collection items terminated by '-'
stored as textfile;
load data inpath '/tmp/array.txt' into table t_array;
(2) 准备数据文件 t_array.txt
1,zhangsan,唱歌-跳舞-游泳
2,lisi,打游戏-篮球
(3) 查询数据
select id ,name,hobby[0],hobby[1] from t_array;
+-----+-----------+------+------+
| id | name | _c2 | _c3 |
+-----+-----------+------+------+
| 1 | zhangsan | 唱歌 | 跳舞 |
| 2 | lisi | 打游戏 | 篮球 |
+-----+-----------+------+------+
select id ,name,hobby[0],hobby[1],hobby[2] from t_array;
+-----+-----------+------+------+-------+
| id | name | _c2 | _c3 | _c4 |
+-----+-----------+------+------+-------+
| 1 | zhangsan | 唱歌 | 跳舞 | 游泳 |
| 2 | lisi | 打游戏 | 篮球 | NULL |
+-----+-----------+------+------+-------+
select * from t_array;
+-------------+---------------+-------------------+
| t_array.id | t_array.name | t_array.hobby |
+-------------+---------------+-------------------+
| 1 | zhangsan | ["唱歌","跳舞","游泳"] |
| 2 | lisi | ["打游戏","篮球"] |
+-------------+---------------+-------------------+
2 rows selected (0.114 seconds)
(1) 先创建一张表
create table t_map(id int,name string,hobby map)
row format delimited
fields terminated by ','
collection items terminated by '-'
map keys terminated by ':'
stored as textfile;
#加载数据
load data inpath '/tmp/t_map.txt' into table t_map;
(2) 准备数据文件 t_map.txt
1,zhangsan,唱歌:非常喜欢-跳舞:喜欢-游泳:一般般
2,lisi,打游戏:非常喜欢-篮球:不喜欢
查询数据:
select * from _map;
+-----------+-------------+-------------------------------------+
| t_map.id | t_map.name | t_map.hobby |
+-----------+-------------+-------------------------------------+
| 1 | zhangsan | {"唱歌":"非常喜欢","跳舞":"喜欢","游泳":"一般般"} |
| 2 | lisi | {"打游戏":"非常喜欢","篮球":"不喜欢"} |
+-----------+-------------+-------------------------------------+
2 rows selected (0.103 seconds)
select id,name,hobby['唱歌'] from t_map;
+-----+-----------+-------+
| id | name | _c2 |
+-----+-----------+-------+
| 1 | zhangsan | 非常喜欢 |
| 2 | lisi | NULL |
+-----+-----------+-------+
2 rows selected (0.115 seconds)
select id,name,hobby['唱歌'],hobby['跳舞'] from t_map;
+-----+-----------+-------+-------+
| id | name | _c2 | _c3 |
+-----+-----------+-------+-------+
| 1 | zhangsan | 非常喜欢 | 喜欢 |
| 2 | lisi | NULL | NULL |
+-----+-----------+-------+-------+
hive基本操作:
输入hive,进入hive
查看所有数据库:show databases;
建表语句:
create table test (
name string,
friends array,
children map,
address struct
)
row format delimited
fields terminated by ','
collection items terminated by '_'
map keys terminated by ':'
lines terminated by '\n';
选择数据库:
use tablename;
查看数据库中所有表:
show tables;
创建表,以及增删改查都与MySQL语法基本一致