Hive分组,列值拼成字符串
这个之前其实已经提到过了,这次写文档遇到个需求,再巩固一下写法。
cd_var | cd_var_nm |
---|---|
岳阳市 | 岳阳县 |
岳阳市 | 平江县 |
岳阳市 | 湘阴县 |
岳阳市 | 华容县 |
省份、地市、区县加起来太多,写文档的时候,直接按着以上格式排列的话,太占地方了,需要处理如下
cd_var | cd_var_nm |
---|---|
岳阳市 | 岳阳县,平江县,湘阴县,华容县 |
HiveSQL直接在平台表处理后,全部拷贝出来就行:
1 | with a as( |
Hive排序语句Order by问题小记
在hive里,order by语句是最后的reduce任务,它输入是接受之前的SELECT列,
所以在编写SQL语句,要注意在HIVE里order by与传统关系数据库不太一样。
hive的order by列必须存在在SELECT语句里,SELECT语句里没有的列,不能进行order by,会报错,
即使该列在之前的结果集里存在。
Hive数值型数据转换为String类型问题小记
在HIVE里有些情况下,将数值类型转换成Varchar或者直接插入到目标表String类型的列
数值类型会自动转变为科学计数,然后存储为字符串,这样无论在前台展示或者ETL的时候都不方便。
ETL的时候,走JDBC,会有一部分可以转回为数值,BDM下推spark优化,走sqoop的时候,表现为科学计数的字符串无法直接转回数值。
解决办法:
SELECT CAST(COL AS decimal(18,2))
将列转换为decimal(18,2),测试之下,暂时解决了问题。
因为数据并不大,而且转换类型时也不是全部变成了科学计数,所以有些疑惑这种情况,经过推测,可能与计算数据里有NULL值相关。