hive spark-sql查询计划是否指示使用了哪些表分区?

drkbr07n  于 2022-12-03  发布在  Hive
关注(0)|答案(1)|浏览(171)

通过查看spark-sql计划,是否有一种方法可以判断某个特定的表(hive/冰山)分区是否正在使用?
例如,我们有一个具有3个分区的表,假设A=A_瓦尔、B=B_VAL、C=C_VAL。

  • 分区已完全使用(所有3个分区均已使用)
  • 仅部分使用分区(可能仅使用1个或2个分区,例如使用了分区A,但现在使用了分区B或C)

如果spark-sql计划不提供此信息,是否有任何方法可以获得此信息?

46qrfjad

46qrfjad1#

您可以使用以下代码打印(逻辑和物理)计划。

import pyspark.sql

#create a df using your sql
df = sqlContext.sql("SELECT field1 AS f1, field2 as f2 from table1")

#use explain to see explain output. Without argument, you will get only physical plan
df.explain(True)
== Parsed Logical Plan ==
...
== Analyzed Logical Plan ==
...
== Optimized Logical Plan ==
...
== Physical Plan ==
...

编辑:我运行了mytable的解释,并在下面贴出了摘录。这表明hive只选择了几个分区(文件夹),而不是遍历所有分区。你应该可以看到类似的输出。
此处表在part_col上进行分区。
用于生成此explain extended select * from mytab where part_col in (10,50)查询
对不起,我没有安装Spark,所以无法测试它。

29
      Path -> Alias:
30
        hdfs://namenode:8020/user/hive/warehouse/tmp/part_col=10.0 [tmp]
31
        hdfs://namenode:8020/user/hive/warehouse/tmp/part_col=50.0 [tmp]
32
      Path -> Partition:
33
        hdfs://namenode:8020/user/hive/warehouse/tmp/part_col=10.0 
34
          Partition
35
            base file name: part_col=10.0
36
            input format: org.apache.hadoop.mapred.TextInputFormat
37
...

       hdfs://namenode:8020/user/hive/warehouse/tmp/part_col=50.0 
85
          Partition
86
            base file name: part_col=50.0
87
            input format: org.apache.hadoop.mapred.TextInputFormat
88
            output format: org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat
89
            partition values:
90
              college_marks 50.0

相关问题