1.去除字段前后空格
trim() 函数:去掉字段值前后空格
2.多个字符串连接
CONCAT()函数用于将多个字符串连接成一个字符串。CONCAT(str1,str2,…)
使用函数CONCAT_WS()。使用语法为:CONCAT_WS(separator,str1,str2,…)
3.将分组中的某列转为一个数组
Hive中collect相关的函数有collect_list和collect_set。 它们都是将分组中的某列转为一个数组返回,不同的是collect_list不去重而collect_set去重。
4.字符替换
语法: regexp_replace(string A, string B, string C)
将字符串A中的符合Java正则表达式B的部分替换为C。注意,在有些情况下要使用转义字符,类似Oracle中的regexp_replace函数。regexp_replace(customer_id,"$","")把customer_id中$替换掉。
5.排序
ROW_NUMBER()函数
ROW_NUMBER() OVER(PARTITION BY COLUMN1 ORDER BY COLUMN2)
上述代码含义是首先根据COLUMN1进行结果集分组,结果集内部按照COLUMN2分组,输出结果是类似于双重分组的结果。
注:我们可以使用ROW_NUMBER()函数进行去重,使用上述两个列名首先对其进行双重排序,最后在这个hql语句外层再添加一个判断row_number的值为1的条件语句获取分组排序后的第一条数据进行获取,即达到了去重的效果。
6.空值转换
nvl函数:空值转换函数函数形式:nvl(expr1,expr2),类似于mysql-nullif(expr1,expr2)
作用:将查询为Null值转换为指定值。若expr1为Null,则返回expr2,否则返回expr1。适用于数字型、字符型和日期型,但是expr1和expr2的数据类型必须为相同类型。
7.字段截取
在hive中,可以使用substr()函数截取字符串,比如从日期中截取年份、月份等信息。
用法:substr(string A, int start,int length)
string A——输入需要处理的字符串
int start——开始截取的位置索引(int),注意索引从1开始,如果此处输入0,结果与输入1相同。
int length——截取的长度(int)
8.计算分位数
hive里面倒是有个percentile函数,其使用方式为percentile(col, p)。其中percentile要求输入的字段必须是int类型的。
SELECT pin, percentile( cast(avgbandwidth AS INT) ,0.95) from tbl_info where group by pin;
9.列转行
Hive中collect相关的函数有collect_list和collect_set。 它们都是将分组中的某列转为一个数组返回,不同的是collect_list不去重而collect_set去重。
10.hive查询除某些列以外的其他列
这是HIVE中查询语句的一个小技巧,一个表有很多字段,我们想要除个别字段外的剩余所有字段,全部列出来不方便且不美观,实际上hive语句可以解决这个问题。
select`(membership_level|extra_info)?+.+`from tmp.xx_toutiao_userinfo limit 3;
11.一列转多行,按照一定的分割符进行分割。
select id,tim,single_tim
from test.a lateral view explode(split(tim,',')) t as single_tim
12.sqoop 数据同步
--全量导出
--HQL示例:
insert overwrite directory ‘/user/root/export/test’ row format delimited fields terminated by ‘,’ STORED AS textfile select F1,F2,F3 from <sourceHiveTable>;
--SQOOP脚本:
sqoop export --connect jdbc:mysql://localhost:3306/wht --username root --password cloudera --table <targetTable> --fields-terminated-by ',' --columns F1,F2,F3 --export-dir /user/root/export/test
--增量导出(insert模式)
--HQL示例:
insert overwrite directory ‘/user/root/export/test’ row format delimited fields terminated by ‘,’ STORED AS textfile select F1,F2,F3 from <sourceHiveTable> where <condition>;
--SQOOP脚本:
sqoop export --connect jdbc:mysql://localhost:3306/wht --username root --password cloudera --table <targetTable> --fields-terminated-by ‘,’ --columns F1,F2,F3 --update-key F4 --update-mode allowinsert --export-dir /user/root/export/test
--更新导出(update模式)
--HQL示例:
insert overwrite directory ‘/user/root/export/test’ row format delimited fields terminated by ‘,’ STORED AS textfile select F1,F2,F3 from <sourceHiveTable> where <condition>;
--SQOOP脚本:
sqoop export --connect jdbc:mysql://localhost:3306/wht --username root --password cloudera --table <targetTable> --fields-terminated-by ‘,’ --columns F1,F2,F3 --update-key F4 --update-mode updateonly --export-dir /user/root/export/test
13 在指定位置新增字段
alter table tablename add columns(modify_datetime STRING);
alter table tablename change modify_datetime modify_datetime string after create_datetime ;