Hive数据查询(基本查询、RLIKE正则匹配、union联合、Sampling采样、Virtual Columns 虚拟列)

本文介绍了HiveSQL中的基本查询操作,如全选、单列查询、数据量统计等,以及RLIKE正则表达式匹配、union联合查询、数据抽样(随机分桶和数据块抽样)和虚拟列的使用。这些技巧对于Hive数据库管理和数据分析至关重要。
摘要由CSDN通过智能技术生成

目录

一、基本查询

        1.查询所有

        2.查询单列

        3.查询数据量

        4.过滤(where)

        5.查找最大值(max)

        6.分组统计(count)

        7.分组查找(group by)

        8.计算均值(avg)

        9.分组过滤(having)

        10.关联表(join)

        11.左外关联(left join)

二、RLIKE正则匹配

三、union联合查询

        1.union基础查询

        2.去重

        3.不去重

        4.将union结果作为from对象

        5.用于insert select

四、数据抽样(tablesample)

        (1)随机分桶抽样

                语法:

        (2)基于数据块抽样

五、虚拟列


一、基本查询

        1.查询所有

                select * from table_name;

        2.查询单列

                select column_name from table_name;

        3.查询数据量

                select count(*) from table_name;

        4.过滤(where)

                select * from table_name where column_name like ' XXX';

        5.查找最大值(max)

                select * from table_name order by column_name desc limit number;

        6.分组统计(count)

                select count(*) as 别名 from table_name group by column_name;

        7.分组查找(group by)

                select max(column_name) as 别名 from table_name group by column_name; 

        8.计算均值(avg)

                select avg(column_name) from table_name group by column_name;

        9.分组过滤(having)

                select avg(column_name) from table_name group by column_name having 过滤条件;

        10.关联表(join)

                select a.column1,a.column2,b.column1,b.column2 from a join b on 关联条件;

        11.左外关联(left join)

                select a.column1,a.column2,b.column1,b.column2 from a left join b on 关联条件;

二、RLIKE正则匹配

正则规则字符
字符匹配示例
.任意单个字符jav.匹配java
[ ][ ]中任意一个字符java匹配j[ abc ]va
^在[ ]内的开头,匹配除[ ]内字符之外的任意一个字符java匹配j[ ^b-f ]va
|x | y 匹配x或y
\将下一个字符标记为特殊字符、文本、反向引用或八进制转义符\( 匹配 (
$匹配输入字符串结尾的位置,如果设置RegExp对象的Multiline属性,$还会与“\n”或"\r"之前的位置匹配;$匹配位于一行及外围的;号
*0次或多次匹配前面的字符zo*匹配zoo或z
+一次或多次匹配前面的字符zo+匹配zo或zoo
0次或一次匹配前面的字符zo?匹配z或zo
p{n}n是非负整数,正好匹配n次

o{2}匹配food中的两个o

p{n,}

至少匹配n次

o{2,}匹配foood中的所有o
p{n,m}m和n是非负整数,其中n<=m,匹配至少n次,至多m次o{1,3}匹配fooood中三个o
\p{P}一个标点字符!“#$%&+,-./:;<=>?@[\]^_'{|}~”J\p{P}a匹配J?a
\b匹配一个字边界va\b匹配java中的va,但匹配不到javar中的va
\B非字边界匹配va\B匹配javar中va,但匹配不到java中的va
\d数字字符匹配1[\\d]匹配13
\D非数字字符匹配[\\D]java匹配Jjava
\w单词字符java匹配[\\w]ava
\W非单词字符$java匹配[\\W]java
\s空白字符Java 2匹配java\\s2
\S非空白字符java匹配j[\\S]va
\f匹配换页符等效于\x0c和\cJ
\n匹配换行符等效于\x0a和\cJ

        例:查找广东省的数据

        例:查找用户地址是:XX省 XX市 XX区

        例:查找用户姓为:张、王、邓

        例:查找手机号符合:188***0***规则

三、union联合查询

        union用于将多个select的结果组合成单个结果集。每个select语句返回的列的数量和名称必须相同,否则,将会引发架构错误。

        基础语法:

                select ...

                        union [ all ]

                select ...

        1.union基础查询

        2.去重

                语法:

                        select ... union select...

        3.不去重

                语法:

                        select ... union all select....

        4.将union结果作为from对象

                select column from (select ... union [all] select ...)

        5.用于insert select

四、数据抽样(tablesample)

        (1)随机分桶抽样
                语法:

                select ... from table_name tablesample(bucket x out of y on (colname | rand()))

        注释:y表示将表数据随机划分成y份(y个桶)

                x表示从y里面随机抽取x份数据作为取样

                colname 表示随机的依据基于某个列的值(建议分桶表使用)

                rand()表示随机的依据基于整行(普通表使用)

        注意:

                使用colname作为随机依据,则其他条件不变下,每次抽样的结果一致

                使用rand()作为随机依据,每次抽样结果都不同

        (2)基于数据块抽样

                语法:

                        select ... from table_name tablesample(num rows | num percent | num(K|M|G));

                       num rows 表示抽取num条数据

                        num percent 表示抽样num百分百比例数据

                        num(K|M|G)表示抽取num大小的数据,单位可以是K、M、G表示KB、MB、GB

                注意:

                        使用这种语法抽样,条件不变的话,每一次抽样的结果都一致,无法做到随机,只是按照数据顺序从前向后取。

五、虚拟列

        虚拟列是Hive内置的可以在查询语句中使用的特殊标记,可以查询数据本身的详细参数。

        目前Hive可用3个虚拟列:

                input_ _file_ _name,显示数据行所在的具体文件

                block_ _offset_ _inside_ _file,显示数据行所在文件的偏移量

                row_ _offset_ _inside_ _block,显示数据所在的HDFS块的偏移量看,需要运行语句

SET hive.exec.rowoffset=true

                虚拟列同样适用于where,group等查询语句

        

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

吗喽也是命

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值