hive的数据组织格式:
库:
管理数据
不同模块的数据最好放在不同的数据库中
同mysql中的数据库的概念
表:
内部表:管理表/managed_table
表的创建 表的数据的删除 都是有hive自己决定的
同mysql中的表
内部表在进行删除的时候 元数据和原始数据都会被删除
外部表:external_table
和内部表对立面,一个表不可能同时是内部表又是外部表的
表结构上同内部表
数据自己决定不了
外部表在进行删除的时候 只能删除元数据(描述信息),表的原始数据(hdfs)不会被删除
分区表:
这里的分区的概念不同于MR中的分区的概念
hive中有可能一个表非常大,查询的时候会进行全表扫描,极大的降低hive表的查询性能
这时候就出现了分区表
将原来的一个大的表存储的时候分成不同的数据目录进行存储
没有分区的表存储:
/user/hive/warehouse/test.db/test01/ test01表对应所有的原始数据存储目录
在进行查询的时候是对上面的整个目录下的所有的数据进行扫描
有分区的表:分区字段
查询的时候 按照课程进行过滤查询 按照课程进行分区
/user/hive/warehouse/test.db/test01/course=math/
/user/hive/warehouse/test.db/test01/course=en/
/user/hive/warehouse/test.db/test01/course=computer/
按照不同的课程 存储在不同的目录下
查询的时候 只会扫描某一个分区的数据 不会全表的扫描了
减少扫描范围 提升查询性能
实际生产中 最常用的分区字段 时间字段
分桶表:
类似于mapreduce中的分区的概念
同一个表的数据 存储在同一个目录下不同的文件中
指定分桶的个数 桶的个数----mapreduce的中reducetask的个数 3
/user/hive/warehouse/test.db/test01/part-r-00000
/user/hive/warehouse/test.db/test01/part-r-00001
/user/hive/warehouse/test.db/test01/part-r-00002
作用:
1)提升join的性能
面试题2
2)提升抽样的性能 数据具有代表性 散列
视图:
view
hive中的视图 只有逻辑视图(存储的仅仅是一个sql语句 不会进行执行的) 没有物化视图(将视图代表的sql进行执行结果)
查询视图的时候才会进行执行
hive中的视图类似于sql语句的快捷方式 保存的是当前的视图代表的sql语句
数据存储:
原始数据:hdfs上
默认情况下存储在hdfs的:
/user/hive/warehouse
/....db 代表的是数据库
/test01 代表的是当前数据库下的表 这个目录下存储就是表中的数据
这个目录可以自定义配置:
hive-site.xml
<property>
<name>hive.metastore.warehouse.dir</name>
<value>/user/hive/hivehome</value>
<description>hive的原始数据在hdfs的存储目录</description>
</property>
元数据:mysql中存储
<property>
<name>javax.jdo.option.ConnectionURL</name>
<value>jdbc:mysql://localhost:3306/myhive?createDatabaseIfNotExist=true</value>
<description>JDBC connect string for a JDBC metastore</description>
<!-- 如果 mysql 和 hive 在同一个服务器节点,那么请更改 hadoop02 为 localhost -->
</property>
mysql中的myhive库:
数据库的描述信息表:
DBS:描述hive中的数据库信息的
库的存储位置
hdfs://hadoop01:9000/user/hive/hivehome/test_home.db 6 test_home hadoop USER
在hive表创建一个数据库在这个表中添加一条数据
TBLS:描述hive中的表的信息的
TBL_TYPE:描述表的类型的
hive中创建一个表的时候 这个表中添加一条数据
COLUMNS_V2:描述字段信息的
表id 字段名 字段类型 字段顺序(从0开始 数字越大 证明字段越在后)
1 name string 1
元数据修改的时候 发现hive中的表的字段顺序变了
说明hive表的结构从元数据表加载来的 原始数据从hdfs加载来的
修改元数据 修改表结构
hive初体验:
create database test_bd1807;
use test_bd1807;
建表:
1 0 家电
create table jiadian(id int,father_id int,name string)
row format delimited fields terminated by "\t";
加载数据:
load data local inpath '/home/hadoop/fur.txt' into table jiadian;
查询:
select * from jiadian;
row format delimited 行格式化分割符
列之间的分割符 fields terminated by ''
行分隔符:lines terminated by '\n'
hive的ddl操作:data-define-language
数据库的操作:
建库:
create database if not exists test;
切换数据库:
use test;
查看正在使用的数据库:
select current_database();
查看数据库列表:
show databases;
show databases like 'test*';
查看数据库的详细描述信息:
desc database test;----DBS
删除库:
drop database if exists test; 只能删除空的数据库
drop database test restrict; . restrict
drop database test cascade; 强制删除非空数据库
修改数据库:
不支持
为了避免报错:
创建的时候加if not exists
删除:if exists
同样适用于表操作
表的操作:
1.显示表列表:
show tables;
show tables like 'test*';
show tables in test_home; 查看指定数据库下的表
2.查看表的详细信息:
desc test01; 可以查看表的字段描述信息
desc extended test01; 查看表的详细信息
desc formatted test01; 格式化显示表的详细信息
3.删除表
drop table test01;
4.清空表
清空表中的数据 表结构保存
truncate table test01;
hive的数据组织格式和基本操作
猜你喜欢
转载自blog.csdn.net/wjr_wl/article/details/83151133
今日推荐
周排行