Hive学习笔记(二)——数据模型
一 hive 的五种数据模型
1 内部表
1)创建内部表
相当于MySQL的表 默认存储为的HDFS的目录 /user/hive/warehouse
create table emp(empno int,ename string,job string,mgr int,hiredate string,sal int,comm int,deptno int)row format delimited fields terminated by ',';
2)导入数据
load data inpath '/scott/emp.csv' into table emp; -- 导入HDFS的数据,是剪切
load data local inpath '/root/temp/*****' into table emp; --导入本地Linux的数据,是复制
2 外部表
1)创建外部表
hive> create external table fz_external_table(id int,name string,age int,tel string)> ROW FORMAT DELIMITED> FIELDS TERMINATED BY ','> STORED AS TEXTFILE> location '/user/hive/external/fz_external_table'; --hive外部表存储的位置
建外部表时要加external关键字,我在建表时指定了location,当然也可以不指定,不指定就默认使用hive.metastore.warehouse.dir指定的路径。
2)导入数据
提前准备好数据文件fz_external.txt,数据同上,只是换了个名。
1,fz,25,13188888888888
2,test,20,13222222222
3,dx,24,183938384983
4,test1,22,1111111111
导入操作:
hive> load data local inpath '/Users/FengZhen/Desktop/Hadoop/hive/testfile/fz_external_table.txt' into table fz_external_table;
Loading data to table default.fz_external_table
Table default.fz_external_table stats: [numFiles=0, totalSize=0]
OK
Time taken: 0.224 seconds
查看表内数据。
hive> select * from fz_external_table;
OKfz 25 13188888888888test 20 13222222222dx 24 183938384983test1 22 1111111111
Time taken: 0.06 seconds, Fetched: 4 row(s)
现在数据已经导入成功,接下来去HDFS中查看以下,在location指定的路径下
rooot@master$ hadoop fs -ls /user/hive/external/fz_external_table;
Found 1 items
-rwxr-xr-x 1 FengZhen supergroup 88 2017-06-06 13:44 /user/hive/external/fz_external_table/fz_external_table.txt
可以看到,往外部表中导入数据的时候,本地文件系统中的数据文件也被拷贝到了HDFS中。
现在来删除外部表,看一下HDFS中文件有没有被删除。
hive> drop table fz_external_table;
OK
Time taken: 0.103 seconds
外部表已经删除成功,看下HDFS中
root@master$ hadoop fs -ls /user/hive/external/fz_external_table;
Found 1 items
-rwxr-xr-x 1 FengZhen supergroup 88 2017-06-06 13:44 /user/hive/external/fz_external_table/fz_external_table.txt
可以看到,HDFS中数据文件在表被删除的情况下,还是存在的,也就是说删除外部表,只能删除表数据,并不能删除数据文件。
3 分区表
主要是为了优化查询,不需要扫描所有表里的数据,只要查看到对应的表的数据
1)创建分区表
create table art_dt(sentence string)
partitioned by (dt string)
row format delimited fields terminated by '\n';
2)插入数据
insert overwrite table art_dt partition(dt='20190420')
select * from art_ext limit 100;
insert overwrite table art_dt partition(dt='20190421')
select * from art_ext limit 100;--sql做数据的etl,或者统计分析等的处理逻辑
3)查看分区数
show partitions art_dt;
4 桶表
需要查询当前已经在hive中的表的数据进行分桶的,主要用来抽样查看数据!
1)创建桶表
–1.生成辅助表
数据文件bucket_test.txt
1
2
3
4
5
6
...
32
--1.生成辅助表
create table bucket_num(num int);
load data local inpath '/home/badou/Documents/data/hive/bucket_test.txt'
into table bucket_num;
–2.每个数字进入一个bucket
–2.1建表(表的元数据信息建立)
set hive.enforce.bucketing = true;
create table bucket_test(num int)
clustered by(num)
into 32 buckets;
2.2查询数据并导入到对应表中
insert overwrite table bucket_test
select cast(num as int) as num from bucket_num;
3) 抽样
--sample
select * from bucket_test tablesample(bucket 1 out of 32 on num);
--第一个bucket,00_0,32
select * from bucket_test tablesample(bucket 1 out of 16 on num);
--第1个和第17个bucket:00_0和16_0, 32和16对于桶表关键点的理解是如何去抽样?对于此会单独写一篇博文来阐述.
--测试1/2个bucket:
set hive.enforce.bucketing = true;
create table bucket_test4(num int)
clustered by(num)
into 4 buckets;
insert overwrite table bucket_test4
select num from bucket_num;select * from bucket_test4 tablesample(bucket 1 out of 8 on num);
--数据没有分桶,怎么采样数据?
select * from bucket_test4 where num%10>0;
5 视图
从MySQL的角度阐述视图:
视图是由从数据库的基本表中选取出来的数据组成的逻辑窗口,与基本表不同,它是一个虚表。在数据库中,存放的只是视图的定义,而不存放视图包含的数据项,这些项目仍然存放在原来的基本表结构中。
视图可以被定义为多个表的连接,也可以被定义为只有部分列可见,也可为部分行可见。
引入视图的原因:
1 可以简化SQL语句
2 提高数据的安全性
3 用户可以从不同的角度理解数据
4 视图是一个独立的逻辑表
引入视图带来的好处:
可以让开发人员将数据的关注点放到需要的数据上,而不需要去看那些不必要的数据而浪费时间,同时也提高了开发效率。
hive视图
hive的视图是不存数据的,换句话说目前版本不支持物化视图的。
1)创建辅助表
create table emp(name string,age int,gender string)
row format delimited fields terminated by ',';
导入数据
load data local inpath '/root/sutdent.txt' into table emp;
2)创建视图
create view test_view
as
select * from emp
3)查看视图数据
hive (default)> select * from test_view;
OK
lisa 18 女
Elia 22 女
jack 19 男
tom 17 男
Time taken: 0.403 seconds, Fetched: 4 row(s)
4)删除视图
drop view test_view; --跟删除表不一样
5)视图也可用来复制
--只是复制了表结构,并无数据
create table test_view2
like test_view
6)hive 视图需注意的几点:
- 视图是只读的,对于视图只允许改变员数据中的TBLPROPERTIES属性信息:
ALTER VIEW test_view SET TBLPROPERTIES(‘crated_at’='some_timestamp')
- 视图不能够作为insert语句或load命令的目标表
- 删除视图用 drop view test_view;
7) 查看视图元数据信息(对于其他数据模型也是适用的)
describe
hive (default)> desc test_view;
OK
name string
age int
gender string
Time taken: 0.136 seconds, Fetched: 3 row(s)
describe extended
hive (default)> describe extended test_view;
OK
name string
age int
gender string Detailed Table Information Table(tableName:test_view, dbName:default, owner:root, createTime:1557252551, lastAccessTime:0, retention:0, sd:StorageDescriptor(cols:[FieldSchema(name:name, type:string, comment:null), FieldSchema(name:age, type:int, comment:null), FieldSchema(name:gender, type:string, comment:null)], location:null, inputFormat:org.apache.hadoop.mapred.TextInputFormat, outputFormat:org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat, compressed:false, numBuckets:-1, serdeInfo:SerDeInfo(name:null, serializationLib:null, parameters:{}), bucketCols:[], sortCols:[], parameters:{}, skewedInfo:SkewedInfo(skewedColNames:[], skewedColValues:[], skewedColValueLocationMaps:{}), storedAsSubDirectories:false), partitionKeys:[], parameters:{transient_lastDdlTime=1557252551}, viewOriginalText:select * from emp, viewExpandedText:select `emp`.`name`, `emp`.`age`, `emp`.`gender` from `default`.`emp`, tableType:VIRTUAL_VIEW, rewriteEnabled:false)
Time taken: 0.331 seconds, Fetched: 5 row(s)
转载于:https://www.cnblogs.com/windy158/p/10865046.html
Hive学习笔记(二)——数据模型相关推荐
- Hive学习笔记三之函数操作
文章目录 5 函数 5.1 系统内置函数 5.2 常用内置函数 5.2.1 空字段赋值 5.2.2 CASE WHEN THEN ELSE END(类似于java中的switch case) 5.2. ...
- Hive学习笔记【全】
Hive学习笔记[全] 文章目录 Hive学习笔记[全] 一.Hive简介 1.Hive是什么 2.Hive的架构 3.Hive的数据组织 二.Hive安装 1.环境需求 2.安装Hive 3.启动H ...
- css中怎么加入立体模型,CSS学习笔记二:css 画立体图形
继上一次学了如何去运用css画平面图形,这一次学如何去画正方体,从2D向着3D学习,虽然有点满,但总是一个过程,一点一点积累,然后记录起来. Transfrom3D 在这一次中运用到了一下几种属性: ...
- qml学习笔记(二):可视化元素基类Item详解(上半场anchors等等)
原博主博客地址:http://blog.csdn.net/qq21497936 本文章博客地址:http://blog.csdn.net/qq21497936/article/details/7851 ...
- [转载]dorado学习笔记(二)
原文地址:dorado学习笔记(二)作者:傻掛 ·isFirst, isLast在什么情况下使用?在遍历dataset的时候会用到 ·dorado执行的顺序,首先由jsp发送请求,调用相关的ViewM ...
- PyTorch学习笔记(二)——回归
PyTorch学习笔记(二)--回归 本文主要是用PyTorch来实现一个简单的回归任务. 编辑器:spyder 1.引入相应的包及生成伪数据 import torch import torch.nn ...
- tensorflow学习笔记二——建立一个简单的神经网络拟合二次函数
tensorflow学习笔记二--建立一个简单的神经网络 2016-09-23 16:04 2973人阅读 评论(2) 收藏 举报 分类: tensorflow(4) 目录(?)[+] 本笔记目的 ...
- Scapy学习笔记二
Scapy学习笔记二 Scapy Sniffer的用法: http://blog.csdn.net/qwertyupoiuytr/article/details/54670489 Scapy Snif ...
- Ethernet/IP 学习笔记二
Ethernet/IP 学习笔记二 原文链接:http://wiki.mbalib.com/wiki/Ethernet/IP 1.通信模式 不同于源/目的通信模式,EtherNet/IP 采用生产/消 ...
- Java学习笔记二:数据类型
Java学习笔记二:数据类型 1. 整型:没有小数部分,允许为负数,Java整型分4种:int short long byte 1.1 Int最为常用,一个Int类型变量在内存中占用4个字节,取值范围 ...
最新文章
- jQuery发送含有数组参数的ajax请求以及后台Struts2的OGNL解析错误
- 【VirtualBox】VirtualBox使用现有的虚拟盘文件(如VHD)创建虚拟机时,报错:打开虚拟硬盘失败,“UUID already exist”的解决方法
- 注册CSDN帐号的见闻续
- 对比Excel学Python(二)数据可视化
- LeCun:深度学习在信号理解中的强大和局限(视频+PPT)
- mfc 子窗体 按钮不触发_实战经验:MFC非模态对话框的使用
- 阶段3 2.Spring_06.Spring的新注解_1 spring的新注解-Configuration和ComponentScan
- 02怎么学数据结构?
- Matlab中句柄类
- 树莓派+android+盒子,最强电视盒子诞生记-树莓派4电视盒子
- 英国“脱欧”促中国企业调整在欧战略
- React源码解毒 - 检测开发者是否错误的使用了props属性
- mfc改计算机名称,VC获取并修改计算机屏幕分辨率(MFC)
- Python Turtle 绘制蝴蝶曲线
- c语言around用法,around 的用法
- python实用大全pdf_超级实用干货|九大技巧,带你用Python玩转PDF
- 关于如何使用打码平台识别验证码
- Debezium系列之:Debezium2.X之PostgreSQL数据库的Debezium连接器
- 如何使用JavaScript实现纯前端读取和导出excel文件
- 国务院适当放宽二套房贷限制政策
热门文章
- linux基础(三)——yum的使用
- 为什么线程切换开销大
- java面向对象编程考试题_《Java面向对象程序设计》考试卷及答案带注释
- 山西特岗考试计算机专业真题,山西特岗教师招聘考试模拟题_信息技术选择题...
- python编写量化交易程序英语_Python量化交易开源框架:AmazingQuant
- FISCO BCOS log日志设置配置
- phalcon index.php,除了Phalcon php中的indexAction之外,无法调用indexController的动作
- 选择排序详解(Java实现)
- L2-028 秀恩爱分得快
- 第七章思维导图前半段