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脚本下调用 ...
随机推荐
- c#内存泄漏分析
背景 给客户开发了一个WPF应用,每隔一段时间就会很卡,推测是内存泄漏引起.需要监测内存使用情况. 使用的工具 Ants Memory Profiler 百度网盘下载地址 使用教程 入门使用 参考文档 ...
- day51——对象、BOM对象、DOM对象
day51 JSON对象 var a = {'name':'太白','age':89}; 序列化:var b = JSON.stringify(a); 反序列化:var c = JSON.parse( ...
- Django框架第七篇(模型层)--多表操作:一对多/多对多增删改,跨表查询(基于对象、基于双下划线跨表查询),聚合查询,分组查询,F查询与Q查询
一.多表操作 一对多字段的增删改(book表和publish表是一对多关系,publish_id字段) 增 create publish_id 传数字 (publish_id是数据库显示的字段名 ...
- QT5学习记录(一)
学习环境:Windows10 + QT5.13 + QT Creater4.9.1(2019-08-10 22:02:30) 1.基本工程创建操作 常规操作创建画面,可选择QDialog.MainWi ...
- linux安装mysql后报错启动不了Starting MySQL. ERROR! The server quit without updating PID file (/var/lib/mysql/localhost.localdomain.pid).
今天安装完Mysql后,开启发生了错误: 2.打开错误信息文件,查看错误原因是:Plugin 'FEDERATED' is disabled. /usr/sbin/mysqld: Table 'mys ...
- Visual Studio 2019 安装
目录 写在前面 官网下载 安装 等待安装 启动 写在前面 目前工作的开发环境还是旧版本的Visual Studio 2013版.个人感觉还是有点跟不上时代更新迭代的节奏了.毕竟,技术在进步.如果我们也 ...
- HTML实用文本框样式
输入框景背景透明: <input style="background:transparent;border:1px solid #ffffff"> 鼠标划过输入框,输入 ...
- 【强烈推荐】ok-admin 一个好看又好用的后台模版!!!
ok-admin 一个很赞的,扁平化风格的,响应式布局的后台管理模版,旨为后端程序员减压! 目前一共有两个版本:ok-admin v1.0和ok-admin v2.0可自由选择! 源码地址:https ...
- react新旧生命周期
React16.3.0之前生命周期 16.3开始建议使用新的生命周期
- JS去除字符串中的中括号
var str = '这是一个字符串[html]语句;[html]字符串很常见'; alert(str.replace(/\[|]/g,''));//移除字符串中的所有[]括号(不包括其内容) //输 ...