About Hive相关概念及HiveQL操作
博文目录
Hive Test
hive -e ‘’
[root@bdpdatanode01 ~]# hive -e 'select count(1) from prod_bdw.dwd_calendar' [root@bdpdatanode01 ~]# hive -S -e 'select count(1) from prod_bdw.dwd_calendar'
hive 表(分区和桶)
1、托管表和外部表
2、分区和桶
1) 分区(partition):在文件块存储上进行细化,表现为文件夹树结构;
CREATE TABLE logs (ts BIGINT J line STRING) PARTITIONED BY (dt STRING, count俨YSTRING);
LOAD DATA LOCAL INPATH 'i nput/hive/partitions/filel' INTO TABLE logs PARTITION ( dt:'20θ1-01-01', country:'GB');
show partitions tablename;
2)桶(bucket):会为数据提供额外的结构以获得更高效的查询处理。
把表(或分区)组织成桶(bucket)有两个理由。第一个理由是获得更高的查询处理效率。桶为表加上了额外的结构。Hive在处理有些查询时能够利用这个结构。具体而言,连接两个在(包含连接列的)相同列上划分了桶的表,可以使用map端连接(map-sidejoin)高效地实现。
首先,我们来看如何告诉Hive一个表应该被划分成桶。使用
CLUSTERED BY子句来指定划分桶所用的列和要划分的桶的个数:
CREATE TABLE bucketed_user、s(id INT, name STRING) CLUSTERED BY (id) INTO 4 BUCKETS;
在这里,我们使用用户ID来确定如何划分桶(Hive对值进行哈希井将结果除以桶的个数取余数。这样,任何一桶里都会有一个随机的用户集合。
对于map端连接的情况,首先两个表以相同方式划分桶,处理左边表内某个桶的mapper知道右边表内相匹配的行在对应的桶内。
把表划分成桶的第二个理由是使“取样”(sampling)更高效。在处理大规模数据集肘,在开发和修改查询的阶段,如果能在数据集的一小部分数据上试运行查询,会带来很多方便。
用TABLESAMPLE子句对表进行取样, 我们可以获得相同的结果。这个子句会将查询限定在表的一部分桶内, 而不是使用整个表:
hive> SELECT * FROM bucketed users > TABLESAMPLE(BUCKET 1 OUT OF 4 ON id); hive> select * from dwd_calendar limit 10;
hive 数据导入
1)、使用
LOADDATA操作,通过把文件复制或移到表的目录中,从而把数据导入Hive的表(或分区)。
LOAD DATA LOCAL INPATH "input/ncdc/metadata/stations-fixed-width.txt" INTO TABLE stations;
2)、也可以用
INSERT语句把数据从一个Hive表填充到另一个表。
--单表插入 INSERT OVERWRITE TABLE target [PARTITION ( dt=’2001-01-01’)] SELECT coll, col2 FROM source; --多表插入 FROM records2 INSERT OVERWRITE TABLE stations_by_year SELECT year, COUNT(DISTINCT station) GROUP BY year INSERT OVERWRITE TABLE records_by_year SELECT year, COUNT(l) GROUP BY year INSERT OVERWRITE TABLE good_records_by_year SELECT year, COUNT(l) WHERE temperature != 9999 AND (quality= 0 OR quality= 1 OR quality= 4 OR quality= 5 OR quality= 9) GROUP BY year; --或在新建表的时候使用CTAS结构,CTAS是CREATE TABLE ... AS SELECT的缩写 (CTAS是原子的,查询失败则不会建立表) CREATE TABLE target AS SELECT coll, col2 FROM source;
3)、把数据从一个关系数据库直接导人Hive,可以使用
Sqoop或者
Spark sql。
Hive修改表的HSQL几乎与SQL相同。
Hive 表的丢弃
1)
Drop table删除托管表的数据和源数据;删除外部表的源数据;
2)删除表的数据,保留表的定义格式,如同关系数据库的truncate:
hive> dfs -rmr /user/hive/warehouse/my_table;
3)创建模式相同的表,之后Drop表:
CREATE TABLE new_table LIKE existing_table;
Hive 查询数据
hive> FROM records2 > SELECT year,temperature > DISTRIBUTE BY year > SORT BY year ASC,temperature DESC;
Hive 视图
CREATE VIEW valid records AS SELECT * FROM records2 WHERE temperature!= 9999 AND (quality= 0 OR quality= 1 OR quality= 4 OR quality= 5 OR quality= 9);
1)创建视图时并不执行查询,查询只是存储在metastore中。
2)SHOWTABLES命令的输出结果里包括视图。
3) 可以使用DESCRIBE EXTENDED νiew_name 命令来查看某个视图的详细信息,包括用于定义它的那个查询。
4) Hive中的视图是只读的,所以无法通过视图为基表加载或插入数据。
- 点赞
- 收藏
- 分享
- 文章举报
- Hive中关于分区表的概念理解以及相关操作解释
- hive相关操作语句
- hive的相关操作总结
- HiveQL之Database相关操作
- Hive--HiveQL:数据定义、数据操作
- Java SE 7 新特性之文件操作(3)- 相关的一些概念
- HTML DOM概念及相关操作
- Docker 快速上手系列(3): 仓库的概念及相关操作
- Hive的常用HiveQL操作
- Docker 学习笔记【1】Docker 相关概念,基本操作
- swap相关的概念和操作
- Hive数据仓库相关操作
- 排序二叉树,平衡二叉树和红黑树的概念以及相关的操作讲解
- [hive] hiveql 基础操作
- Java软件开发基础知识梳理之(11)------Java中的GC操作及相关概念
- Hive零基础从入门到实战 入门篇(六)HiveQL:数据库操作
- Git概念 及相关操作上传、合并等
- Hive 之表的种类以及相关操作
- Docker 快速上手系列(1): 镜像的概念及相关操作
- 03分布式数据仓库 HIVE -- 数据的相关操作