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脚本下调用 ...
随机推荐
- JDK8从永生代到元数据区
永生代 永生代默认的最大内存大小是在32位JVM上为64MB, 在64位JVM上为82MB.可以通过-XX:PermSize=[size]和-XX:MaxPermSize=[size]来调整. 永生代 ...
- ES6常用的新特性
1.Let&const <!DOCTYPE html> <html lang="en"> <head> <meta charset ...
- MySQL多表查询,Navicat使用,pymysql模块,sql注入问题
一.多表查询 #建表 create table dep( id int, name varchar(20) ); create table emp( id int primary key auto_i ...
- JZOJ5833 永恒
题目大意 给你一个树,每个节点上有有一个部落,以及部落的人数,要你求出每个节点的子树里面人数最多的部落是哪一个(人数相同部落编号最小的). 思路 全网第一篇分治题解 考虑树的dfs序,然后分治处理,每 ...
- JavaScript 的 深拷贝和浅拷贝
深拷贝和浅拷贝都是针对的引用类型, JS中的变量类型分为值类型(基本类型)和引用类型: 对值类型进行复制操作会对值进行一份拷贝,而对引用类型赋值,则会对地址进行拷贝,最终两个变量指向同一份数据 一.先 ...
- 全栈项目|小书架|微信小程序-点赞功能实现
微信小程序端的点赞功能其实没什么好介绍的,无非就是调用接口改变点赞状态和点赞数量.需要注意的是取消点赞时的处理,我这里为了减少服务器接口的调用,直接本地存一个变量,修改这里的变量值即可. 由于源码都相 ...
- Java中守护线程的总结
在Java中有两类线程:User Thread(用户线程).Daemon Thread(守护线程) 用个比较通俗的比如,任何一个守护线程都是整个JVM中所有非守护线程的保姆: 只要当前JVM实例中尚存 ...
- 浅谈分词算法基于字的分词方法(HMM)
前言 在浅谈分词算法(1)分词中的基本问题我们讨论过基于词典的分词和基于字的分词两大类,在浅谈分词算法(2)基于词典的分词方法文中我们利用n-gram实现了基于词典的分词方法.在(1)中,我们也讨论了 ...
- mybatis 变更xml文件目录
mybatis的xml默认读取的是resources目录,这个目录是可以变化的.我习惯于将mapper文件和xml放到一起或相邻目录下. 如图: 具体操作: 以mybatis-plus为例 boots ...
- javascript ~~ 符号是什么意思呢?
~ bitwise NOT 运算符 ~对操作数按位取反,两个的意思即作两次取反操作,其实是等作原数本身(操作数是32整数范围内) ~~(Math.random()*7) 即 var n = Math. ...