1. 普通查询 :

对应与不同数据结构的查询结果

1.1 STRUCT 形式的查看方式 :

## 创建案例并导入数举hive> CREATE TABLE message(id TINYINT, one STRUCT<name:STRING, age:INT, grade:INT>)> ROW FORMAT DELIMITED> FIELDS TERMINATED BY ' '> COLLECTION ITEMS TERMINATED BY ':'> STORED AS TEXTFILE;
OK
Time taken: 0.564 seconds
hive> show tables;
OKhive> LOAD DATA LOCAL INPATH '/home/saligia/tmp/message' INTO TABLE message;
Loading data to table saligia.message
OK
Time taken: 0.578 seconds## 查询hive> select * from message;
OK
1   {"name":"jack","age":20,"grade":87}
2   {"name":"saligia","age":21,"grade":63}
3   {"name":"smil","age":20,"grade":92}
4   {"name":"wailk","age":18,"grade":74}
5   {"name":"carkdr","age":19,"grade":85}
Time taken: 0.079 seconds, Fetched: 5 row(s)## 指定 Struct 内部内容hive> select id, one.name from message;
OK
1   jack
2   saligia
3   smil
4   wailk
5   carkdr

1.2 ARRAY 形式的查看方式:

## 创建案例并导入数举hive> CREATE TABLE arrtab(id TINYINT, name ARRAY<STRING>)> ROW FORMAT DELIMITED> FIELDS TERMINATED BY ' '> COLLECTION ITEMS TERMINATED BY ':'> STORED AS TEXTFILE;
OK
Time taken: 0.081 secondshive> LOAD DATA LOCAL INPATH '/home/saligia/tmp/arrtab' INTO TABLE arrtab;
Loading data to table saligia.arrtab
OK## 查询内容
hive> select * from arrtab;
OK
1   ["dasf","faklsf","wer","qwrd","asf"]
2   ["ewrk","dasfk","sakfeir"]
3   ["uowre","sdafpfda","dsa","asdfj",""]
4   ["sdjfk","wersa","qweprc","smkl","mear","ewras","make",""]
5   ["meaeaiw"]
Time taken: 0.073 seconds, Fetched: 5 row(s)## 指定 array 索引hive> select id, name[0] from arrtab;
OK
1   dasf
2   ewrk
3   uowre
4   sdjfk
5   meaeaiw
Time taken: 0.076 seconds, Fetched: 5 row(s)

1.3 Map 的查看形式:

## 创建案例并导入数据hive> CREATE TABLE IF NOT EXISTS one (id TINYINT, context MAP<STRING, STRING>)> ROW FORMAT DELIMITED> FIELDS TERMINATED BY ' '> MAP KEYS TERMINATED BY ':'> STORED AS TEXTFILE;
OK
Time taken: 1.435 secondshive> LOAD DATA LOCAL INPATH '/home/saligia/tmp/one' INTO TABLE one;
Loading data to table default.one
OK
Time taken: 0.633 seconds## 查询方式hive> select * from one;
OK
12  {"name":"jack"}
45  {"text":"not"}
21  {"addr":"china"}
32  {"who":"sorry"}
Time taken: 0.674 seconds, Fetched: 4 row(s)## 获取根据 key 获取 value hive> select id, context['name'] from one;
OK
12  jack
45  NULL
21  NULL
32  NULL

2. 排序和聚集 :

2.1 ORDER BY

order by 会对输入做全局排序,因此只有一个reducer(多个reducer无法保证全局有序)
只有一个reducer,会导致当输入规模较大时,需要较长的计算时间。

set hive.mapred.mode=strict;

与数据库中 order by 的区别在于在 hive.mapred.mode=strict 模式下 必须指定 limit 否则执行会报错。

hive (test)> select id from linux where date_code=4 order by id;
FAILED: SemanticException 1:48 Order by-s without limit are disabled for safety reasons. If you know what you are doing, please make sure that hive.strict.checks.large.query is set to false and that hive.mapred.mode is not set to 'strict' to enable them.. Error encountered near token 'id'

原因: 在order by 状态下所有数据会到一台服务器进行reduce操作也即只有一个reduce,如果在数据量大的情况下会出现无法输出结果的情况,如果进行 limit n ,那只有 n * map number 条记录而已。只有一个reduce也可以处理过来。

默认:

set hive.mapred.mode=nostrict;

2.2 sort by

  • sort by不是全局排序,其在数据进入reducer前完成排序.

  • 因此,如果用sort by进行排序,并且设置mapred.reduce.tasks > 1, 则sort by只保证每个reducer的输出有序,不保证全局有序。

  • sort by 不受 hive.mapred.mode 是否为strict ,nostrict 的影响

  • sort by 的数据只能保证在同一reduce中的数据可以按指定字段排序。

  • 使用sort by 你可以指定执行的reduce 个数 (set mapred.reduce.tasks=[number]) 对输出的数据再执行归并排序,即可以得到全部结果。

2.3 distribute by

按照指定的字段对数据进行划分到不同的输出reduce / 文件中。

hive (test)> select * from linux distribute by date_code sort by id;

2.4 Cluster By

cluster by 除了具有 distribute by 的功能外还兼具 sort by 的功能。

但是排序只能是倒序排序,不能指定排序规则为asc 或者desc。

2.5 LIMIT 限制返回的行数:

hive> SELECT * FROM message LIMIT 2;
OK
1   {"name":"jack","age":20,"grade":87}
2   {"name":"saligia","age":21,"grade":63}

2.6 CASE WHEN THEN

hive> SELECT sum(CASE one.name WHEN 'jack' THEN id ELSE 0 END), sum(CASE one.name WHEN 'saligia' THEN id ELSE 0 END) FROM message ;OK
1   2

3. 函数

3.1 数学函数

  • int round(double a) ## 返回指定数值的近似值
hive> select round(12.5) from one;
13.0
  • int round(double a, int n) ## 返回指定值的近似值, 保留 n 位小数
hive> select round(12.213, 2) from one;
12.21
  • int floor(double a) ## 返回小于 a 的最大整数
hive> select floor(12.5) from one;
12
  • int ceil(double a) ## 返回大于 a 的最小整数
hive> select ceil(12.5) from one;
13
  • double rand() ## 生成随机数
hive> select rand() from one;
0.727761042307089

3.2 聚合函数:

  • int count(*) ## 求总行数
hive> select count(*) from message;
5
  • double sum(col) ## 指定列的和
hive> select sum(id) from message;
15
  • double avg(col) ## 求平均值
hive> select avg(id) from message;
3.0
  • double min(col) ## 求最小值
  • double max(col) ## 求最大值
hive> select message.* from message, (select max(id) id from message) m where message.id=m.id;
5   {"name":"carkdr","age":19,"grade":85}

4. 表连接

4.1 内连接

hive> SELECT test.id, test.context, secure.context FROM test JOIN secure ON (test.id = secure.id);

说明:

  • Hive 只支持等值连接, 这意味着连接谓词中只能使用等号。

  • 在 Hive 中, 可以在连接谓词中使用 AND 关键字分隔的一系列表达式来链接多个列

4.2 外连接

  1. 左外连接 : LEFT OUTER JOIN ON
  2. 右外连接 : RIGHT OUTER JOIN ON
  3. 全外连接 : FULL JOIN ON
hive> SELECT test.id,test.context,secure.context FROM test LEFT OUTER JOIN secure ON (test.id = secure.id);

4.3 半连接

  • Hive 不支持 IN 子查询。
  • HIVE 使用 LEFT SEMI JOIN ON 来达到相同的效果。
hive> SELECT test.id,test.context FROM test LEFT SEMI JOIN secure ON(test.id=secure.id);

说明:

写 LEFT SEMI JOIN ON 查询时必须遵循一个限制: 右表只能出现在 ON 子句中出现。

4.4 Map 连接:

hive> SELECT /*+ MAPJOIN(test)*/ * FROM test JOIN secure ON (test.id=secure.id);
  • 通过 /+ MAPJOIN()/ 把较小表放入每个 mapper 的内存来执行链接操作。
  • Map 连接可以利用分桶的表, 因为作用与桶的 mapper 加载右侧表中对应的桶即可执行链接。

4.5 子查询

hive>  SELECT i.id,i.context FROM (SELECT id, context FROM one) i JOIN test ON (i.context = test.context);

5. 视图

  • 在 Hive 中, 创建视图时并不把”物化”, 存储到磁盘上。
  • 相反, 视图的 SELECT 语句只是在执行引用视图的语句时才执行。
  • 如果一个视图要对”基表”进行大规模的变换, 或视图的查询会频繁执行

11-hive数据查询方式相关推荐

  1. 理想汽车 x StarRocks:为 Hive 数据查询插上极速之翼

    作者 张博晗 理想汽车大数据平台-高级大数据开发 负责公司级数据集成平台的设计和开发,以及 OLAP 平台的体系化建设 对于致力创造移动的家.成为全球领先的智能电动车企业的理想汽车,所要管理的数据规模 ...

  2. nba2k19数据查询方式

    关注公众号:nba2kol2球员数据测评  回复球员姓名即可 公众号介绍:支持NBA2KOL2.NBA2K19游戏数据查询.热区查询和多热区筛选.球员生涯查询.徽章查询.位置.阵容随机匹配.球队查询. ...

  3. Spark读取Hive数据的两种方式与保存数据到HDFS

    Spark读取Hive数据的两种方式与保存数据到HDFS Spark读取Hive数据的方式主要有两种 1. 通过访问hive metastore的方式,这种方式通过访问hive的metastore元数 ...

  4. JPA踩坑笔记(一) - 数据查询的两种方式

    本文介绍一下JPA常见的两种查询方式. 注:数据库为Oracle 1.前置准备 1.引入jar包 使用JPA,首先引入jar包,一个是JPA,另一个是数据库驱动,我使用的是Oracle数据库. < ...

  5. hive常用功能:Hive数据导入导出方式

    作为数据仓库的Hive,存储着海量用户使用的数据.在平常的Hive使用过程中,难免对遇到将外部数据导入到Hive或者将Hive中的数据导出来.今天主要就来学习一下Hive的几种数据导入和导出的方式. ...

  6. Hive数据连接与函数(2)

    1 数据连接 内连接:保留左表和右表连接成功的数据信息,连接未成功则不保留该数据 select * from hive_day03.orders as o join users u on o.user ...

  7. Hibernate Query数据查询

    2019独角兽企业重金招聘Python工程师标准>>> 主要由三种查询:HQL查询.Criteria条件查询.SQL查询. 以下分别讲解 1. HQL查询 HQL(Hibernate ...

  8. Hibernate数据查询教程

    Hibernate数据查询教程 转载▼9.1  Hibernate数据查询 数据查询与检索是Hibernate的一个亮点.Hibernate的数据查询方式主要有3种,它们是: l         Hi ...

  9. Hibernate 查询方式(HQL/QBC/QBE)汇总

    作为老牌的 ORM 框架,Hibernate 在推动数据库持久化层所做出的贡献有目共睹. 它所提供的数据查询方式也越来越丰富,从 SQL 到自创的 HQL,再到面向对象的标准化查询. 虽然查询方式有点 ...

最新文章

  1. 小技巧——让光驱符号定位在硬盘分区之后
  2. LoadRunner的Socket脚本关联小技巧
  3. linux 内核 3.18,Linux Kernel 3.18 正式版发布下载
  4. Chrome的一点小问题
  5. 跟我一起数据挖掘(10)——HP Vertica
  6. 2017-9-15-Linux移植:WinSCP软件 SSH Server开启
  7. c语言中1B是多少,C语言1、C语言中,运算对象必须是整型的运算符是【】A./B-查字典问答网...
  8. vue4 跳转外部链接_vue跳转到外部链接
  9. MongoDB C#:DateTimeOffset到BsonType DateTime的序列化程序
  10. VALSE学习(五):看图说话-Visual Question Answering as Reading Comprehension
  11. 敲黑板!从零开始,小白如何通过Kaggle竞赛提高数据分析能力!
  12. servlet到底是什么?
  13. C#窗体-个人简历生成(自己设计并编写一个 Windows 应用程序,要求用到TextBox、GroupBox、RadioButton )
  14. 横向合计代码 锐浪报表_巧用锐浪报表:用报表脚本实现动态显示小数位数
  15. radon变换(c++、OpenCV实现)
  16. html5 判断手机横竖屏,移动端判断横竖屏的5种解决方案
  17. 怎么做简单版ps碎片飞溅效果
  18. 策略迭代与值迭代的区别
  19. 使用Python批量下载哨兵一号(sentinel-1)的精密轨道数据(precise orbit data)
  20. mysql 查看slave状态_解读show slave status 命令判断MySQL复制同步状态

热门文章

  1. Shader山下(十五)标准库函数
  2. 《Linux操作系统 - RK3288开发笔记》第2章 G-3288-02开发环境搭建
  3. 页面刷新指定到原先滚动条位置
  4. C语言中编译预处理命令作用,C语言预处理命令详解
  5. torch tensor去掉1维_自制番茄酱,只加糖是不对的,牢记1点技巧,番茄酱沙甜更好吃...
  6. Google 出的C++轻量级日志库_GLog_了解_使用
  7. 攻略:手把手教你如何看懂以太坊区块链浏览器(配图更清晰)
  8. 潮光讲堂--3步搞懂光电耦合器
  9. c语言中的.c文件和.h文件
  10. 蔡盈芳:企业数字档案馆整体架构及其层次模型研究