Hive中将结果表数据获取并且重新以参数形式赋予到SQL脚本中的一种实践办法
2021/8/6 19:07:47
本文主要是介绍Hive中将结果表数据获取并且重新以参数形式赋予到SQL脚本中的一种实践办法,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
最近使用Hive来加工一批数据形成标签宽表,其中有一部分的标签需要根据统计规律来进行标定,而这些统计规律是需要依赖于之前的结果表。
例如,需要统计规律的结果表如下:
-- 参数设置 SET hivevar:param_1 = ${hiveconf:param_1}; SET hivevar:param_2 = ${hiveconf:param_2}; -- 建表 DROP TABLE IF EXISTS tmp_result; CREATE TABLE IF NOT EXISTS tmp_result AS SELECT a.*, CASE WHEN a.field_example > 0 AND a.field_example <= COALESCE(${hivevar:param_1},0) THEN '1' WHEN a.field_example > COALESCE(${hivevar:param_1},0) AND a.field_example <= COALESCE(${hivevar:param_2},0) THEN '2' WHEN a.field_example > COALESCE(${hivevar:param_2},0) THEN '3' ELSE ' ' END AS level_1 FROM tmp_origin AS a ;
对于参数param_1和param_2而言,其来自于tmp_origin表,需要一个shell脚本来进行设计
#!/bin/bash # 参数 # tmp_result存在的位置 sqlpath=$1 # 参数设置 param_all=`hive -e " USE database; (SELECT CAST('5566' AS DOUBLE)) UNION ALL (SELECT percentile(CAST(field_example AS INT),0.33) FROM tmp_origin WHERE field_example!='0') UNION ALL (SELECT percentile(CAST(field_example AS INT),0.66) FROM tmp_origin WHERE field_example!='0') ;"`
通过上述的shell脚本可以将数据取出来但是不是最终的,需要继续在shell脚本中截取数据使用awk,在本次的案例中需要去除掉空格使用sed
# 截取变量 tmp_param=`echo $param_all | awk -F "5566" '{print $2}'` param_1=`echo $tmp_param | awk '{print $1}' | sed s/[[:space:]]//g` param_2=`echo $tmp_param | awk '{print $2}' | sed s/[[:space:]]//g`
最后就是执行了,如果想看执行结果也可以echo来看一下
hive -hiveconf param_1=${param_1} \ -hiveconf param_2=${param_2} \ -f ${sqlpath#*=} echo $
这样就可以啦!按照需要可以用过分区或者是设计程序来实现动态的数据抽取与查询。
这篇关于Hive中将结果表数据获取并且重新以参数形式赋予到SQL脚本中的一种实践办法的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-11-23Springboot应用的多环境打包入门
- 2024-11-23Springboot应用的生产发布入门教程
- 2024-11-23Python编程入门指南
- 2024-11-23Java创业入门:从零开始的编程之旅
- 2024-11-23Java创业入门:新手必读的Java编程与创业指南
- 2024-11-23Java对接阿里云智能语音服务入门详解
- 2024-11-23Java对接阿里云智能语音服务入门教程
- 2024-11-23JAVA对接阿里云智能语音服务入门教程
- 2024-11-23Java副业入门:初学者的简单教程
- 2024-11-23JAVA副业入门:初学者的实战指南