shell脚本中向hive动态分区插入数据
在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动态分区插入数据的更多相关文章
- hive 动态分区插入
首先需要进行以下设置: set hive.exec.dynamic.partition=true; set hive.exec.dynamic.partition.mode=nonstrict; se ...
- Hive 根据表中某个字段动态分区 以及临时表创建
使用hive储存数据时,需要对做分区,如果从kafka接收数据,将每天的数据保存一个分区(按天分区),保存分区时需要根据某个字段做动态分区,而不是傻傻的将数据写到某一个临时目录最后倒入到某一个分区,这 ...
- Hive如何根据表中某个字段动态分区
使用hive储存数据时,需要对做分区,如果从kafka接收数据,将每天的数据保存一个分区(按天分区),保存分区时需要根据某个字段做动态分区,而不是傻傻的将数据写到某一个临时目录最后倒入到某一个分区,这 ...
- hive 动态分区与混合分区
hive的分区概念,相信大家都非常了解了.通过将数据放在hdfs不同的文件目录下,查表时,只扫描对应分区下的数据,避免了全表扫描. 提升了查询效率. 关于hive分区,我们还会用到多级分区.动态分区. ...
- hive动态分区和混合分区
各位看官,今天我们来讨论下再Hive中的动态分区和混合分区方面的一些知识点以及相关的一些问题. 前面我们已经讲过管理表和外部表的一般分区的一些知识点,对于需要对表创建很多的分区,那么用户就需要些很多的 ...
- Hive动态分区和分桶(八)
Hive动态分区和分桶 1.Hive动态分区 1.hive的动态分区介绍 hive的静态分区需要用户在插入数据的时候必须手动指定hive的分区字段值,但是这样的话会导致用户的操作复杂度提高,而且在 ...
- Hive动态分区详解
目录 动态分区调整 注意 动态分区插入 动静分区结合 例子 动态分区调整 动态分区属性:设置为true表示开启动态分区功能(默认为false)hive.exec.dynamic.partition=t ...
- 什么是hive的静态分区和动态分区,它们又有什么区别呢?hive动态分区详解
面试官问我,什么是hive的静态分区和动态分区,这题我会呀. 简述 分区是hive存放数据的一种方式,将列值作为目录来存放数据,就是一个分区,可以有多列. 这样查询时使用分区列进行过滤,只需根据列值直 ...
- Shell脚本中执行mysql的几种方式(转)
Shell脚本中执行mysql的几种方式(转) 对于自动化运维,诸如备份恢复之类的,DBA经常需要将SQL语句封装到shell脚本.本文描述了在Linux环境下mysql数据库中,shell脚本下调用 ...
随机推荐
- webx入门
- JVM的基本结构和JVM的内存结构
这里概要介绍一下JVM在启动后,作为操作系统的一个进程的基本结构,以及从操作系统角度看,JVM如何管理它从操作系统里申请来的内存的,也就是JVM的内存结构或者叫JVM内存模型. 1.JVM的基本结构 ...
- Spring Boot 项目的 API 接口防刷
首先是写一个注解类 拦截器中实现 注册到springboot中 在Controller中加入注解 说明:使用了注解的方式进行对接口防刷的功能,非常高大上,本文章仅供参考 一,技术要点:springbo ...
- 推荐一款好用的json导出execl格式的文件的js工具-JsonExportExcel
<html> <head> <meta charset="utf-8"> <title>json导出Excel</title& ...
- mysql慢查询及查询优化
mysql默认是没有开启慢查询的 1 查看慢查询的配置状态 show variables like 'slow_query%'; slow_query_log 慢查询开启状态 slow_query_l ...
- OpenLayers加载谷歌地球离线瓦片地图
本文使用OpenLayers最新版本V5.3.0演示:如何使用OpenLayer加载谷歌地球离线瓦片地图.OpenLayers 5.3.0下载地址为:https://github.com/openla ...
- 山峰和山谷 Ridges and Valleys
题目描述 思路 一开始看这道题目,也不是很会,谁会把统计之类的问题和bfs联系在一起,没有开始的状态,没有结束的状态,题目中连一个最短之类的词也没有出现. 然后统计嘛,题目中说了方格高度都相同,就把周 ...
- STM32 EV1527无线通信(433)
EV1527无线通信 先说一下这个通信协议的数据格式,这个图片是我在手册里截的. 大家按照单片机类型计算周期,我的是STM32f103vb (4CLK大致等于350um) 发送时按照 先发同步码后发D ...
- 【LEETCODE】64、链表分类,medium&hard级别,题目:2,138,142,23
package y2019.Algorithm.LinkedList.medium; import y2019.Algorithm.LinkedList.ListNode; /** * @Projec ...
- 浅谈Java Object
在Java中,所有的类都继承自Object类,因此万物皆对象?也没错! 那有人会问,我的子类继承的是父类不是Object,怎么说? 如果一个类没用显示的继承某一个类,那么他就会隐式的继承 Object ...