HIVE SQL解决JOIN OR的问题

hive sql不支持 join on 的条件后跟or,使用union all,并去重插入表

INSERT INTO TABLE tableName1 PARTITION (stat_month='${hiveconf:stat_month}' , stat_date='${hiveconf:stat_date}' , stat_hour='${hiveconf:stat_hour}')
       SELECT
          COLLECT_SET(字段名称)[0],COLLECT_SET(字段名称)[0],COLLECT_SET(字段名称)[0],.............COLLECT_SET(字段名称)[0]
 FROM(

SELECT A.字段,B.字段
              FROM tableNameA A
               LEFT JOIN tableNameB B ON  A.字段名称 =B.字段名称a
               WHERE  stat_month='${hiveconf:stat_month}'  and AND stat_date='${hiveconf:stat_date}'  AND..............

    UNION ALL

SELECT A.字段,B.字段
              FROM tableNameA A
               LEFT JOIN tableNameB B ON  A.字段名称 =B.字段名称b
               WHERE  stat_month='${hiveconf:stat_month}'  and AND stat_date='${hiveconf:stat_date}'  AND..............
      UNION ALL
 SELECT A.字段,B.字段
              FROM tableNameA A
               LEFT JOIN tableNameB B ON  A.字段名称 =B.字段名称c
               WHERE  stat_month='${hiveconf:stat_month}'  and AND stat_date='${hiveconf:stat_date}'  AND..............           
  )  newTableName GROUP BY 去重字段名称;
 

总结:

(1)group by 语句中出现的非聚合函数需要跟在group by后面。否则会报错

(2)可使用COLLECT_SET()函数来封装不需要group by的字段【COLLECT_SET(a_id)[0]】可解决(1)的情况

 

你可能感兴趣的:(数据库相关)