【问题标题】:Hive Lateral View Explode with where clause - what runs firstHive 横向视图 Explode with where 子句 - 先运行什么
【发布时间】:2017-05-09 04:03:14
【问题描述】:

我试图了解 WHERE 子句是在配置单元中的 LATERAL VIEW EXPLODE 之后还是之前运行。

例如,如果我有

   SELECT *
FROM
   (
    SELECT
        a1,
        a2,
        b.ds,
        conv_list.threshold_conv[0]
            AS t
    FROM
       t1 b
    LATERAL VIEW EXPLODE({list})
                conv_list as threshold_conv
    WHERE
        b.ds between '{DATE-29}' and '{DATE}'
  )

ds过滤器会在横向视图爆炸之前还是之后运行?

【问题讨论】:

  • 为什么重要?
  • 您可以使用解释命令并获取详细信息。但根据我的理解 LATERAL VIEW EXPLODE 将首先完成,然后在哪里......
  • @sandeeprawat - 所以你假设如果过滤例如在分区列上,整个表将被扫描,行将被分解,然后过滤才会发生?
  • 是的..应该是这样的..
  • @sandeeprawat 这不会破坏分区的全部目的吗?

标签: hadoop hive hiveql hadoop2


【解决方案1】:
  • 如果您的过滤列是表中的一个分区,那是分区的主要目的,即使您的 where 子句不在您的子查询中(谓词下推)
  • 横向视图有时可能是一项昂贵的操作,因此 Hive 在应用横向视图之前应用过滤器,请根据您的查询查看以下执行计划(不一样)。

          STAGE PLANS:   Stage: Stage-1
        Map Reduce
          Map Operator Tree:
              TableScan
                alias: a
                filterExpr: ((mycolumndpartitioned > 0) and (mycolumn= 112623934)) (type: boolean)
                Statistics: Num rows: 23953585 Data size: 52793067242 Basic stats: COMPLETE Column stats: NONE
                Filter Operator
                  predicate: (mycolumn= 112623934) (type: boolean)
                  Statistics: Num rows: 11976792 Data size: 26396532519 Basic stats: COMPLETE Column stats: NONE
                  Lateral View Forward
                    Statistics: Num rows: 11976792 Data size: 26396532519 Basic stats: COMPLETE Column stats: NONE
                    Select Operator
                      Statistics: Num rows: 11976792 Data size: 26396532519 Basic stats: COMPLETE Column stats: NONE
                      Lateral View Join Operator
                        outputColumnNames: _col13
                        Statistics: Num rows: 23953584 Data size: 52793065038 Basic stats: COMPLETE Column stats: NONE
                        Select Operator
                          expressions: _col13.myArray (type: string)
                          outputColumnNames: _col0
                          Statistics: Num rows: 23953584 Data size: 52793065038 Basic stats: COMPLETE Column stats: NONE
                          File Output Operator
                            compressed: false
                            Statistics: Num rows: 23953584 Data size: 52793065038 Basic stats: COMPLETE Column stats: NONE
    
  • 现在,如果您的过滤器使用分解数组中的某些字段,我认为 Hive 将尝试应用所有可能的过滤器,这些过滤器不使用分解数据中的任何列,然后再应用横向视图然后应用您的爆炸数据过滤器

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-01-07
    • 2012-12-21
    • 2017-07-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-11-16
    相关资源
    最近更新 更多