如何在配置单元查询中使用collect_set

时间:2019-01-08 03:34:42

标签: mysql sql hive

我在hive中有一个表格,如下所示

id   name  sal
1    sam   2000
2    Ram   3000
3    Tim   4000
4    Ash   5000

我想从name列中获取所有值作为变量。

我已经完成了以下操作

abc=`hive -e "select distinct name from db.tbl";`

当我喜欢下面的时候

echo $abc

我得到的结果是

Ash Ram Tim sam

我希望结果像

'Ash', 'Ram', 'Tim', 'sam'

我尝试如下

xyz=`hive -e "select concat_ws(',', collect_set(name)) from from db.tbl";`

echo $xyz

Ash,sam,Ram,Tim

我在这里是我想使用where in clause

中的变量

我想实现的目标在下面

select * from db.tbl where name in (variable)

我该如何实现?

1 个答案:

答案 0 :(得分:1)

您的查询

xyz=`hive -e "select concat_ws(',', collect_set(name)) from from db.tbl";`

在变量的每个项目前后添加双引号

xyz_list=echo "\"${xyz//,/\",\"}\""

查询变量

echo $xyz_list

"Ash", "Ram", "Tim", "sam"

所需查询

hive -e "select * from db.tbl where name in ($xyz_list)";

获得结果的另一种方法

abc=`hive -e "select collect_set(concat_ws(',', name)) from db.tbl";`

test=${abc:1:-1}

hive -e "select * from db.tbl where name in ($test)";