hive动态分区shell_Hive/Shell 创建Hive 库 ,表脚本,Hive 动态增加分区脚本
最近工作中使用到了Hive, 并对Hive 的数据库,表完成创建。
创建的表为分区表,也涉及到了分区表 的按天动态增加分区。
代码组织结构:
创建数据库:
create_dmp.hql
--dmp 数据库存储了dmp所需要的数据
CREATE DATABASE IF NOT EXISTS `dmp`
WITH DBPROPERTIES ('creator' = 'sunzhenhua', 'create_date' = '2018-06-07');
执行创建命令
hive -f create_dmp.hql
创建表:
create_clearlog.hql
--dmp_clearlog 存放了清洗过后的投放信息--分区表: 按天分区--外部表
USE dmp;
CREATE EXTERNAL TABLE IF NOT EXISTS `dmp_clearlog` (
`date_log`string COMMENT 'date in file',
`hour`int COMMENT 'hour',
`device_id`string COMMENT '(android) md5 imei / (ios) origin mac',
`imei_orgin`string COMMENT 'origin value of imei',
`mac_orgin`string COMMENT 'origin value of mac',
`mac_md5`string COMMENT 'mac after md5 encrypt',
`android_id`string COMMENT 'androidid',
`os`string COMMENT 'operating system',
`ip`string COMMENT 'remote real ip',
`app`string COMMENT 'appname')
COMMENT'cleared log of origin log'PARTITIONED BY (
`date` date COMMENT'date used by partition')
ROW FORMAT DELIMITED FIELDS TERMINATED BY','TBLPROPERTIES ('creator'='szh', 'crate_time'='2018-06-07')
;
在编写复杂创建表语句的时候着实遇到了很多问题,创建表的语句的书写格式是要遵循规范的。
具体的规范定义,参考我的博客:
这里我们编写了一个为 dmp.dmp_clearlog 动态增加分区的脚本:
脚本主要实现了以下几种功能:
1.对传入的日期参数进行校验 ,1)可以创建指定日期的分区,2)日期参数必须为yyyy-MM-dd格式
2.向hive执行传递参数
3.使用hive 新版的cli 工具,beeline执行 hql 文件 ,下面脚本包含了两种模式 hive-cli, beeline
延伸内容:
beeline 执行的详细讲解见我的另一篇博客
shell 中对字符串按指定分隔符进行划分的三种方法
shell 中正则表达式的应用
日期判断正则
date_pattern='^[0-9]{4}-((0([1-9]{1}))|(1[1|2]))-(([0-2]([0-9]{1}))|(3[0|1]))$'
下面是我的脚本
load_hdfs_data_into_dmp_clearlog.sh
#! /bin/bashset -o errexit
source/etc/profile
source~/.bashrc
ROOT_PATH=$(dirname $(readlink -f $0))
echo $ROOT_PATH
date_pattern_old='^[0-9]{4}-[0-9]{1,2}-[0-9]{1,2}$'date_pattern='^[0-9]{4}-((0([1-9]{1}))|(1[1|2]))-(([0-2]([0-9]{1}))|(3[0|1]))$'#参数数量
argsnum=$#
#一些默认值
curDate=`date +%Y%m%d`
partitionDate=`date -d '-1 day' +%Y-%m-%d`
fileLocDate=`date -d '-1 day' +%Y-%m-%d`
#日志存放位置
logdir=load_hdfs_data_logs
function tips() {
echo"Usage : load_data_into_dmp_clearlog.sh [date]"echo"Args :"echo"date"echo"date use this format yyyy-MM-dd , ex : 2018-06-02"echo"============================================================"echo"Example :"echo"example1 : sh load_data_into_dmp_clearlog.sh"echo"example2 : sh load_data_into_dmp_clearlog.sh 2018-06-02"}if [ $argsnum -eq 0] ; then
echo"No argument, use default value"elif [ $argsnum-eq 1] ; then
echo"One argument, check date pattern"arg1=$1
if ! [[ "$arg1" =~$date_pattern ]] ; then
echo-e "\033[31m Please specify valid date in format like 2018-06-02"echo-e "\033[0m"tips
exit1fi
#echo $arg1|tr "-" " "dateArr=($(echo $arg1 |tr "-" " "))
echo"dateArr length is"${#dateArr[@]}
partitionDate=${dateArr[0]}-${dateArr[1]}-${dateArr[2]}
fileLocDate=${dateArr[0]}"-"${dateArr[1]}"-"${dateArr[2]}elseecho-e "\033[31m Not valid num of arguments"echo-e "\033[0m"tips
exit1fiif [ ! -d "$logdir"]; then
mkdir-p $logdir
fi
echo ${partitionDate}
cd $ROOT_PATH
#nohup hive-hivevar p_date=${partitionDate} -hivevar f_date=${fileLocDate} -f hdfs_add_partition_dmp_clearlog.hql >> $logdir/load_${curDate}.log
nohup beeline-u jdbc:hive2://10.180.0.26:10000 -n cloudera-scm --color=true --silent=false --hivevar p_date=${partitionDate} --hivevar f_date=${fileLocDate} -f hdfs_add_partition_dmp_clearlog.hql >> $logdir/load_${curDate}.log
View Code
执行脚本示例: (参数校验)
最后动态增加分的脚本
USE dmp;
ALTER TABLE `dmp_clearlog` ADD IF NOT EXISTS PARTITION (`date`='${hivevar:p_date}') LOCATION 'hdfs://dmp-big001.a1.bj.jd:8020/bigdata/clearedLog/Device/${hivevar:f_date}';
hive动态分区shell_Hive/Shell 创建Hive 库 ,表脚本,Hive 动态增加分区脚本相关推荐
- hive的数据定义之创建数据库和表
1.对数据库的操作 create database hive_db //创建数据库hive_db create table hive_db.test(字段) //在数据库hive_db中创建test表 ...
- 新加装的硬盘,装上系统后发现EFI分区没有被创建,还是用旧硬盘的EFI分区
引发问题:如果没有旧硬盘就没法引导系统,没法开机. 解决办法:在新硬盘增加一个EFI分区. 目前情况大概就是这个样子:(本人忘了截图,用别人的) 可见,装好系统在HD0后,只有一个MSR分区,没有ES ...
- mysql表分区占用存储_MySQL 分区分表应用场景分析和分区中可能遇到的坑点
MySQL的分区和分表应用场景分析 在日常工作中当我们的某张表的数据量过大的时候,首当其冲的可能就是进行分区和分表,但是是如何分区或者分表都要结合一点的业务场景下进行分析,才会显著的提升性能,来聊一聊 ...
- 建立efi分区_电脑维修不求人之几条命令无损增加分区的方法
很多品牌计算机厂家在设备出厂时,只给用户留了一个分区,不论用户的硬盘有多大.很多人觉得分区是一件很复杂的事情,尤其是在听说分区有可能损坏数据时,就更不敢擅自更改.增加分区.其实,增加一个分区是分分钟的 ...
- linux df是否分区,Linux中df命令查询磁盘信息和fdisk命令分区的用法
df - 报告文件系统磁盘空间的使用情况 总览 df [option]... [file]... posix 选项: [-kp] gnu 选项 (最短方式): [-ahhiklmpv] [-t fst ...
- 输入压缩空间量是分区量吗_硬盘只有C盘如何增加分区
硬盘只有一个C盘如何增加分区呢?新买的笔记本电脑很多都是固态硬盘120G,基本只要一个系统分区,如何不影响系统的情况下给C盘增加分区呢?下面让小白系统教你不用重装系统给C盘增加分区. 增加分区 使用自 ...
- hive动态分区shell_Hive动态分区 参数配置及语法
Hive本身是不支持动态分区的.. 但动态分区是真的方便啊..不然手动维护要累死..按日期甚至小时来分区时动辄就好几千上万的分区..手动到哪一年去..? 想要用动态分区要先做一些设置来修改默认的配置. ...
- Hive基本操作,DDL操作(创建表,修改表,显示命令),DML操作(Load Insert Select),Hive Join,Hive Shell参数(内置运算符、内置函数)等
1. Hive基本操作 1.1DDL操作 1.1.1 创建表 建表语法 CREATE [EXTERNAL] TABLE [IF NOT EXISTS] table_name [(col_nam ...
- shell 创建表 连接db2_大数据技术之SparkSQL(七)连接Hive数据库
Apache Hive是Hadoop上的SQL引擎,Spark SQL编译时可以包含Hive支持,也可以不包含.包含Hive支持的Spark SQL可以支持Hive表访问.UDF(用户自定义函数)以及 ...
最新文章
- 算法-----礼物的最大价值
- java singleton 多线程_Java创建线程安全的单例singleton
- WebX.0:Web1.0
- SAP UI5 busy dialog - SVG
- 基于JAVA+SpringBoot+Mybatis+MYSQL的客户关系CRM系统
- linux6.5配置ssh,CentOS 6.5 配置 SSH 免密登录
- 是谁榨干了 Android 设备的电量和流量?!| 极客头条
- 浪漫桃心的Android表白程序
- 电脑硬件知识学习_计算机的发展史,你对硬件知识了解多少,带大家了解一下....
- 00110_Class类
- 中国搜索20年:巨头百度的兴衰密码
- 光耦w314的各引脚图_常用光耦型号代换大全
- 如何消除win10文件右上角的蓝色箭头
- HFDS 内部工作机制
- Linux 普通用户和root用户任意切换
- 时序模型:长短期记忆网络(LSTM)
- node.js 最全命令行配置操作win10
- ios13全选手势_iOS13大揭秘:深色模式、多任务、新手势等
- Win2003集群简介
- 360杀毒属于计算机操作系统吗,360杀毒软件 统一操作系统UOS,保护您的电脑安全...
热门文章
- 哪款浏览器速度最快_全球知名度非常高的火狐浏览器,它好在哪呢?
- php伪协议漏洞_PHP之伪协议深入理解
- sqlbulkcopy能用于mysql吗_混凝土自动上料搅拌车能用于农村盖房吗?
- php flush 逐行显示_PHP逐行输出(ob_flush与flush的组合)
- ipv6远程连接mysql_如何利用IPv6进行远程桌面连接
- Git 标签(tag)相关操作
- react-native 第三方库
- sftp api java_SFTP例子2----使用JSch实现SFTP文件传输
- Java Swing Mysql学生成绩管理系统
- yntaxError: Non-UTF-8 code starting with ‘\xe6‘ in file