hive查询中列名的变量替换

时间:2017-10-13 14:18:18

标签: scala hive substitution

我有一个任务,我需要比较数据帧的2列并获得差异。数据框中有200多列,我必须编写100多个查询来检查列中的值。 例如:DF1 https://i.stack.imgur.com/Aj1ca.png

我需要X1 = X2的所有值,并且列对具有不同的值。 简单来说 -

select A1,A2 from DF1 where X1=X2 and A1!=A2
select B1,B2 from DF1 where X1=X2 and B1!=B2
select C1,C2 from DF1 where X1=X2 and C1!=C2

现在因为我有100多列,所以我必须编写100多个这样的查询。所以我想在scala中编写一个函数,在那里我只传递将在hive查询中替换的列名(A1,A2或B1,B2等)。

 def comp_col(a:Any, b:Any):Any= {
var ret = sqlc.sql("SELECT $a, $b from DF1 WHERE X1= X2 $a!= $b");
return ret;

}

无论如何,其中函数中的查询将从我传递的变量中获取列名。 任何不同的方法也是受欢迎的。

先谢谢。

1 个答案:

答案 0 :(得分:0)

是,对scala使用字符串插值。

def comp_col(a:Any, b:Any):Any= {
var ret = sqlc.sql(s"SELECT $a, $b from DF1 WHERE X1= X2 $a!= $b");
return ret;
}