在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. CentOS 7.7安装Erlang和Elixir

    安装之前,先看一下它们的简要说明 Erlang Erlang是一种开源编程语言,用于构建对高可用性有要求的大规模可扩展的软实时系统.它通常用于电信,银行,电子商务,计算机电话和即时消息中.Erlang ...

  2. phpmyadmin 显示被隐藏的表

    点击后,会把这个表隐藏掉.有时候误点会莫名其妙. 点击数据库上的眼睛,能够显示被隐藏的表.

  3. Angular 使用 ng2-file-upload 上传文件遇到的问题

    Angular 上传文件 可参考Angular2使用ng2-file-upload上传文件 这里记录在开发过程中遇到的问题: 删除选择的文件后,不能再选择上次选择的相同的文件 在 firefox 浏览 ...

  4. 简述 高性能Linux服务器 模型架构 设计

    主要从三个方面进行分析: 1.事件处理模式 2.并发模式 一.事件处理模式 1.Reactoor模式 定义: 主线程只负责监听文件描述符上是否有事件发生,有的话立即将该事件通知工作线程,除此之外,主线 ...

  5. matlab柱状图画法

    %%各时段电量需求 clc close all clear all x = [11000 33000 25000 36000 25000 30000 18000]; tick = {'0-6' '6- ...

  6. Endpoint is unreachable and there is no snapshot available for offline browsing

    docker Portainer配置的时候出现这个错误:Endpoint is unreachable and there is no snapshot available for offline b ...

  7. Redis缓存雪崩、击穿、穿透

    参考大佬 前言 Redis在互联网技术存储方面使用如此广泛,几乎所有的后端技术面试官都要在Redis的使用和原理方面对小伙伴们进行360°的刁难.作为一个在互联网公司面一次拿一次offer的面霸(请允 ...

  8. springBoot入门到精通-Simple

    https://blog.csdn.net/zhiyikeji/article/details/84346189 1.springBoot前期准备 1.环境配置:jdk,maven 2.编写工具:st ...

  9. .net Dapper 实践系列(3) ---数据显示(Layui+Ajax+Dapper+MySQL)

    目录 写在前面 产生问题 解决方案 写在前面 上一小节,我们使用Dapper 里事务实现了一对多关系的添加.这一小节,主要记录如何使用Dapper 实现多表的查询显示. 产生问题 在mvc控制器中查询 ...

  10. java之spring之整合ssh

    这篇主要讲解spring + struts2 + hibernate : 目录结构如下: t_role t_user 1.新建 web项目 :spring_ssh 2.在 WebRoot/WEB-IN ...