从Hive中选择数据列表中的列值

时间:2017-08-25 03:40:16

标签: scala hive apache-spark-sql

我想从Hive获取数据:如果列中有一个列值,则从Hive中选择数据。

Hive表中的示例数据如下:

Col1   | Col2 | Col3
-------+---------------
Joe    | 32   | Place-1
Nancy  | 28   | Place-2
Shalyn | 35   | Place-1
Andy   | 20   | Place-3

我正在查询Hive表:

val name = List("Sherley","Joe","Shalyan","Dan")
var dataFromHive = sqlCon.sql("select Col1,Col2,Col3 from default.NameInfo where Col1 in (${name})")

我知道我的查询错误,因为它的抛出错误。但我无法正确替换where Col1 in (${name})

2 个答案:

答案 0 :(得分:0)

更好的想法是将name转换为DataFrame并与dataFromHive结合使用。内部联接与仅过滤相交的数据相同。

val nameDf = List("Sherley","Joe","Shalyan","Dan").toDF("Col1")
var dataFromHive = sqlCon.table("default.NameInfo").join(nameDf, "Col1").select("Col1", "Col2", "Col3")

尝试使用DataFrame API。它将使代码易于阅读。

答案 1 :(得分:0)

将List转换为String(在hive查询中使用适当的格式)

val name = List("Sherley","Joe","Shalyan","Dan")
val name_string = name.mkString("('","','", "')")
//name_string: String = ('Sherley','Joe','Shalyan','Dan')

var dataFromHive = sqlCon.sql("select Col1,Col2,Col3 from default.NameInfo where Col1 in " + name_string )