我在hive
表中有如下列
testing_time
2018-12-31 14:45:55
2018-12-31 15:50:58
现在,我想获取distinct
值作为变量,以便可以在其他查询中使用。
我已经完成了以下操作
abc=`hive -e "select collect_set(testing_time)) from db.tbl";`
echo $abc
["2018-12-31 14:45:55","2018-12-31 15:50:58"]
xyz=${abc:1:-1}
当我这样做
hive -e "select * from db.tbl where testing_time in ($xyz)"
我遇到错误
Arguments for IN should be the same type! Types are {timestamp IN (string, string)
我在做什么错?
达到我的结果的正确方法是什么?
注意:我知道我可以在这种情况下使用子查询,但是我想使用变量来实现结果
答案 0 :(得分:1)
问题是您正在将 timestamp (列testing_time
)与 string (即"2018-12-31 14:45:55"
)进行比较,因此您需要转换字符串时间戳记,您可以通过TIMESTAMP(string)
进行设置。
这是一个添加转换的bash脚本:
RES="" # here we will save the resulting SQL
IFS=","
read -ra ITEMS <<< "$xyz" # split timestamps into array
for ITEM in "${ITEMS[@]}"; do
RES="${RES}TIMESTAMP($ITEM)," # add the timestamp to RES variable,
# surrounded by TIMESTAMP(x)
done
unset IFS
RES="${RES%?}" # delete the extra comma
然后您可以运行构造的SQL查询:
hive -e "select * from db.tbl where testing_time in ($RES)"