在hive上建表与普通分区表创建方法一样;

 CREATE  TABLE `dwa_m_user_association_circle`(
`device_number` string,
`oppo_number` string,
`prov_id_oppo` string,
`area_id_oppo` string,
`dealer_oppo` string,
`short_call_nums` bigint,
`long3_call_nums` bigint,
`long5_call_nums` bigint,
`long10_call_nums` bigint,
`short_total_nums` bigint,
`long3_total_nums` bigint,
`long5_total_nums` bigint,
`long10_total_nums` bigint,
`area_id` string)
PARTITIONED BY (
`month_id` string,
`prov_id` string,
`dealer` string)
ROW FORMAT DELIMITED
FIELDS TERMINATED BY '|'
NULL DEFINED AS ''
STORED AS INPUTFORMAT
'org.apache.hadoop.mapred.TextInputFormat'
OUTPUTFORMAT
'org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat'
LOCATION
'hdfs://beh/user/hive/warehouse/all_ana_pro.db/dwa_m_user_association_circle'
TBLPROPERTIES (
'numPartitions'='',
'numFiles'='',
'transient_lastDdlTime'='',
'totalSize'='',
'numRows'='',
'rawDataSize'='')

在shell脚本中,需设置的参数:

set hive.exec.dynamic.partition=true;                     #开启动态分区,默认是false
set hive.exec.dynamic.partition.mode=nostrict;      #开启允许所有分区都是动态的,否则必须要有静态分区才能使用。

set hive.exec.max.created.files=1000000;             #允许创建的最大文件数,当分区是2个或三个分区时,文件会被分成很多小文件,该设置就是将文件的最大数目设成100w;

 insert overwrite table ALL_ANA_PRO.dwa_m_user_association_circle  PARTITION (month_id=${v_month},prov_id,dealer)
select device_number,
oppo_number ,
prov_id_oppo ,
area_id_oppo ,
dealer_oppo ,
short_call_nums,
long3_call_nums,
long5_call_nums,
long10_call_nums,
sum(short_call_nums) over(distribute by device_number) short_total_nums,
sum(long3_call_nums ) over(distribute by device_number) long3_total_nums,
sum(long5_call_nums) over(distribute by device_number) long5_total_nums,
sum(long10_call_nums) over(distribute by device_number) long10_total_nums,
area_id ,
prov_id ,
dealer
from
(SELECT device_number,
prov_id ,
area_id ,
dealer ,
oppo_number ,
prov_id_oppo ,
area_id_oppo ,
dealer_oppo ,
sum(case when t.bill_times < 60 then 1 else 0 end ) short_call_nums,
sum(case when t.bill_times >180 then 1 else 0 end ) long3_call_nums,
sum(case when t.bill_times >300 then 1 else 0 end ) long5_call_nums,
sum(case when t.bill_times >600 then 1 else 0 end ) long10_call_nums
FROM ( SELECT prov_id ,
area_id ,
device_number,
0 dealer ,
prov_id_oppo ,
area_id_oppo ,
oppo_number ,
dealer_oppo ,
bill_times
FROM ALL_ANA_PRO.DWA_M_CALL_RING_BASE t
WHERE month_id = '${v_month}'
AND ticket_type = 1
AND dealer_oppo > -1
UNION ALL
SELECT prov_id_oppo prov_id ,
area_id_oppo area_id ,
oppo_number device_number ,
dealer_oppo dealer ,
prov_id prov_id_oppo ,
area_id area_id_oppo ,
device_number oppo_number ,
0 dealer_oppo ,
bill_times
FROM ALL_ANA_PRO.DWA_M_CALL_RING_BASE t
WHERE month_id = '${v_month}'
AND ticket_type = 1
AND dealer_oppo > -1
) t
GROUP BY
device_number,
prov_id ,
area_id ,
dealer ,
oppo_number ,
prov_id_oppo ,
area_id_oppo ,
dealer_oppo
) t;

这里,需要说明的是,向目标表插数:

insert overwrite table ALL_ANA_PRO.dwa_m_user_association_circle  PARTITION (month_id=${v_month},prov_id,dealer)
其中select语句中动态分区prov_id,dealer两个字段一般在最后面;

shell脚本中向hive动态分区插入数据的更多相关文章

  1. hive 动态分区插入

    首先需要进行以下设置: set hive.exec.dynamic.partition=true; set hive.exec.dynamic.partition.mode=nonstrict; se ...

  2. Hive 根据表中某个字段动态分区 以及临时表创建

    使用hive储存数据时,需要对做分区,如果从kafka接收数据,将每天的数据保存一个分区(按天分区),保存分区时需要根据某个字段做动态分区,而不是傻傻的将数据写到某一个临时目录最后倒入到某一个分区,这 ...

  3. Hive如何根据表中某个字段动态分区

    使用hive储存数据时,需要对做分区,如果从kafka接收数据,将每天的数据保存一个分区(按天分区),保存分区时需要根据某个字段做动态分区,而不是傻傻的将数据写到某一个临时目录最后倒入到某一个分区,这 ...

  4. hive 动态分区与混合分区

    hive的分区概念,相信大家都非常了解了.通过将数据放在hdfs不同的文件目录下,查表时,只扫描对应分区下的数据,避免了全表扫描. 提升了查询效率. 关于hive分区,我们还会用到多级分区.动态分区. ...

  5. hive动态分区和混合分区

    各位看官,今天我们来讨论下再Hive中的动态分区和混合分区方面的一些知识点以及相关的一些问题. 前面我们已经讲过管理表和外部表的一般分区的一些知识点,对于需要对表创建很多的分区,那么用户就需要些很多的 ...

  6. Hive动态分区和分桶(八)

    Hive动态分区和分桶 1.Hive动态分区 1.hive的动态分区介绍 ​ hive的静态分区需要用户在插入数据的时候必须手动指定hive的分区字段值,但是这样的话会导致用户的操作复杂度提高,而且在 ...

  7. Hive动态分区详解

    目录 动态分区调整 注意 动态分区插入 动静分区结合 例子 动态分区调整 动态分区属性:设置为true表示开启动态分区功能(默认为false)hive.exec.dynamic.partition=t ...

  8. 什么是hive的静态分区和动态分区,它们又有什么区别呢?hive动态分区详解

    面试官问我,什么是hive的静态分区和动态分区,这题我会呀. 简述 分区是hive存放数据的一种方式,将列值作为目录来存放数据,就是一个分区,可以有多列. 这样查询时使用分区列进行过滤,只需根据列值直 ...

  9. Shell脚本中执行mysql的几种方式(转)

    Shell脚本中执行mysql的几种方式(转) 对于自动化运维,诸如备份恢复之类的,DBA经常需要将SQL语句封装到shell脚本.本文描述了在Linux环境下mysql数据库中,shell脚本下调用 ...

随机推荐

  1. JS系列:数据类型详细讲解

    ctrl+B加粗 ### 数据类型: - 1.number数字类型 NaN:not a number 不是一个数 ,但他是数字类型 isNaN:检测当前值是否不是有效数字,返回true代表不是有效数字 ...

  2. 对decimal 类型的数据进行获取调整

    Decimal为SQL Server.MySql等数据库的一种数据类型,不属于浮点数类型,可以在定义时划定整数部分以及小数部分的位数. 好处:使用精确小数类型不仅能够保证数据计算更为精确,还可以节省储 ...

  3. tp3.2 如何比较两个字段

    使用exp if ($_GET['owe_property'] || $_GET['owe_property'] !== NULL) { if ((int)$_GET['owe_property'] ...

  4. 基于redis+lua实现高并发场景下的秒杀限流解决方案

    转自:https://blog.csdn.net/zzaric/article/details/80641786 应用场景如下: 公司内有多个业务系统,由于业务系统内有向用户发送消息的服务,所以通过统 ...

  5. 【剑指offer】链表中的倒数第k个结点

    输入一个链表,输出该链表中倒数第k个结点. 分析: 定义两个结点p1和p2都指向头节点,p1先走k-1步,然后p1和p2一起走,当p1走到链表尾部时,p2指向的结点就是倒数第k个结点 遍历一遍链表即可 ...

  6. jquery下拉单选框可左右移动数据

    <!doctype html> <html> <head> <meta charset="utf-8"> <title> ...

  7. php开发工程师都需要掌握什么技能呢?

    PHP原生标准库精通,三种大型框架中熟练掌握一门的开发(Symfony2.Yii.ZF2),小型框架中(Codeigniter 等)通读其一源码. MySQL语句精通,实践构造 1000 万级的数据库 ...

  8. 个人Wiki搭建(Gitbook + GitHub Pages)

    工具选择:Gitbook + GitHub Pages 大概流程: 首先在本地编写md文件,然后生成对应的html文件,最后将这些html文件推送到github对应的gitbook仓库. 具体步骤: ...

  9. C# vb .net图像合成-多图片叠加合成

    在.net中,如何简单快捷地实现图像合成呢,比如合成文字,合成艺术字,多张图片叠加合成等等?答案是调用SharpImage!专业图像特效滤镜和合成类库.下面开始演示关键代码,您也可以在文末下载全部源码 ...

  10. webpack4引入JQuery的两种方法

    版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明.本文链接:https://blog.csdn.net/weixin_36185028/artic ...