关于hive

以下内容为边读边总结,用于后期快速学习

17.6 表

hive的表在逻辑上由存储的数据和描述表中数据形式的相关元数据组成。数据一般存放在hdfs中,也可存放其他hadoop文件系统。元数据存放在关系数据库中。

17.6.1 托管表和外部表

hive创建表时,默认hive自己管理,并将数据移入hive的数据仓库目录,这样的表称为内部表。另一种数据不存放在hive的数据仓库目录,这样的叫外部表。
两个表的差别表现在两个hiveQL语句中,分别时LOAD和DROP。
托管表如下创建表并导入同一文件系统(本地数据需要加LOCAL)数据如下:
CREATE TABLE managed_table (dummy STRING);
LOADE DATA INPATH '/user/dashuaibi/data.txt' INTO TABLE  managed_table;
在我们使用load时hive会将数据移到仓库目录。
注:由于加载数据就是文件系统的文件移动或重命名,所以速度很快。
丢弃一个表:
DROP TABLE managed_table:
由于时托管表,表删除的同时,元数据和数据也被一同删除。
而外部表需要用户控制数据的创建和删除,并且外部表的位置需要在创建时就需要指定,相应HiveQL如下:
CREATE EXTERNAL TABLE external_table (dummy STRING) LOCATIONG '/user/dashuaibi/external_table ';
LOAD DATA INPATH '/user/dashuaibi/data.txt' INTO TABLE external_table ;
使用external关键字,就是声明该表为外部表。数据不会移到hive仓库目录。插一句,LOAD导入数据无论是托管表还是外部表,hive都不会提前核对数据和模式匹配不。只有在查询时才会发现,缺失字段返回NULL。外部表删除表时数据不会被删除,只会删除元数据。
托管表和外部表如何选择,他俩没啥区别,如果我们的数据除了给hive使用,还会用作他用就选外部表。

17.6.2 分区和桶

hivev把表组织成分区,这是一种根据分区列的值对表进行粗略划分的机制,使用分区可以加速数据分片的查询速度。
表或分区可以进一步分为桶。他会为数据提供额外的结构获得更高效的查询处理。
举个例子是我们的日志数据可以根据日期对数据进行分区,当我们根据每天进行分区时,我们查询某天数据时只需要检索该分区下的数据即可。可以同时设置多个分区,在设置日期分区的基础上设置地理子分区。
分区需在创建表时进行设置,HiveQL如下:
CREATE TABLE logs(ts BIGINT, line STRING)
PARTITIONED BY (dt STRING, COUNTRY STRING);
导入数据时指定分区如下:
LOAD DATA INPATH '/user/dashuaibi/'
INTO TABLE logs
PARTITION(dt='20220702', country='xiaoriben');
利用ALTER TABLE添加分区
ALTER TABLE logs ADD IF NOT EXISTS PARTITONS(dt='20220702');
添加分区并读取hdfs路径文件
ALTER TABLE logs ADD IF NOT EXISTS PARTITON(dt='20220702') LOCATION '/user/dashuaibi/data';
删除分区:
ALTER TALE logs DROP IF EXISTS PARTITON(dt='20220702');
PARTITION BY中的列称为分区列。
分区在where中使用
SELECT * FROM logs
WHERE dt='20220702';
首先看看划分桶的意义:1. 获得更高效的查询,桶为表加上了额外结构。2. 可以高效进行取样采样。
通过HiveQL创建桶:
CREATE TABLE bucketed_users (id INT, name STRING)
CLUSTERED BY (id) INTO 4 BUCKETS;
此处hive对值进行哈希对桶数取余,决定放在那个桶里。
对桶内数据进行排序提高map连接效率:
CREATE TABLE bucketed_users (id INT, name STRING)
CLUSTERED BY (id) SORTED BY (id ASC) INTO BUCKETS;
向表中插入数据:
INSERT OVERWRITE TABLE bucketed_users
SELECT * FROM users;
借助桶进行取样观察
SELECT * FROM bucketed_users
TABLESAMPLE(BUCKET 1 OUT OF 4 ON id);
返回1(桶从1开始计数)号桶内1/4数据。
SELECT * FROM bucketed_users
TABLESAMPLE(BUCKET 1 OUT OF 2 ON id);
返回1(桶从1开始计数)号桶内1/2数据。
分痛语法格式总结如下:
CREATE [EXTERNAL] TABLE <table_name>
(<col_name> <data_type> [, <col_name> <data_type> ...])]
[PARTITIONED BY ...]
CLUSTERED BY (<col_name>)
[SORTED BY (<col_name> [ASC|DESC] [, <col_name> [ASC|DESC]...])]
INTO <num_buckets> BUCKETS
查询表结构:
desc formatted logs;

17.6.3存储格式

hive从两个维度对表的存储进行管理,分别是行格式和文件格式。
行格式的定义由SerDe定义,SerDe时序列化和反序列化的工具。当我们查询时SerDe就会将文件中二进制的数据反序列为对象形式在hive中使用。
1. 默认存储格式可以在创建表时指定分割符ROW FORMAT 或 STORED AS分隔符详细ql如下:
CREATE TABLE ...
ROW FORMAT DELIMITED
FIELDS TERMINATED BY '\001'
COLLECTION ITEMS TERMINATED BY '\002'
MAP KEYS TERMINATED BY '\003'
LINES TERMINATED BY '\n'
SORTED AS TESTFILE;
2. 二进制存储格式有顺序文件,Avro文件,Parquet文件,RCFILE文件,ORC文件推荐选择ORC文件,压缩效果好,查询快,测试对比如下。

17.6.4

1. INSERT语句
INSERT OVERWRITE TABLE target
SELECT col1,col2
FROM source;
INSERT OVERWRITE TABLE target
PARTITION (dt='20220702')
SELECT col1,col2
FROM source;
OVERWRITE 会覆盖原表或分区内容,若不想覆盖则选择INSERT INTO
动态分区插入方法如下:
INSERT OVERWRITE TABLE target
PARTITION (dt)
SELECT col1,col2, dt
FROM source;
多表插入:
FROM source
INSERT OVERWRITE TABLE t1
SELECT *
[GROUP BY]
SELECT *
[GROUP BY]
 CREATE TABLE IF NOT EXISTS targetASSELECT * FROM(...)a

17.6.5 表的修改

ALTER TABLE source RENAME target;
ALTER TABLE target ADD COLUMNS (col3 STRING);

17.6.6 表的丢弃

删除表数据但保留表的定义
TRUNCATE TABLE my_table;
删除表数据和元数据
DROP TABLE my_table;
创建相同定义表:
CREATE TABLE new_table LIKE old_table:

17.7

17.7.1 排序和聚集

排序oeder by, 聚集DISTRIBUTE BY ,但是当两者指向同一列时可用CLUSTER BY。

17.7.2 MapReduce 脚本

TRANSFROM, MAP, REDUCE可以在hive中调用脚本,示例如下:test1.py
import re
import sys
for line in sys.stdin:(year,temp,q) = line.strip().split()if (temp!='9999' and re.match('[01459]', q)):print("%s\t%s"%(year,temp))
hivesql语句如下:
hive -e ADD FILE /......./test.py
hive -e FROM record2 SELECT TRANSFORM(year,temp,q) USING 'test.py' AS year,temperature;
test2.py
import sys
(last_key, max_val) = (None , -sys.maxint)
for line in sys.stdin:(key, value) = line.strip().split('\t')if last_key and last_key != key:print('%s\t%s'%(last_key,max_val))(last_key, max_val) = (key , int(val))else:(last_key, max_val) = (key , max(max_val, int(val)))
if lst_key:print('%s\t%s'%(last_key,max_val))
 FROM (FROM records2 MAP year,temperature,qualityUSING 'test1.py'as year,temperature) map_outputREDUCE year,temperatureUSING 'test1.py'as year,temperature;

17.7.3 连接

1. 内连接
SELECT sales.* ,ting.*
FROM sales JOIN things ON (sales.id=things.id);
2. 外连接
SELECT sales.* ,ting.*
FROM sales LETF OUTER JOIN things ON (sales.id=things.id);
LEFT可换位RIGHT3. 半连接
SELECT * FROM things
WHERE tings.id IN (SELECT id FROM sales);
SELECT *
FROM things LEFT SEMI JOIN sales ON (sales.id=tings.id);
右表只能在on中出现

17.7.4 子查询

hive只允许子查询出现在select from
SELECT station,year,AVG(max_temperature)
FROM (
SELECT station,year,MAX(temperature) AS max_temperature
FROM records2
WHERE temperature != 9999 AND quality IN (0,1,4,5,9)
GROUP BY STATION ,year
)mt
GROUP BY station,year;
 外查询向访问子查询的结果,所以需要赋予别名mt。

17.7.5 视图

首先知道视图时SELECT语义定义的虚表。创建试图时并不会执行而是保存在metadata中只有在引用视图时,视图语义才会执行。
DESCRIBE EXTENDED view_name;该语句产看视图详细信息。
CREATE VIEW max_temperature (station,year,max_temperature)
AS
SELECT station,year,MAX(temperature) FROM valid_records
GROUP BY station,year;

17.8 用户定义函数

略,后续补充

读hadoop权威指南关于hive相关推荐

  1. 初识hadoop 读hadoop权威指南

    此处对hadoop的历史略过,有兴趣可自行百度. hadoop主要是用于处理大数据量(PB级别)的数据,hadoop提供了一个稳定的共享存储和分析系统.存储由hdfs实现,分析由mapreduce 实 ...

  2. Hadoop权威指南——关于Sqoop

    楔子 读<Hadoop权威指南第三版>笔记 第15章 关于Sqoop Hadoop平台的最大优势在于他支持使用不同形式的数据.HDFS能够可靠地存储日志和来自平台不同渠道的其他数据,Map ...

  3. 《Hadoop权威指南》第三章 Hadoop分布式文件系统

    <Hadoop权威指南>第三章 Hadoop分布式文件系统 目录 前言 HDFS的设计 HDFS的概念 命令行接口 Hadoop文件系统 Java接口 数据流 通过distcp并行复制 注 ...

  4. 《Hadoop权威指南》第二章 关于MapReduce

    <Hadoop权威指南>第二章 关于MapReduce 目录 使用Hadoop来数据分析 横向扩展 注:<Hadoop权威指南>重点学习摘要笔记 1. 使用Hadoop来数据分 ...

  5. Hadoop权威指南学习笔记一

    Hadoop简单介绍 声明:本文是本人基于Hadoop权威指南学习的一些个人理解和笔记,仅供学习參考,有什么不到之处还望指出.一起学习一起进步. 转载请注明:http://blog.csdn.net/ ...

  6. hadoop权威指南第三版 发布说明

    (此文摘自http://hadoopbook.com) hadoop权威指南第三版发行说明: 第三版会在2012年5月发行.你现在可以预定一份电子版,或购买"Early Release&qu ...

  7. 《Hadoop权威指南》读书笔记——MapeReduce入门

    1 MR的原理 MapeReduce(简称MR)的是大数据计算引擎,相对于Linux awk等工具而已,最大的优势是可以分布式执行,充分利用计算机的多核性能. 一个MR作业(job)是客户端需要执行的 ...

  8. Hadoop权威指南(中文版)

    Hadoop权威指南(中文版) 基本信息 原书名: Hadoop: The Definitive Guide 原出版社: O'Reilly Media 作者: (美) Tom White   译者: ...

  9. 《Hadoop权威指南》知识点整理4

    <Hadoop权威指南>知识点整理4 MapReduce部分 MapReduce的类型与格式_MapReduce类型 reduce函数的输入类型必须与map函数的输出类型相同 partit ...

最新文章

  1. kazoo源码分析:服务器交互的实现细节
  2. 用python画烟花-如何用python画烟花
  3. [No000092]SVN学习笔记3-Import/Checkout(迁入/迁出),GetLock(加锁)
  4. 【Android 安全】DEX 加密 ( Application 替换 | Android 应用启动原理 | ActivityThread 后续分析 | Application 替换位置 )
  5. 【Python】Matplotlib绘制正余弦曲面图
  6. python 趋势线计算式_[原创]图表趋势线公式系数的计算公式
  7. itext7相关使用
  8. 一款免费开源的文件加密软件Veracpryt---文件、文件夹加密功能介绍
  9. Radasm 配置goasm
  10. 最大类间方差法(大津法OTSU)
  11. Python修改Word文件设置所有图片都居中对齐
  12. 最简单PS双重曝光效果制作教程
  13. 计算机上网记录怎么清除,如何彻底清除电脑上网痕迹
  14. 图片服务器-存储图片技巧
  15. glob patterns
  16. 用python写一个文字版单机斗地主
  17. %3c %3e是什么编程语言,第1章 网站数据分析与网站统计工具基础.ppt
  18. 贵州学计算机,在贵州省计算机学校学习计算机专业如何?
  19. Jxl解析Excel表格数据
  20. 如何提升数据思维能力?

热门文章

  1. 顺丰速运——深圳二面(19分钟)
  2. SQL Server关于AlwaysOn的理解
  3. SQLServer 2012 Always on配置全过程
  4. 和风天气API 版本6和版本7
  5. 阿里数据中台:组合式or颠覆式创新,企业要不要跟风
  6. 10676 涂鸦跳跃(sort)
  7. Asp.net网站iis设置起始页
  8. ES6模块体系及DDN区块链设计开发规范
  9. 惊了!这是一篇《IOC》说明书?
  10. uniapp 自定义弹层时,底部页面滚动而弹层不能滚动