shell脚本编写循环hive sql

循环里日期判断

if [ $# -eq 1 ]; then
     n_date=`date -d "$1" +"%Y-%m-%d"`
else
     n_date=`date -d " -1 days" +"%Y-%m-%d"`
fi
t_date=`date -d "${n_date} -6 days" +"%Y-%m-%d"`

until [ $t_date == $n_date ];do
#判断循环执行是否结束(以执行时间为昨天结束)

t_date=`date -d "${t_date} +1 days" +"%Y-%m-%d"`
echo "t_date ${t_date}"

hive <<END_HIVE
select 1
from tdanalytics.stg_td_web_page_ex
where starttime_day='${t_date}';
END_HIVE

done 

循环次数判断

if [ $# -eq 1 ]; then
     n_date=`date -d "$1" +"%Y-%m-%d"`
else
     n_date=`date -d " -1 days" +"%Y-%m-%d"`
fi
t_date=`date -d "${n_date} -6 days" +"%Y-%m-%d"`
count=0

until [ $count -eq '4' ];do
#判断循环次数是否满足

t_date=`date -d "${t_date} +1 days" +"%Y-%m-%d"`
let count+=1
echo "t_date ${t_date}"
echo "count ${count}"

hive -e "
select 1
from tdanalytics.stg_td_web_page_ex
where starttime_day='${t_date}';
"

done 
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
HiveQL 不支持传统意义上的循环语句,但可以使用 Hive 的扩展语言 HiveQL UDF(User-Defined Functions)来实现循环逻辑。 例如,可以编写一个 UDF 函数来实现循环逻辑,示例代码如下: ``` CREATE FUNCTION my_loop_function(n INT) RETURNS ARRAY<INT> COMMENT 'A function that returns an array of integers from 1 to n' AS 'package.name.MyLoopFunction' USING JAR 'hdfs://path/to/my/udf.jar'; ``` 在这个例子中,我们创建了一个叫做 `my_loop_function` 的 UDF 函数,接受一个整数参数 `n`,并返回一个整数数组,数组中包含从 1 到 n 的整数。我们将这个函数打包为一个 Jar 包,并将其上传到 HDFS。 在 Java 中实现这个函数的逻辑,示例代码如下: ``` package package.name; import org.apache.hadoop.hive.ql.exec.UDF; import org.apache.hadoop.io.IntWritable; import org.apache.hadoop.io.Text; public class MyLoopFunction extends UDF { public List<IntWritable> evaluate(IntWritable n) { List<IntWritable> result = new ArrayList<IntWritable>(); for (int i = 1; i <= n.get(); i++) { result.add(new IntWritable(i)); } return result; } } ``` 在这个例子中,我们使用 Java 语言实现循环逻辑,将其打包为一个 Jar 包,并上传到 HDFS。在 HiveQL 中,我们可以通过调用这个 UDF 函数来实现循环逻辑。 例如,我们可以这样使用这个函数: ``` SELECT my_loop_function(5); ``` 这个查询将返回一个数组,包含 1 到 5 的整数。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值