前言
hive数仓里的表有两个维度,元数据(数据表结构)和数据文件,其中元数据存储到MySQL上,数据文件存储到hdfs上
分析数据
user.txt 人口数据示例
1 张三 男 湖北省 武汉市 27 联投花山郡
2 李四 女 湖北省 宜昌市 23 联投瑞园
3 王五 男 湖南省 长沙市 28 长方云西府
4 赵六 女 湖南省 岳阳市 32 中建大公馆
5 刘二 男 湖北省 咸宁市 46 步步高广场
数据采用tab符分隔,数据列依次是 编号 姓名 性别 省 市 年龄 居住小区
建表
create table t_user(id int comment "ID",name string comment "名称",sex string comment "性别",provice string comment "所处省",city string comment "所处市",age int comment "年龄",house string comment "居住小区"
) comment "人口信息"row format delimitedfields terminated by "\t";
查看表
# 该指令查询的是元数据
show tables;
上传数据
将user.txt数据上传到所建t_user表下,由于建的表都会在hdfs文件系统中生成一个文件夹,可以直接将数据文件上传到hdfs文件夹中
[root@yd-ss data]# su hadoop
[hadoop@yd-ss data]$ hdfs dfs -put ./user-xueli.txt /home/datahouse/hive/warehouse/test.db/t_user
上传数据时,是可以上传多个文件的,但结构得是一样的。上传多个文件后,执行sql查询的结果会像操作一张表一样。
这里也可以使用load来加载数据到表里。参见hiveSQL常用语法。
查看
hive建的表数据是存储在hdfs上的,网页查看地址
http://xxx.xx.xx.xx:9870/explorer.html?user.name=test
可以清楚展示分布式存储系统上的文件目录及其权限。和使用hdfs dfs 命令看到的一样。
可以看到上传的数据文件
下面通过hiveSQL去查询访问
select * from t_user;
可以看到,只要将数据文件上传到建的表下面,hive 就可以对应解析数据,进行查询分析,但前提是建的表结构必须是依赖于已有的数据文件,否则解析会出错。
其他复杂数据类型建表
数据文件如下:
1,张三,男,湖北省,武汉市,27,联投花山郡,本科:武汉大学-硕士:武汉大学-博士:华中科技大学
2,李四,女,湖北省,宜昌市,23,联投瑞园,本科:华中师范大学-硕士:武汉理工大学,
3,王五,男,湖南省,长沙市,28,长方云西府,本科:湖北大学-硕士:武汉大学
4,赵六,女,湖南省,岳阳市,32,中建大公馆,本科:武汉科技大学-硕士:武汉理工大学
5,刘二,男,湖北省,咸宁市,46,步步高广场,本科:武汉理工大学-硕士:清华大学
分隔符换成了逗号,然后增加了学历字段,学历字段先使用-分割,再使用:分割成键值对
create table t_user_xueli(id int comment "ID",name string comment "名称",sex string comment "性别",provic