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-07-02springboot项目无法注册到nacos-icode9专业技术文章分享
- 2024-06-26结对编程到底难不难?答案在这里
- 2024-06-19《2023版Java工程师》课程升级公告
- 2024-06-15matplotlib作图不显示3D图,怎么办?
- 2024-06-1503-Loki 日志监控
- 2024-06-1504-让LLM理解知识 -Prompt
- 2024-06-05做软件测试需要懂代码吗?
- 2024-06-0514-ShardingSphere的分布式主键实现
- 2024-06-03为什么以及如何要进行架构设计权衡?
- 2024-05-31全网首发第二弹!软考2024年5月《软件设计师》真题+解析+答案!(11-20题)