shell脚本中向hive动态分区插入数据
在hive上建表与普通分区表创建方法一样;
1 CREATE TABLE `dwa_m_user_association_circle`( 2 `device_number` string, 3 `oppo_number` string, 4 `prov_id_oppo` string, 5 `area_id_oppo` string, 6 `dealer_oppo` string, 7 `short_call_nums` bigint, 8 `long3_call_nums` bigint, 9 `long5_call_nums` bigint, 10 `long10_call_nums` bigint, 11 `short_total_nums` bigint, 12 `long3_total_nums` bigint, 13 `long5_total_nums` bigint, 14 `long10_total_nums` bigint, 15 `area_id` string) 16 PARTITIONED BY ( 17 `month_id` string, 18 `prov_id` string, 19 `dealer` string) 20 ROW FORMAT DELIMITED 21 FIELDS TERMINATED BY '|' 22 NULL DEFINED AS '' 23 STORED AS INPUTFORMAT 24 'org.apache.hadoop.mapred.TextInputFormat' 25 OUTPUTFORMAT 26 'org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat' 27 LOCATION 28 'hdfs://beh/user/hive/warehouse/all_ana_pro.db/dwa_m_user_association_circle' 29 TBLPROPERTIES ( 30 'numPartitions'='248', 31 'numFiles'='648', 32 'transient_lastDdlTime'='1542952067', 33 'totalSize'='247584222644', 34 'numRows'='0', 35 'rawDataSize'='0')
在shell脚本中,需设置的参数:
set hive.exec.dynamic.partition=true; #开启动态分区,默认是false
set hive.exec.dynamic.partition.mode=nostrict; #开启允许所有分区都是动态的,否则必须要有静态分区才能使用。
set hive.exec.max.created.files=1000000; #允许创建的最大文件数,当分区是2个或三个分区时,文件会被分成很多小文件,该设置就是将文件的最大数目设成100w;
1 insert overwrite table ALL_ANA_PRO.dwa_m_user_association_circle PARTITION (month_id=${v_month},prov_id,dealer) 2 select device_number, 3 oppo_number , 4 prov_id_oppo , 5 area_id_oppo , 6 dealer_oppo , 7 short_call_nums, 8 long3_call_nums, 9 long5_call_nums, 10 long10_call_nums, 11 sum(short_call_nums) over(distribute by device_number) short_total_nums, 12 sum(long3_call_nums ) over(distribute by device_number) long3_total_nums, 13 sum(long5_call_nums) over(distribute by device_number) long5_total_nums, 14 sum(long10_call_nums) over(distribute by device_number) long10_total_nums, 15 area_id , 16 prov_id , 17 dealer 18 from 19 (SELECT device_number, 20 prov_id , 21 area_id , 22 dealer , 23 oppo_number , 24 prov_id_oppo , 25 area_id_oppo , 26 dealer_oppo , 27 sum(case when t.bill_times < 60 then 1 else 0 end ) short_call_nums, 28 sum(case when t.bill_times >180 then 1 else 0 end ) long3_call_nums, 29 sum(case when t.bill_times >300 then 1 else 0 end ) long5_call_nums, 30 sum(case when t.bill_times >600 then 1 else 0 end ) long10_call_nums 31 FROM ( SELECT prov_id , 32 area_id , 33 device_number, 34 0 dealer , 35 prov_id_oppo , 36 area_id_oppo , 37 oppo_number , 38 dealer_oppo , 39 bill_times 40 FROM ALL_ANA_PRO.DWA_M_CALL_RING_BASE t 41 WHERE month_id = '${v_month}' 42 AND ticket_type = 1 43 AND dealer_oppo > -1 44 UNION ALL 45 SELECT prov_id_oppo prov_id , 46 area_id_oppo area_id , 47 oppo_number device_number , 48 dealer_oppo dealer , 49 prov_id prov_id_oppo , 50 area_id area_id_oppo , 51 device_number oppo_number , 52 0 dealer_oppo , 53 bill_times 54 FROM ALL_ANA_PRO.DWA_M_CALL_RING_BASE t 55 WHERE month_id = '${v_month}' 56 AND ticket_type = 1 57 AND dealer_oppo > -1 58 ) t 59 GROUP BY 60 device_number, 61 prov_id , 62 area_id , 63 dealer , 64 oppo_number , 65 prov_id_oppo , 66 area_id_oppo , 67 dealer_oppo 68 ) t;
这里,需要说明的是,向目标表插数:
insert overwrite table ALL_ANA_PRO.dwa_m_user_association_circle PARTITION (month_id=${v_month},prov_id,dealer)
其中select语句中动态分区prov_id,dealer两个字段一般在最后面;
转载于:https://www.cnblogs.com/xiao02fang/p/10007008.html
shell脚本中向hive动态分区插入数据相关推荐
- hive分区用2个字段有何限制_关于Hive使用动态分区插入数据详解
1.创建一个单一字段分区表 hive> create table dpartition(id int ,name string ) partitioned by(ct string ); 2 ...
- hive之动态分区插入数据及其参数配置
hive使用动态分区插入数据详解 往hive分区表中插入数据时,如果需要创建的分区很多,比如以表中某个字段进行分区存储,则需要复制粘贴修改很多sql去执行,效率低.因为hive是批处理系统,所以hiv ...
- shell脚本中写hive的sql语句
2.3 shell脚本中写hive语句 2.3.1 test.sh脚本内容 #!/bin/bash analysis_date=$1 #开始执行方法 #/opt/hive-2.3.5/bin/hive ...
- Spark 调用 hive使用动态分区插入数据
spark 调用sql插入hive 失败 ,执行语句如下 spark.sql("INSERT INTO default.test_table_partition partition(prov ...
- Impala动态分区插入数据慢
文章目录 一.背景分析 二.Impala分区 三.操作步骤 四.结果分析 五.主机配置 一.背景分析 有近20年的广告数据,需要对外提供查询分析服务(对数据进行Ad-Hoc式查询,Ad-Hoc:即席查 ...
- hive动态分区shell_Hive动态分区 参数配置及语法
Hive本身是不支持动态分区的.. 但动态分区是真的方便啊..不然手动维护要累死..按日期甚至小时来分区时动辄就好几千上万的分区..手动到哪一年去..? 想要用动态分区要先做一些设置来修改默认的配置. ...
- 【Hive】动态分区插入
使用动态分区插入数据时,无需指定分区键值,系统根据插入的数据,自动分配分区. 动态分区需注意以下几点: 需有一个同构的普通表做为源表: 分区键值和源表字段之间是根据位置来判断的,而不是根据命名来匹配的 ...
- Hive动态分区和分桶
Hive动态分区和分桶 1. Hive动态分区和分桶 1.Hive动态分区 1.hive的动态分区介绍 2.hive的动态分区配置 3.hive动态分区语法 2.Hive分桶 1.Hive分桶的介绍 ...
- shell脚本中编写SQL中 以传参(${accdate})的方式 动态:求 前12个月的日期和求 前一周(7天的日期)
shell脚本中 编写SQL中 以传参(${accdate})的方式 动态 求 前12个月的日期 CAST(CAST(DATE_FORMAT(DATE_SUB(from_unixtime(unix_t ...
最新文章
- 清理恶意插件提高上网速度
- oracle 11g EM停止后无法启动
- SpringBoot中使用类型安全的配置来注入大量自定义属性
- 根据这博客复习,我收到了BAT等大厂的技术岗offer
- 广东人大常委会党组会议强调:要加快人工智能等领域的相关立法工作。【Python】
- 大数据学习笔记34:Hive - 数据库与表操作
- 【Foreign】字串变化 [DP]
- 郑继明等《数值分析》习题解答
- IP/TCP IP分组的交付与转发
- 通过AFNetworking获取服务器时间
- 输出结果 配置_用单端仪表放大器实现全差分输出
- spoj COT COT2
- php正则表达式. 123,php正则表达式 - 路人甲123的个人页面 - OSCHINA - 中文开源技术交流社区...
- I/O——Spring cache abstraction
- 一本笔记,看懂《未来简史》!
- Numpy的tile函数
- 学习OpenCV:滤镜系列(8)——素描
- mysql数据库建库建表
- 茴字的四种写法——浅谈移动前端适配
- Win7系统英文输入法不见了找回的方法
热门文章
- Java容器坐标起点_Java的屏幕坐标是以像素为单位,容器的左下角被确定为坐标的起点...
- 问题之mybatis-plus中的TableField、Tableld的区别
- [python进阶]11接口:从协议到抽象基类
- Java 之HashSet、LinkedHashSet、TreeSet比较
- shell编程系列20--文本处理三剑客之awk常用选项
- CMDB功能分析与实现方案
- javascript 动态创建表格
- DB级buffer与IO 查看
- subclipse用法
- CentOS 5.5下搭建部署独立SVN服务器全程详解