一 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学习笔记(二)——数据模型相关推荐

  1. Hive学习笔记三之函数操作

    文章目录 5 函数 5.1 系统内置函数 5.2 常用内置函数 5.2.1 空字段赋值 5.2.2 CASE WHEN THEN ELSE END(类似于java中的switch case) 5.2. ...

  2. Hive学习笔记【全】

    Hive学习笔记[全] 文章目录 Hive学习笔记[全] 一.Hive简介 1.Hive是什么 2.Hive的架构 3.Hive的数据组织 二.Hive安装 1.环境需求 2.安装Hive 3.启动H ...

  3. css中怎么加入立体模型,CSS学习笔记二:css 画立体图形

    继上一次学了如何去运用css画平面图形,这一次学如何去画正方体,从2D向着3D学习,虽然有点满,但总是一个过程,一点一点积累,然后记录起来. Transfrom3D 在这一次中运用到了一下几种属性: ...

  4. qml学习笔记(二):可视化元素基类Item详解(上半场anchors等等)

    原博主博客地址:http://blog.csdn.net/qq21497936 本文章博客地址:http://blog.csdn.net/qq21497936/article/details/7851 ...

  5. [转载]dorado学习笔记(二)

    原文地址:dorado学习笔记(二)作者:傻掛 ·isFirst, isLast在什么情况下使用?在遍历dataset的时候会用到 ·dorado执行的顺序,首先由jsp发送请求,调用相关的ViewM ...

  6. PyTorch学习笔记(二)——回归

    PyTorch学习笔记(二)--回归 本文主要是用PyTorch来实现一个简单的回归任务. 编辑器:spyder 1.引入相应的包及生成伪数据 import torch import torch.nn ...

  7. tensorflow学习笔记二——建立一个简单的神经网络拟合二次函数

    tensorflow学习笔记二--建立一个简单的神经网络 2016-09-23 16:04 2973人阅读 评论(2) 收藏 举报  分类: tensorflow(4)  目录(?)[+] 本笔记目的 ...

  8. Scapy学习笔记二

    Scapy学习笔记二 Scapy Sniffer的用法: http://blog.csdn.net/qwertyupoiuytr/article/details/54670489 Scapy Snif ...

  9. Ethernet/IP 学习笔记二

    Ethernet/IP 学习笔记二 原文链接:http://wiki.mbalib.com/wiki/Ethernet/IP 1.通信模式 不同于源/目的通信模式,EtherNet/IP 采用生产/消 ...

  10. Java学习笔记二:数据类型

    Java学习笔记二:数据类型 1. 整型:没有小数部分,允许为负数,Java整型分4种:int short long byte 1.1 Int最为常用,一个Int类型变量在内存中占用4个字节,取值范围 ...

最新文章

  1. jQuery发送含有数组参数的ajax请求以及后台Struts2的OGNL解析错误
  2. 【VirtualBox】VirtualBox使用现有的虚拟盘文件(如VHD)创建虚拟机时,报错:打开虚拟硬盘失败,“UUID already exist”的解决方法
  3. 注册CSDN帐号的见闻续
  4. 对比Excel学Python(二)数据可视化
  5. LeCun:深度学习在信号理解中的强大和局限(视频+PPT)
  6. mfc 子窗体 按钮不触发_实战经验:MFC非模态对话框的使用
  7. 阶段3 2.Spring_06.Spring的新注解_1 spring的新注解-Configuration和ComponentScan
  8. 02怎么学数据结构?
  9. Matlab中句柄类
  10. 树莓派+android+盒子,最强电视盒子诞生记-树莓派4电视盒子
  11. 英国“脱欧”促中国企业调整在欧战略
  12. React源码解毒 - 检测开发者是否错误的使用了props属性
  13. mfc改计算机名称,VC获取并修改计算机屏幕分辨率(MFC)
  14. Python Turtle 绘制蝴蝶曲线
  15. c语言around用法,around 的用法
  16. python实用大全pdf_超级实用干货|九大技巧,带你用Python玩转PDF
  17. 关于如何使用打码平台识别验证码
  18. Debezium系列之:Debezium2.X之PostgreSQL数据库的Debezium连接器
  19. 如何使用JavaScript实现纯前端读取和导出excel文件
  20. 国务院适当放宽二套房贷限制政策

热门文章

  1. linux基础(三)——yum的使用
  2. 为什么线程切换开销大
  3. java面向对象编程考试题_《Java面向对象程序设计》考试卷及答案带注释
  4. 山西特岗考试计算机专业真题,山西特岗教师招聘考试模拟题_信息技术选择题...
  5. python编写量化交易程序英语_Python量化交易开源框架:AmazingQuant
  6. FISCO BCOS log日志设置配置
  7. phalcon index.php,除了Phalcon php中的indexAction之外,无法调用indexController的动作
  8. 选择排序详解(Java实现)
  9. L2-028 秀恩爱分得快
  10. 第七章思维导图前半段