专栏首页巡山猫说数据「基础」SQL-Hive中的select from 解析

「基础」SQL-Hive中的select from 解析

今天我们来讲讲Hive中最常用的 select from 语句知识要点。

Hive系列文章预计10-20篇,主要讲数据分析中最基础的SQL技能。每周定期更新,欢迎关注公众号。

01-查询表中的内容

查询指定的某一列或某几列,命令如下:

SELECT 列名1,列名2,…… FROM 表名;

查询表中的所有字段时,可以使用*代表所有字段。星号(*)是选取所有列的快捷方式。命令如下:

SELECT * FROM 表名;

如果我们想查询表 t_od_use_cnt 中的所有的user_id和use_cnt,具体命令如下:

SELECT user_id
      ,use_cnt
FROM app.t_od_use_cnt;

备注:app是数据库名,如果当前查询表与当前使用数据库一致,可以省略不写

02-Hive严格模式

在Hive中这样写虽然语法正确(不加分区),但在实际工作中这样写很可能会报错。

因为Hive中的表一般数据量极大,为了防止用户误操作进行全表扫描,可以设置为查询分区表时必须加入分区限制。比如这里我们的分区字段是date_8这个日期字段,工作中的表会要求我们必须限定查询哪几天的分区数据。这里我们可以输入设置参数进行模拟,命令如下:

hive (app)> set hive.mapred.mode;
hive.mapred.mode=nonstrict
hive (app)> set hive.mapred.mode=strict;
hive (app)> set hive.mapred.mode;
hive.mapred.mode=strict

然后我们重新执行上面的查询语句,报错如下:

hive (app)> SELECT user_id
          >       ,use_cnt
          > FROM app.t_od_use_cnt;
FAILED: SemanticException [Error 10041]: No partition predicate found for Alias "t_od_use_cnt" Table "t_od_use_cnt"
hive (app)> 

如下使用where语句限定分区即可解决这个问题:

SELECT user_id
      ,use_cnt
FROM app.t_od_use_cnt
WHERE date_8 = '20210420';

03-limit限制查询返回行数

上面的查询语句会返回查询到的所有数据,但有时候我们只是要确认一下表中的数据内容,或者要指定行数据,比如只要100行,这时只需要在查询语句后加上(limit 数字)即可。

查询表t_od_use_cnt中前5行数据,命令如下:

SELECT user_id
      ,use_cnt
FROM app.t_od_use_cnt
WHERE date_8 = 20190101 Limit 5;

运行结果如下:

hive (app)> SELECT user_id
          >       ,use_cnt
          > FROM app.t_od_use_cnt
          > WHERE date_8 = 20210420 Limit 5;
OK
user_id  use_cnt
10000  6
10001  49
10002  23
10003  1
10004  29
Time taken: 0.829 seconds, Fetched: 5 row(s)
hive (app)>

04-列四则运算

在查询时可以对数值类型的字段进行加减乘除和取余等四则运算

下面我们将表t_od_use_cnt中use_cnt列和is_active列相乘得到一个新列,其他用法依次类推。

hive (app)> SELECT user_id
          >       ,use_cnt
          >       ,is_active
          >       ,use_cnt * is_active
          > FROM app.t_od_use_cnt
          > WHERE date_8 = 20210420 Limit 5;
OK
user_id  use_cnt  is_active  _c3
10000  6  1  6
10001  49  1  49
10002  23  1  23
10003  1  0  0
10004  29  1  29
Time taken: 0.124 seconds, Fetched: 5 row(s)
hive (app)>

05-列别名

可以看到上面的例子中我们通过两个列相乘人为制造出一个新列,系统默认将其列名起为_c3。通常有必要给这些新产生的列起一个别名。已有列的列名如果含义不清晰也可以通过起别名的方式进行更改。不过别名只在本条SQL语句中生效,不影响原表中的字段名。

这里顺便介绍一下字段命名规则:

1.不能和已有字段重复

2.只能包括小写字母(a-z)、数字(0-9)、下划线(_)

3.以字母开头

4.单词之间用下划线_分割

这里我们将别名起为active_use_cnt,在列后面加 AS active_use_cnt即可。另AS可以省略,只用空格分隔别名也可以生效

hive (app)> SELECT user_id
          >       ,use_cnt
          >       ,is_active
          >       ,use_cnt * is_active AS active_use_cnt
          > FROM app.t_od_use_cnt
          > WHERE date_8 = 20210420 Limit 5;
OK
user_id  use_cnt  is_active  active_use_cnt
10000  6  1  6
10001  49  1  49
10002  23  1  23
10003  1  0  0
10004  29  1  29
Time taken: 0.239 seconds, Fetched: 5 row(s)
hive (app)>

本文分享自微信公众号 - 巡山猫说数据(sven994777),作者:巡山猫

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2021-04-30

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 数据仓库组件:Hive环境搭建和基础用法

    Hive是基于Hadoop的一个数据仓库工具,用来进行数据提取、转化、加载,是一个可以对Hadoop中的大规模存储的数据进行查询和分析存储的组件,Hive数据仓...

    知了一笑
  • 实操用Hive分析大数据事半功倍

    一般我们分析大数据,也许会想到Spark、Storm,但前提得会JAVA等编程语言,不然拿到数据也无法做分析。而Hive而解决了这个问题,只需要会Sql语言即可...

    希望的田野
  • 0464-如何离线分析HDFS的FsImage查找集群小文件

    随着Hadoop集群数据量的增长,集群中也同时会存在大量的小文件,即文件Size比HDFS的Block Size(默认128MB)小的多的文件。Hadoop集群...

    Fayson
  • Impala TPC-DS基准测试

    Fayson
  • HIVE入门_2

    HIVE 是数据仓库,本质上也是数据库。 数据仓库 概念 就是一个数据库。 数据仓库是一个面向主题的(商品的推荐系统内容是商品的信息)、集成的(分散型地...

    用户1147754
  • 大数据干货系列(五)-Hive总结

    Hive总结 一、本质 Hive基于一个统一的查询分析层,通过SQL语句的方式对HDFS上的数据进行查 询、统计和分析。 二、四大特点** • Hive本身不存...

    企鹅号小编
  • Hadoop学习笔记—17.Hive框架学习

      Hive 是建立在 Hadoop 基础上的数据仓库基础构架。它提供了一系列的工具,可以用来进行数据提取转化加载(ETL),这是一种可以存储、查询和分析存储在...

    Edison Zhou
  • hive学习笔记之一:基本数据类型

    https://stackoverflow.com/questions/37863194/insert-timestamp-into-hive/37868132

    程序员欣宸
  • 一脸懵逼学习Hive(数据仓库基础构架)

    Hive是什么?其体系结构简介* Hive的安装与管理* HiveQL数据类型,表以及表的操作* HiveQL查询数据*** Hive的Java客户端** ...

    别先生
  • 《Hive使用教程》--- 大数据系列

    1. Hive起源于Facebook,它使得针对Hadoop进行SQL查询成为可能,从而非程序员也可以方便地使用。Hive是基于Hadoop的一...

    用户3467126
  • Spark SQL | 目前Spark社区最活跃的组件之一

    Spark SQL是一个用来处理结构化数据的Spark组件,前身是shark,但是shark过多的依赖于hive如采用hive的语法解析器、查询优化器等,制约了...

    大数据学习与分享
  • 对网页数据的大数据分析实操案例

    日志中包括很多数据,我们今天只用到IP、帐号、访问的网址作为示例。在真实的项目中(如某宝),通过javascript的事件,可以将你在某个商品链接上停留的时间都...

    希望的田野
  • SparkSql官方文档中文翻译(java版本)

    Spark SQL是Spark的一个组件,用于结构化数据的计算。Spark SQL提供了一个称为DataFrames的编程抽象,DataFrames可以充当分布...

    用户3003813
  • 如何使用Hive集成Solr?

    我是攻城师
  • 算法工程师-SQL进阶:集合之间的较量

    集合在数据库领域表示记录的集合。SQL是一门面向集合的语言,四则运算里的和、差、积已经加入到标准SQL,但由于其标准化进程比较缓慢,一些集合运算在主流的数据库如...

    小萌哥
  • 【Hive】Hive介绍及Hive环境搭建

    版权声明:本文为博主原创文章,转载请注明出处。 https://blog.csdn.net/...

    魏晓蕾
  • Hive入门讲解

    Hive是基于Hadoop的一个数据仓库工具,可以将结构化的数据文件映射为一张数据库表,并提供类SQL查询功能。

    用户1212940
  • Hive万亿级表联合分析故障排查与优化过程

    随着大数据技术日趋成熟,行业生态愈发完善,腾讯云大数据团队服务的大客户越来越多。在笔者服务的众多大客户之中,PB级海量数据已经成为常态。笔者负责大数据技术支持的...

    mikealzhou
  • 【Spark篇】---SparkSQL初始和创建DataFrame的几种方式

              Hive是Shark的前身,Shark是SparkSQL的前身,SparkSQL产生的根本原因是其完全脱离了Hive的限制。

    LhWorld哥陪你聊算法

扫码关注云+社区

领取腾讯云代金券