在另一个查询中使用 Hive/Impala 查询的结果

Use result of a Hive/Impala query inside another query

我正在与 hive/impala 合作,我经常 运行 需要查询 show partition 的结果以获得特定分区。假设我有一个 table tbl1 由字段 countrydate 分区。所以,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(hive 和 impala)中做这件事。 这可能吗?

我不认为你正在尝试的东西可以直接在 impala/hive 中实现。

我可以建议另一种方法:

结合使用bashimpala/hive 因此,不要在配置单元和 impala 中进入交互模式,而是使用命令行选项从 bash shell 本身传递查询,以便结果返回到 bash shell然后用grep或者其他文本处理命令进行处理。

所以看起来像

impala -k -i <> --ssl -ca_cert <> -B -q "show partitions tbl1" | grep "country=c1"

您需要在此处输入所需的值来代替 <>

所以通过这种方式,您可以使用 grep/sed 或其他工具来获得所需的输出。 显然这取决于您的用例您到底想要什么..但我希望这可以帮助

如果有人觉得这有用,这就是我最终所做的。假设您有 spark-shellspark2-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])并将数据帧拆分 /,然后对于每个部分,拆分 = 并采用值