我正在使用蜂巢/黑斑羚,经常遇到需要查询show partition
的结果来获取特定分区的需求。假设我有一个表tbl1
,该表由字段country
和date
划分。因此,show partitions tbl1
将导致类似
country=c1/date=d1
country=c1/date=d3
country=c2/date=d2
我想做类似select * from (show partitions tbl1) a where a.country='c1'
的事情,并且我想在Hue或shell(蜂巢和黑斑羚)中这样做。
这可能吗?
答案 0 :(得分:0)
我认为直接在impala / hive中不可能实现您正在尝试的事情。
我可以建议另一种方法:
结合使用bash和impala / hive 因此,与其使用蜂巢和黑斑羚进入交互模式,不如使用命令行选项从bash shell本身传递查询,以使结果返回bash shell,然后使用grep或其他文本处理命令进行处理。
所以看起来像
impala -k -i <> --ssl -ca_cert <> -B -q "show partitions tbl1" | grep "country=c1"
在这里,您需要将所需的值替换为<>
因此您可以使用grep / sed或其他工具来获得所需的输出。 显然,这取决于您的用例,您究竟想要什么。.但我希望这可以有所帮助
答案 1 :(得分:0)
如果有人发现这很有用,这就是我最终要做的。假设您拥有spark-shell
或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")
这将获取分区列表(一个DataFrame [String]),然后将数据帧除以/
,然后对于每一段,将其分割为=
,并取值