当前位置: 首页>大数据>正文

关于hive中的动态分区问题

关于hive中的动态分区问题

文章目录

  • 关于hive中的动态分区问题
    • 问题描述
    • sql语句
      • 建表语句
      • 插入语句
    • 总结

问题描述

​ 在学习数仓时,遇到从几个表中读数据存入到新的表,并涉及到动态分区问题,即在查询语句下新加上一行查询,起初不懂这个动态分区是如何为分区字段赋值的,通过自己实践终于搞懂了,下面详细解析一下

sql语句

建表语句

CREATE EXTERNAL TABLE dwd_tool_coupon_used_inc
(
    `id`           STRING COMMENT '编号',
    `coupon_id`    STRING COMMENT '优惠券ID',
    `user_id`      STRING COMMENT '用户ID',
    `order_id`     STRING COMMENT '订单ID',
    `date_id`      STRING COMMENT '日期ID',
    `payment_time` STRING COMMENT '使用(支付)时间'
) COMMENT '优惠券使用(支付)事务事实表'
    PARTITIONED BY (`dt` STRING)
    STORED AS ORC
    LOCATION '/warehouse/gmall/dwd/dwd_tool_coupon_used_inc/'
    TBLPROPERTIES ("orc.compress" = "snappy");

插入语句

insert overwrite table dwd_tool_coupon_used_inc partition (dt)
select
    data.id,
    data.coupon_id,
    data.user_id,
    data.order_id,
    date_format(data.used_time,'yyyy-MM-dd') date_id,
    data.used_time,
    date_format(data.used_time,'yyyy-MM-dd')  -- 动态分区添加
from ods_coupon_use_inc
where dt = '2022--06-08'
and type = 'bootstrap-insert';

进行动态分区时,在查询的最后加上一行,而不进行动态分区,则将其删除(这就是在学习中引起我困惑的原因)

注意:创建分区表是,不仅是括号中的六个字段(id,coupon_id,user_id,order_id,date_id,payment_time),还包括分区字段(dt),在静态分区时,查询6条语句,分区dt='xxxx-xx-xx'为第七条语句,而在动态分区,没有在插入语句中给定分区,故会缺少一个字段,因此要自行加上

总结

这个问题实际上是个非常简单的问题,可是因为在学习时学的一知半解,因此被困扰了好久

最后:在学习过程中要多进行实操,否则感觉自己学会了,但自己一上手就乱了阵脚!!!


https://www.xamrdz.com/bigdata/7a21849114.html

相关文章: