我想从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})
。
答案 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 )