hive 实现类似 contain 包含查询

如何用hive sql 实现 contain 查询?

需求:判断某个字符串是否在另一个字符串中?

方法:

可以自定义函数,但是用正则匹配regexp更方便

代码如下:

首先,查看regexp正则函数的用法:

DESC FUNCTION regexp
str regexp regexp - Returns true if str matches regexp and false otherwise

那么用正则实现包含功能的代码是:

select ‘QQqq‘ regexp(‘.*qq.*‘);
返回
true  

表示 ‘QQqq‘ 匹配 ‘.*qq.*‘ 为真。QQqq包含qq。

原文地址:https://www.cnblogs.com/drjava/p/10489756.html

时间: 2024-10-14 02:10:09

hive 实现类似 contain 包含查询的相关文章

Hive的join表连接查询的一些注意事项

Hive支持的表连接查询的语法: 1 join_table: 2 table_reference JOIN table_factor [join_condition] 3 | table_reference {LEFT|RIGHT|FULL} [OUTER] JOIN table_reference join_condition 4 | table_reference LEFT SEMI JOIN table_reference join_condition 5 | table_referenc

hive加载数据后查询为空

hive加载的数据为通过flume-ng收集的数据,然后直接将其sink指定为hdfs,在指定hdfs sink的前缀时获取header中的host内容,而前一个源根本没有将host传递过来,所以导致存入hdfs中的数据文件文件名为以点开头,如下: 接下来在hive中创建一个外部表(内部表也一样),导入数据时指定映射到上图的文件夹时如:alter table tablname add partition (dt='date') location '/flume/date';则在此文件夹下如果存在

Hive:把一段包含中文的sql脚本粘贴到beeline client运行中文乱码

背景: 在做项目过程中不可能hive表中都是非中文字段.在最近做的项目中就遇到需要在beeline界面上执行查询脚本,但脚本中包含中文,正常一个脚本用文本写好后,粘贴到beeline窗口运行时,发现中文是乱码,而且回车执行也抛出了错误. 解决方案: 使用"beeline -f 文件"解决问题,在我的需求中,这种方案确实解决了问题. 需要的业务语句: use x_hive_db; create table mytable as select * from allrecordstable

SQL Server 索引中包含查询字段 (INCLUDE索引)

这种索引无法通过数据的设计视图进行设计(也可能是没找到方法!) [sql] view plain copy CREATE INDEX IX_ContractDetail_Quantity ON ContractDetail (CostID, SubStatus, Note ) INCLUDE (Quantity); 和普通的索引唯一的区别就是后面加个了 Include标示 表示索引中包含的字段,单不会再上面建立查询索引. 也就是说可以直接通过 CostId,SubStatus,Note三个字段查

Hive 对列通配查询

本文记录hive列通配查询相关使用,通常写hql的时候大家经常在where过滤条件中使用通配,其实在hive中select的时候对列同样可以使用正则通配. 使用场景:表中列比较多,且有规律的名字(col1_a,col1_b,col2_z,col2_d,col10_w --),查数据是列出所有列比较麻烦(懒人模式). select `col\d+` from table -- 查出所有"col"+数字的列,如: col1,col23,col100

hive Groupby 输出未包含在groupby的字段

今天帮同事测试,发现代码里有个好用的hive 函数: collect_set 可以输出未包含在groupby里的字段.条件是,这个字段值对应于主键是唯一的. select a, collect_set(b)[0], count(*) -- 同时想输出每个主键对应的b字段 from ( select 'a' a, 'b' b from test.dual )a group by a; -- 根据a group by

Hive 表创建导入文件查询显示NULL

Hive在创建表时,会指定分隔符,如下图 设定为 tab 分隔属性列 \n分隔记录 但是我们上传的文档格式不是如此时就会出现 记录已经保存  但查询结果确是一列列NULL的情况 下图为要上传的txt文件格式,但列间隔确是空格分隔 ,所以查询不到准确的记录 解决方法有两种: 1.创建表时,按文件的分隔标识设置表,修改fields .lines 分隔符.eg:针对上面俩图的情况,将第一图的\t用空格替换即可 2.修改文件分隔符   .eg :针对上面俩图的情况,将第二图各列数据用tab分隔. 建议:

Hive + HBase,用HQL查询HBase

Hive整合HBase:数据实时写Hbase,实现在Hive中用sql查询 以下操作的 Hive版本:2.3.6 ,HBase版本:2.0.4 在HBase中创建表:t_hbase_stu_info create 't_hbase_stu_info','st1' 在Hive中创建外部表:t_hive_stu_info create external table t_hive_stu_info (id int,name string,age int,sex string) stored by 'o

hive 中分桶抽样查询的原理刨析

先把大家都知道的分桶抽样查询 的语法以及用法po出 select * from 分桶表 tablesample(bucket x out of y on 分桶字段); 假设当前分桶表,一共分了z桶! x: 代表从当前的第几桶开始抽样 0<x<=y y: z/y 代表一共抽多少桶! y必须是z的因子或倍数! 怎么抽: 从第x桶开始抽,当y<=z每间隔y桶抽一桶,直到抽满 z/y桶 举例1: select * from stu_buck2 tablesample(bucket 1 out o