Hive 在另一个查询中使用配置单元/黑斑羚查询的结果
我正在使用hive/impala,我经常遇到需要查询Hive 在另一个查询中使用配置单元/黑斑羚查询的结果,hive,impala,hue,Hive,Impala,Hue,我正在使用hive/impala,我经常遇到需要查询show分区的结果才能获得特定分区的情况。假设我有一个表tbl1按字段country和date分区。所以,show partitions tbl1会产生类似的结果 country=c1/date=d1 country=c1/date=d3 country=c2/date=d2 我想做一些类似于select*from(show partitions tbl1)a其中a.country='c1'的事情,我想在色调或外壳(蜂巢和黑斑羚)中这样做。
show分区的结果才能获得特定分区的情况。假设我有一个表tbl1
按字段country
和date
分区。所以,show partitions tbl1
会产生类似的结果
country=c1/date=d1
country=c1/date=d3
country=c2/date=d2
我想做一些类似于select*from(show partitions tbl1)a其中a.country='c1'
的事情,我想在色调或外壳(蜂巢和黑斑羚)中这样做。
这可能吗 我不认为你在黑斑羚/蜂巢中直接尝试的是可能的
我可以建议另一种方式:
在黑斑羚/蜂巢组合中使用bash
因此,不要在hive和impala中进入交互模式,而是使用命令行选项从bashshell本身传递查询,以便将结果返回到bashshell,然后使用grep或其他文本处理命令对其进行处理
看起来是这样的
impala -k -i <> --ssl -ca_cert <> -B -q "show partitions tbl1" | grep "country=c1"
impala-k-i--ssl-ca_cert-B-q“显示分区tbl1”| grep“country=c1”
在这里,您需要将所需的值替换为
因此,通过这种方式,您可以使用grep/sed或其他工具来获得所需的输出。
很明显,这取决于你的用例你到底想要什么。但我希望这能帮助你如果有人觉得这很有用,这就是我最终要做的。假设您有sparkshell
或spark2 shell
,您可以将show partitions
的输出存储在数据帧中,然后转换这样的数据帧。这就是我所做的(在spark2 shell内部)
val df = spark.sql("show partitions tbl1").map(row => {
val arrayValues = row.getString(0).split("/")
(arrayValues.head.split("=")(1), arrayValues(1).split("=")(1))
}).toDF("country", "date")
这将获取分区列表(数据帧[字符串])将数据框按/
进行拆分,然后对每一块进行拆分,=
并获取您需要输入的值。tbl1在上述查询中,我对蜂巢
或黑斑羚壳
和bash
使用了类似的方法,但次数比我希望的要多,我必须使用色调
,所以我一直在寻找对于两种环境都有效的方法,谢谢