hive -e
“-e”不进入hive的交互窗口执行sql语句,hive -e 后面跟hivesql字符串
bin/hive -e "select id from student;"
hive -f
“-f”执行脚本中sql语句
bin/hive -f /export/servers/datas/hive.sql
知道了语法,我们下面来看在实际工作中是怎么运用的
一、hive -e 执行hivesql
hive -e 执行的是sql字符串
需求:在shell脚本中定义sql语句,并通过hive -e执行sql内容
我们写个test_hive_e_2.sh
脚本测试一下,脚本内容如下:
备注:其实我就是想看一下加中文备注,加空格能不能执行
#!/bin/bash
#定义变量
app=gmall
#1、注意定义sql变量的时候等号左右两边不能有空格,刚执行这个脚本的时候报错,就是因为我变量右边有空格
#2、看我这个sql分了这么多行,我主要是想验证sql分多行是否可执行、加 -- 注释知否可执行,哈哈,结果就是都可以执行的
#3、这个sql里面还有个注意点,拼了一个app变量,shell双引号字符串中拼变量,直接带上变量名就可以了,
#最好写成这样 ${变量名}
sql="
-- 测试
select
mid_id -- 设备唯一标识
,user_id -- 用户标识
,version_code -- 程序版本号
,version_name -- 程序版本名
,lang -- 系统语言
,source -- 渠道号
,os -- 安卓系统版本
,area -- 区域
,model -- 手机型号
,brand -- 手机品牌
,sdk_version -- sdkVersion
,gmail -- gmail
,height_width -- 屏幕宽高
,app_time -- 客户端日志产生时的时间
,network -- 网络模式
,lng -- 经度
,lat -- 纬度
,entry -- 页面入口来源
from ${app}.dwd_start_log --启动日志表
limit 2;
"
#1、注意呀,hive -e 后面跟sql字符串
hive -e "${sql}"
来看下执行结果
拓展1:shell中定义变量用双引号和单引号以及不用引号的区别
- 使用单引号的情况下,不管里面的是否有变量或者其他的表达是都是原样子输出
- 双引号:如果其定义变量的时候使用双引号的话,则里面的变量或者函数会通过解析,解析完成后再输出内容,而不是把双引号中的变量名以及命令原样子输出
- 不使用引号:用于一些简单字符数字的定义与双引号类似
- shell变量没有数据类型的区分
- Shell 把任何存储在变量中的值,皆视为以字符组成的“字符串”
- 若变量值中存在空格,必须用双引号" "把值包括进来
- =号、等号两边不能存在空格
二、hive -f 执行hivesql
hive -f 执行的是sql文件
我们先编写一个sql脚本,然后在执行看下结果
-- 测试
-- 时间:20211226
-- 功能:查询启动日志表数据
-- hive脚本目前不支持多行注释,Hive脚本的注释目前好像只有 -- ,注释会写成 /**/会报错
select
mid_id -- 设备唯一标识
,user_id -- 用户标识
,version_code -- 程序版本号
,version_name -- 程序版本名
,lang -- 系统语言
,source -- 渠道号
,os -- 安卓系统版本
,area -- 区域
,model -- 手机型号
,brand -- 手机品牌
,sdk_version -- sdkVersion
,gmail -- gmail
,height_width -- 屏幕宽高
,app_time -- 客户端日志产生时的时间
,network -- 网络模式
,lng -- 经度
,lat -- 纬度
,entry -- 页面入口来源
from ${hivevar:database}.dwd_start_log --启动日志表
limit 2;
看一下执行结果
hive -hivevar database='gmall' -f dwd_start_log_dql.sql
#如果SQL脚本需要传递两个参数这样写
#hive -hivevar enter_school_date="20130902" -hivevar min_ag="26" -f testvar.sql
拓展1: hive SQL 脚本传参(-hivevar、-hiveconf)
网友评论