在另一个查询中使用 Hive/Impala 查询的结果
Use result of a Hive/Impala query inside another query
我正在与 hive/impala 合作,我经常 运行 需要查询 show partition
的结果以获得特定分区。假设我有一个 table 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(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-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])并将数据帧拆分 /
,然后对于每个部分,拆分 =
并采用值
我正在与 hive/impala 合作,我经常 运行 需要查询 show partition
的结果以获得特定分区。假设我有一个 table 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(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-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])并将数据帧拆分 /
,然后对于每个部分,拆分 =
并采用值