0;ocate(字符串,字段名),如果包含,返回大于0的index位置;否则,返回0;_hive 包含某个字符">
当前位置:   article > 正文

Hive常用操作_hive 包含某个字符

hive 包含某个字符

1. locate

判断 name 字段中是否包含字符串 “aaa”:

select * from temp where locate("aaa", name) > 0;
  • 1

ocate(字符串,字段名),如果包含,返回大于0的index位置;否则,返回0;

2.in

select * from temp where event_day in ('20201212', '20201213');
  • 1

3. 不等于

hive 中‘不等于’不管是用! 或者<>符号实现,都会将空值即null过滤掉,此时要用:

where (white_level<>'3' or  white_level is null) 
  • 1

或者

where (white_level!='3' or white_level is null )
  • 1

来保留null 的情况。

4.计算字符串长度

select * from temp where length(item)=7;
  • 1

5.计算uv

SELECT os_name, COUNT(DISTINCT cuid) as uv
FROM user_action_log
WHERE event_day = '20160901'
    AND os_name in ('android', 'iphone')
GROUP BY os_name
  • 1
  • 2
  • 3
  • 4
  • 5

6. if

语法:

 if(boolean testCondition, T valueTrue, T valueFalseOrNull)
  • 1

返回值T

说明: 当条件testCondition为TRUE时,返回valueTrue;否则返回valueFalseOrNull

举例:

SELECT if(val1 is not null and val1 <> '', val2, val3) as val
FROM user_action_log
  • 1
  • 2

7. get_json_object

(1)最简单的形式

语法:

get_json_object(json_string, '$.key')
  • 1

说明:解析json的字符串json_string,返回以’key’为key对应的value。如果输入的json字符串无效,那么返回NULL。这个函数每次只能返回一个数据项。

举例:

select get_json_object('{"key1":"val1","key2":"val2","key3":"val3","key4":"val4"}',"$.key1");
  • 1

结果:

val1
  • 1

(2)json里有列表的情况

  • 拿到列表里第一个item的"NAME"
SELECT get_json_object('[{"NAME":"张三","ID":"1"},{"NAME":"李四","ID":"2"}]','$[0].NAME');
  • 1

结果:

"张三"
  • 1
  • 拿到列表里所有item的"NAME"
SELECT get_json_object('[{"NAME":"张三","ID":"1"},{"NAME":"李四","ID":"2"}]','$[].NAME');
  • 1

结果:

["张三", "李四"]
  • 1
  • 既拿到名字又拿到年龄
select  get_json_object('{"name":"zhangsan","age":18}','$.name'), get_json_object('{"name":"zhangsan","age":18}','$.age');
  • 1

HIVE解析json数组
HIVE获取json字段特定值(单个json或者json数组)

8. regexp_replace

语法:

regexp_replace(target_item, a, b)
  • 1

说明:将target_item中的a替换成b

举例:

regexp_replace(target_item, '\n', '')
  • 1

将target_item中的换行符去掉

9. 数据抽样

(1)数据块抽样

  • tablesample(n percent)
    根据hive表数据的大小按比例抽取数据,并保存到新的hive表中。如:抽取原hive表中10%的数据
    (注意:测试过程中发现,select语句不能带where条件且不支持子查询,可通过新建中间表或使用随机抽样解决)
create table xxx_new 
as 
  select * 
  from xxx 
  tablesample(10 percent)
  • 1
  • 2
  • 3
  • 4
  • 5
  • tablesample(n M)
    指定抽样数据的大小,单位为M。
  • tablesample(n rows)
    指定抽样数据的行数,其中n代表每个map任务均取n行数据,map数量可通过hive表的简单查询语句确认(关键词:number of mappers: x)

(2)分桶抽样

hive中分桶其实就是根据某一个字段Hash取模,放入指定数据的桶中,比如将表table_1按照ID分成100个桶,其算法是hash(id) % 100,这样,hash(id) % 100 = 0的数据被放到第一个桶中,hash(id) % 100 = 1的记录被放到第二个桶中。创建分桶表的关键语句为:CLUSTER BY语句。

分桶抽样语法:

TABLESAMPLE (BUCKET x OUT OF y [ON colname])
  • 1

其中x是要抽样的桶编号,桶编号从1开始,colname表示抽样的列,y表示桶的数量。
例如:将表随机分成10组,抽取其中的第一个桶的数据

select * 
from table_01 
tablesample(bucket 1 out of 10 on rand())
  • 1
  • 2
  • 3

(3)随机抽样(rand()函数)

  • 使用rand()函数进行随机抽样
    limit关键字限制抽样返回的数据,其中rand函数前的distribute和sort关键字可以保证数据在mapper和reducer阶段是随机分布的,案例如下:
select * 
from table_name 
where col=xxx 
distribute by rand() 
sort by rand() 
limit num;
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 使用order 关键词
    案例如下:
select * 
from table_name 
where col=xxx 
order by rand() 
limit num;
  • 1
  • 2
  • 3
  • 4
  • 5

参考

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Cpp五条/article/detail/605076
推荐阅读
相关标签
  

闽ICP备14008679号