从列表中列值所在的配置单元中选择数据

m1m5dgzv  于 2021-06-26  发布在  Hive
关注(0)|答案(2)|浏览(302)

我想从配置单元中获取数据,这样:如果列表中有一个列值,则从配置单元中选择数据。
配置单元表中的示例数据如下:

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

我正在查询配置单元表:

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}) .

y4ekin9u

y4ekin9u1#

将列表转换为字符串(在配置单元查询中使用正确的格式)

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 )
vcudknz3

vcudknz32#

更好的办法是转化 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")

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

相关问题