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脚本中的一种实践办法的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!


扫一扫关注最新编程教程