当前位置: 首页 > news >正文

HIVE --- 高级查询

目录

CTE和嵌套查询

嵌套查询

关联查询(join)

MapJoin

MapJoin操作在Map端完成

开启MapJoin操作

MAPJOIN不支持的操作

union

数据交换(import/export)

数据排序

order by

sort by

distribute  by

cluster by


CTE和嵌套查询

-- CTE语法
WITH t1 AS (SELECT …) SELECT * FROM t1;
-- CTE演示
with tab1 as (select id,name,age from people) 
select * from tab1;

嵌套查询

-- 嵌套查询示例
SELECT * FROM (SELECT * FROM employee) ;

关联查询(join)

指对多表进行联合查询

JOIN用于将两个或多个表中的行组合在一起查询

类似于SQL JOIN,但是Hive仅支持等值连接 

JOIN发生在WHERE子句之前

内连接:inner join

外连接:outer join

        right join, left join, full outer join

交叉连接:cross join

隐式连接:Implicit join

MapJoin

MapJoin操作在Map端完成

  • 小表关联大表
  • 可进行不等值连接

开启MapJoin操作

set hive.auto.convert.join = true(默认值)

运行时自动将连接转换为MapJoin

MAPJOIN不支持的操作

在union all, lateral view, group by/join/sort by/cluster by/distribute by等操作后面

在union, join以及其他 MapJoin之前

union

  • 所有子集数据必须具有相同的名称和类型

UNION ALL:合并后保留重复项

UNION:合并后删除重复项

  • 可以在顶层查询中使用 order by, sort by , cluster by, distribute  by 和limit适用于合并后的整个结果
  • 集合其他操作可以使用 join、outer join来实现 (差集、交集)

数据交换(import/export)

import 和 export用于数据导入和导出

除数据库,可导入导出所有数据和元数据

导出数据(export)
 

export table employee to '/tmp/output3';
export table employee_partitioned partition (year=2014, month=11) to '/tmp/output5';

导入数据(import)

import table employee from '/tmp/output3';
import table employee_partitioned partition (year=2014, month=11) from '/tmp/output5';

数据排序

order by

order by (asc|desc)类似于标准SQL

只使用一个Reducer执行全局数据排序

速度慢,应提前做好数据过滤 支

持使用case when或表达式

支持按位置编号排序

select employee_id,name
from employee_id
order by employee_id;

 

sort by

sort by对每个Reducer中的数据进行排序

当Reducer数量设置为1时,等于order by

排序列必须出现在select column列表中

distribute  by

distribute  by类似于标准SQL中的group by

根据相应列以及对应reduce的个数进行分发

  •     默认是采用hash算法
  •     根据分区字段的hash码与reduce的个数进行模除

通常使用在SORT BY语句之前

select name,skills_score,depart_title
from employee_id
distribute by depart_title sort by skills_score desc;

cluster by

cluster by=distribute  by+sort by

不支持asc|desc

排序列必须出现在select column列表中

为了充分利用所有的Reducer来执行全局排序,可以先使用cluster by,然后使用order by

SELECT name, employee_id
FROM employee_id CLUSTER BY name;

 

http://www.lryc.cn/news/18847.html

相关文章:

  • 【手撕源码】vue2.x双向数据绑定原理
  • Allegro如何显示层叠Options和Find操作界面
  • 【数据结构】双向链表
  • Editor工具开发基础三:自定义组件菜单拓展 CustomEditor
  • 拒绝摆烂!神仙网站Python自学,一路从入门闯到最后,边学边玩
  • Linux基础命令-locate快速查找文件
  • 揭穿数据分析的六大谎言
  • LinkSLA智能运维技术派-Redis的监控
  • Hugging face 模型微调学习:T5-base的微调
  • JavaScript 测试 Prototype
  • pnpm / yarn / npm管理依赖包
  • 注意力机制详解系列(一):注意力机制概述
  • 搜索引擎 Elasticsearch 的三大坑
  • 运营级手机直播平台源码 短视频直播带货APP源码
  • http/HTTPS相关的一些知识
  • MySQL高可用 集群(MHA)
  • 【JavaScript速成之路】JavaScript运算符
  • 计网个人作业05
  • 码匠 × OpenAI :快速生成 SQL 语句,提升开发效率!
  • 电脑显示屏不亮但是主机已开机?5种原因以及解决方案
  • 公司项目vue cli2升级到vue cli3
  • 流程图培训
  • 编写使用多buffer的应用程序
  • 【java 8】强大的 Stream API
  • 自动驾驶仿真:ECU TEST自动化测试常用API调用
  • notepad++中使用正则表达式
  • 什么蓝牙耳机打游戏好?打游戏好用的无线蓝牙耳机
  • 基于appium的app自动化测试框架
  • 【拿好了!Linux 运维必备的 13 款实用工具!】
  • 软考中级--嵌入式系统设计师考试培训教程开始了