Hive sql使用小结
程序员文章站
2022-03-03 10:12:00
...
1.首先,很多时我们需要在Hive中去重数据:(语法和Oracle中的去重很类似,子查询更名为 t 这个不能省略)
select ID, CASE_ID_
from (
SELECT
ID, CASE_ID_ , row_number() OVER(PARTITION BY CASE_ID_ ) as row_flg
FROM table
)t where t.row_flg=1
2.对某一个存储手机号码的zidu字段进行过滤区号可以这样(记得是\\+86 而不是 +86,+属于特殊字符):
SELECT ID, CASE_ID_,
regexp_replace(regexp_replace(regexp_replace(regexp_replace(TO_ACCOUNT_,'\\+86', ''),'\\+85', ''),'-', ''),' ', '') AS TO_ACCOUNT_
FROM table
当然,使用正则去掉会更好:
SELECT ID, CASE_ID_,
regexp_replace(regexp_replace(regexp_replace(TO_ACCOUNT_,'(\\+\\d{2})?', ''),'-', ''),' ', '') AS TO_ACCOUNT_
FROM table
-- 参考:(去除区号) https://blog.csdn.net/wmx690/article/details/80354321
-- (去除http url) https://blog.csdn.net/abauch_d/article/details/7837089
-- 注:去除url那个正则不太全面,只能去除 http://ip,端口号之后的内容不能去除
3. 对于某一个存储可能会有 \t \s 等字符的字段,可以这样过滤:
SELECT ID, CASE_ID_,
regexp_replace(CONTENT, '\\s+', '')
FROM table
4.对于某两个字段是互补的情况可以这样:
SELECT ID, CASE_ID_,
CASE WHEN TIME like '20___%__%_ %_:%_:%_' THEN TIME_ ELSE TIME1 END,
FROM table
5 创建表可以这样:
CREATE TABLE test(
APP_ID_ STRING,
CASE_ID_ STRING
)ROW FORMAT DELIMITED fields terminated BY '\t' STORED AS TEXTFILE;
6.当某一个字段的值以某一个字符 如: ";" ,我们想取出 ";" 前的内容可以进行切割字符串:
SELECT ID, CASE_ID_,
split('192.168.0.1','\\.')
FROM table
-- 当split包含在 "" 之中时 需要加4个\,如 hive -e ".... split('192.168.0.1','\\\\.') ... " 不然得到的值是null
7.如6所说的,当我们使用 hive -e "..." 并且在java代码中执行hive sql的时候,原本是\\ 的要写成 \\\\ ,不然会报错,而 sql语句中的引号最好用单引号 '
参考:https://blog.csdn.net/lsr40/article/details/81566424
8. 具体参考 Hive sql 的 官网api :http://trafodion.apache.org/docs/sql_reference/#examples_of_substring
上一篇: 给定值查找在list中的近邻值
下一篇: Python中的Numpy模块(1)
推荐阅读
-
多列复合索引的使用 绕过微软sql server的一个缺陷
-
在SQL Server中使用SQL语句查询一个存储过程被其它所有的存储过程引用的存储过程名
-
SQL的Join使用图解教程
-
SQL Server 2008 到底需要使用哪些端口?
-
Sql Server触发器的使用
-
Yii使用migrate命令执行sql语句的方法
-
sql convert函数使用小结
-
SQL语法 分隔符理解小结
-
SQL Server误区30日谈 第27天 使用BACKUP WITH CHECKSUM可以替代DBCC CheckDB
-
SQL Server误区30日谈 第13天 在SQL Server 2000兼容模式下不能使用DMV