如何在其他查询的变量中使用Hive查询结果(多个)

时间:2018-11-13 10:32:04

标签: hive hiveql

我有两张桌子,一张是学校,一张是学生。我想找到一所特定学校的所有学生。 学校的模式是:id,名称,位置 and of students是:id,名称,schoolId。 我写了以下脚本:

schoolId=$(hive -e "set hive.cli.print.header=false;select id from school;")
 hive -hiveconf "schoolId"="$schoolId" 

hive>select id,name from student where schoolId like  '${hiveconf:schoolId}%'

我没有任何结果,因为schoolId将所有ID都存储在一起。例如,有3所学校的ID:123、256,346 schoolId变量存储为123 256 346,结果为空。

1 个答案:

答案 0 :(得分:0)

collect_set()concat_ws一起使用以逗号分隔的字符串,ID应该强制转换为字符串:

schoolId=$(hive -e "set hive.cli.print.header=false;select concat_ws('\\',\\'',collect_set(cast(id as string))) from school;");

hive -hiveconf "schoolId"="$schoolId" 

然后使用IN运算符:

select id,name from student where schoolId in ('${hiveconf:schoolId}');