2019独角兽企业重金招聘Python工程师标准>>>

1. hive脚本的执行方式

hive脚本的执行方式大致有三种: 
1. hive控制台执行; 
2. hive -e "SQL"执行; 
3. hive -f SQL文件执行;

参考hive的用法

usage: hive-d,--define <key=value>          Variable subsitution to apply to hivecommands. e.g. -d A=B or --define A=B--database <databasename>     Specify the database to use-e <quoted-query-string>         SQL from command line-f <filename>                    SQL from files-H,--help                        Print help information-h <hostname>                    connecting to Hive Server on remote host--hiveconf <property=value>   Use value for given property--hivevar <key=value>         Variable subsitution to apply to hivecommands. e.g. --hivevar A=B-i <filename>                    Initialization SQL file-p <port>                        connecting to Hive Server on port number-S,--silent                      Silent mode in interactive shell-v,--verbose                     Verbose mode (echo executed SQL to theconsole)

1.1. hive控制台执行

顾名思义,是进入hive控制台以后,执行sql脚本,例如:

hive> set mapred.job.queue.name=pms;
hive> select page_name, tpa_name from pms.pms_exps_prepro limit 2;
Total MapReduce jobs = 1
Launching Job 1 out of 1
...
Job running in-process (local Hadoop)
2015-10-23 10:06:47,756 null map = 100%,  reduce = 0%
2015-10-23 10:06:48,863 null map = 23%,  reduce = 0%
2015-10-23 10:06:49,946 null map = 38%,  reduce = 0%
2015-10-23 10:06:51,051 null map = 72%,  reduce = 0%
2015-10-23 10:06:52,129 null map = 100%,  reduce = 0%
Ended Job = job_local1109193547_0001
Execution completed successfully
Mapred Local Task Succeeded . Convert the Join into MapJoin
OK
APP首页   APP首页_价格比京东低
APP首页   APP首页_价格比京东低
Time taken: 14.279 seconds
hive> 

1.2. hive -e "SQL"方式执行

利用hive -e "SQL"的方式进入hive控制台并直接执行sql脚本,例如:

hive -e "
set mapred.job.queue.name=pms;
set mapred.job.name=[HQL]exps_prepro_query;select page_name, tpa_name
from pms.pms_exps_prepro
limit 2;"

1.3. hive -f SQL文件方式执行

执行sql文件中的sql脚本,例如:

pms_exps_prepro.sql文件内容如下:

set mapred.job.queue.name=pms;
set hive.exec.reducers.max=48;
set mapred.reduce.tasks=48;
set mapred.job.name=[HQL]pms_exps_prepro;drop table if exists pms.pms_exps_prepro;
create table pms.pms_exps_prepro as
select a.provinceid,a.cityid,a.ieversion,a.platform,'${date}' as ds
from track_exps a;

上述文件中的sql脚本接收一个日期,接收参数写法类似${date},执行时如下执行:

date=2015-10-22
hive -f pms_exps_prepro.sql --hivevar date=$date

2. hive转义字符的问题

下面以一个业务场景阐述关于hive转义字符的问题

track_exps记录曝光数据,现在小A希望获取2015-10-20有效的曝光数据 
其中有效的曝光记录是指, 
relatedinfo字段满足数字.数字.数字.数字.数字的格式, 
例如4.4.5.1080100.1

  • extfield1字段满足request-字符串,section-数字的格式, 
    例如request-b470805b620900ac492bb892ad7e955e,section-4

对于这个问题,小A写出了如下sql脚本:

select *
from track_exps
where ds = '2015-10-20'and relatedinfo rlike '^4.\d+.\d+.\d+.\d+$' and extfield1 rlike '^request.+section-\d+$';

但是由于正则表达式是被包含在sql里面,所以里面的特殊字符需要转义

2.1. hive -e "SQL"的方式执行

改动如下:

hive -e "
set mapred.job.queue.name=pms;explain select cityid
from track_exps
where ds = '2015-10-20'and relatedinfo rlike '\\^4\\.\\\d\\+\\.\\\d\\+\\.\\\d\\+\\.\\\d\\+\\$' and extfield1 rlike '\\^request\\.\\+section\\-\\\d\\+\\$';"

查看执行计划,可以确定正则表达式解析正确了:

...
predicate:expr: ((relatedinfo rlike '^4.\d+.\d+.\d+.\d+$') and (extfield1 rlike '^request.+section-\d+$'))type: boolean
...

分析如下:

hive -e "SQL"的执行方式中,"'正则表达式'",正则表达式先被一个单引号括起来,再被一个双引号括起来的,所以正则表达式里面,\\^的第一个\用来解析第二个\,第二个\才真正起到了转义的作用

2.2. hive -f SQL文件的方式执行

改动如下:

pms_exps_prepro.sql文件内容如下:

select *
from track_exps
where ds = '2015-10-20'and relatedinfo rlike '\^4\.\\d\+\.\\d\+\.\\d\+\.\\d\+\$' and extfield1 rlike '\^request\.\+section\-\\d\+\$';

分析如下:

不同于hive -e "SQL"的执行方式,因为是sql文件,所以正则表达式只被一个单引号括起来而已,一个\就起到了转义的作用了

转载于:https://my.oschina.net/u/2000675/blog/1920416

hive脚本执行方式相关推荐

  1. shell简介和脚本执行方式

    shell简介和脚本执行方式 1.shell简介 Shell是命令解释器(command interpreter),是Unix操作系统的用户接口,程序从用户接口得到输入信息,shell将用户程序及其输 ...

  2. 『SHELL』--SHELL脚本执行方式(转)

    Shell脚本的执行方式: 注明:wd代表"脚本保存的目录" 1.fork 语法:/wd/shell.sh fork是最普通的, 就是直接在脚本里面用/wd/shell.sh来调用 ...

  3. Linux Shell编程之脚本执行方式

    1.新建bash脚本文件 打开命令终端 touch hello.sh vim hello.sh 2.编辑bash文件 #!/bin/bash # this is a test programerech ...

  4. shell脚本执行方式,更方便更快捷。

    在进行linux测试时编写脚本是必不可少的.最近经常使用Linux,感觉太频繁地敲击键盘有些累了,于是想到了Shell脚本.可以把太多的命令写成一个脚本,这样每次执行一遍  shell文件,就可以省去 ...

  5. linux脚本无法执行命令,为什么Shell脚本执行不成功?原来是这样

    Shell脚本语言是linux系统中内置的一门非常强大的语言,非常善于处理操作系统层面的应用,我们从网上下载的很多应用的安装和启动往往都是用Shell脚本语言写的.可是初步开始使用linux的小伙伴是 ...

  6. shell脚本的执行方式及区别

    1.利用直接执行(sh/bash或./)的方式来执行脚本. 2.利用source(或 .)来执行脚本. 这两种方式如果从执行结果来看,并没有什么区别. 下面看个例子: cat name.sh #!/b ...

  7. linux shell脚本的执行方式与区别

    linux shell脚本的执行方式与区别

  8. hive运行mysql脚本_用java代码调用shell脚本执行sqoop将hive表中数据导出到mysql

    1:创建shell脚本 1 touch sqoop_options.sh2 chmod 777 sqoop_options.sh 编辑文件  特地将执行map的个数设置为变量  测试 可以java代码 ...

  9. debian 重复执行sh_debian 脚本启动方式

    同所有的Unix一样,Debian启动时要执行init程序.init的配置文件(/etc/inittab)中指定的第一个执行脚本应该是/etc/init.d/rcS.该脚本执行/etc/rcS.d/目 ...

最新文章

  1. Swift3.0语言教程获取字符串编码与哈希地址
  2. DOJO试用手记3--异步通信【原创】
  3. Linux环境下虚拟环境virtualenv安装和使用(转)
  4. 什么是操作系统 PV 操作
  5. 云原生时代下,容器安全的“四个挑战”和“两个关键”
  6. 全球及中国航空发动机市场动态前景及十四五项目专项调研报告2021-2027年版
  7. 可编程交换时代就在这里
  8. 取余运算(信息学奥赛一本通-T1326)
  9. aspx调试的时候其他机器也可以打开_VSCode 穿越跳板机调试远程代码
  10. pytorch学习——基本优化思想与最小二乘法
  11. java mb单位转换_Java计算机硬盘大小转换(B,KB,MB,GB,TB,PB之间的大小转换)
  12. 智能优化算法:社交网络搜索算法-附代码
  13. C语言推荐书籍从入门到进阶带你走上大牛之路
  14. 执行shellcode一直提示illegal instruction
  15. 磁条卡磁道数据格式检测指南
  16. gojs开发环境去除水印
  17. java用户密码修改_java怎么实现修改用户名密码
  18. 求助:matlab报错:位置 2 处的索引超出数组边界(1)
  19. AGV搬运机器人「眼睛」的未来:3D视觉导航方案
  20. 在excel 中如何让一串数字真正的变为时间格式

热门文章

  1. html5 制作神器,HTML5/Canvas 简单的泡沫生成器
  2. python鼠标碰撞_获取鼠标指针测试item之间的碰撞
  3. 内网通免广告_3D打印进军广告发光字领域,成为名副其实的智能打印工厂
  4. 腾讯翻译君在线翻译怎么翻译整个文件_藏语怎么翻译成中文?这两方法非常好用...
  5. matlab怎么画单位圆的切线,matlab绘图曲线标注怎么输出角度单位,就是那个小圆圈?...
  6. python爬虫设计_python爬虫设计(刷访问量,赞)
  7. mysql 查看索引深度_mysql 学习 - 索引深度理解
  8. php 容器实现,PHP 依赖注入容器实现
  9. nodejs mysql 编码_nodejs 查询mysql数据库的数据显示乱码
  10. 如何理解c语言的变量,C语言中变量的理解.PDF