1.Hive配置属性

(1)命令行方式

Hive配置属性存储于 hiveconf 命名空间中,该命名空间中的属性是可读写的。在查询语句中插入 '${hiveconf:变量名}',就可以通过 hive -hiveconf来替换变量。例如,查询语句和执行方式如下:

[root]$cat test.sql    #查看该文件
SELECT * FROM ${hiveconf:tablename}
limit ${hiveconf:var_rows};
[root]$hive -hiveconf tablename='t1' -hiveconf var_rows=10 -f test.sql
或者
#!/bin/bash
tablename="student"
limitcount="8"

hive -S -e "use test; select * from ${tablename} limit ${limitcount};"

需要注意的是:

  • 如果有多个变量,每个变量前都要有参数 -hiveconf
  • 变量赋值等号左右不能有空格(例如var_rows=10不能有空格)

(2)hql脚本方式

-- 设置变量
SET startdate=20181201;
SET enddate=20181231;
SET event_name=('网商节_主会场', '网商节_微信分享','网商节_主会场','网商节_分会场');

-- 查询语句
select
    event_name
    , count(1) pv
    , count(distinct ga_id) uv
from edw_log.user_trace_log_di
where dt between ${hiveconf:startdate} and ${hiveconf:enddate}
and  event_name  in ${hiveconf:event_name}
and data_source_id = '3'
group by event_name
;
2.Hive命令行变量

(1)命令行方式

Hive命令行变量,存储于 hivevar 命名空间中,该命名空间中的变量是可读写的。使用方式和hive配置属性类似,只是在查询语句中插入的是'${hivecar:变量名}',其中命名空间"hivecar:"可以省略。例如:

[root]$cat test.sql
SELECT * FROM ${hivevar:tablename}  #等同于${tablename}
limit ${hiveconf:var_rows};
[root]$hive -hivevar tablename='t1' -hiveconf var_rows=10 -f test.sql

因为命令行变量的命名空间是唯一可以省略的,因此:

  • ${hivevar:变量名}等价于${变量名}
  • 除了用hive -hivevar 变量赋值,还可以用hive -d,d是define的简写,例如下面三个执行方式是一样的:
[root]$hive -hivevar tablename= -f test.sql
[root]$hive -define tablename= -f test.sql
[root]$hive -d tablename= -f test.sql

(2)HQL脚本方式

SET hivevar:startdate=20181025;
SET hivevar:enddate=20181027;
SET hivevar:event_name=('网商节_主会场', '网商节_微信分享','网商节_主会场','网商节_分会场');

select
    event_name
    , count(1) pv
    , count(distinct ga_id) uv
FROM edw_log.agent_trace_log_di
WHERE dt between ${hivevar:startdate} and ${hivevar:enddate}
and  event_name  in ${hivevar:event_name}
AND data_source_id = '3'
group by event_name
;

其他替换变量的方法:
利用shell脚本设置hive查询语句中的变量
利用Python替换Hive查询语句中的变量

参考资料:

在hive查询中使用变量
hive 传递变量的两种方式
hive中的hiveconf与hivevar区别以及其作用域

Hive中变量的使用的更多相关文章

  1. Hive 中的变量

    Hive的变量前面有一个命名空间,包括三个hiveconf,system,env,还有一个hivevar hiveconf的命名空间指的是hive-site.xml下面的配置变量值. system的命 ...

  2. mysql分组排序取最大值所在行,类似hive中row_number() over partition by

    如下图, 计划实现 :按照 parent_code 分组, 取组中code最大值所在的整条记录,如红色部分.(类似hive中: row_number() over(partition by)) sel ...

  3. Hive之变量和属性

    首先看一下hive cli工具对于变量的定义规定的几项功能: $ bin/hive -h usage: hive -d,--define <key=value>          Vari ...

  4. 关于sparksql操作hive,读取本地csv文件并以parquet的形式装入hive中

    说明:spark版本:2.2.0 hive版本:1.2.1 需求: 有本地csv格式的一个文件,格式为${当天日期}visit.txt,例如20180707visit.txt,现在需要将其通过spar ...

  5. 漫谈数据仓库之拉链表(原理、设计以及在Hive中的实现)

    本文将会谈一谈在数据仓库中拉链表相关的内容,包括它的原理.设计.以及在我们大数据场景下的实现方式. 全文由下面几个部分组成: 先分享一下拉链表的用途.什么是拉链表. 通过一些小的使用场景来对拉链表做近 ...

  6. hive中创建表失败

    使用create table命令创建表失败,如下错误信息: hive> create table test(id int,name string,age int,sex string); FAI ...

  7. Hive学习笔记——Hive中的分桶

    对于每一个表(table)或者分区, Hive可以进一步组织成桶,也就是说桶是更为细粒度的数据范围划分.Hive也是针对某一列进行桶的组织.Hive采用对列值哈希,然后除以桶的个数求余的方式决定该条记 ...

  8. Hive中使用LZO

    hive 中使用lzo 1 启动hive 错误Exception in thread "main" java.lang.NoClassDefFoundError: org/apac ...

  9. Hive中的集合数据类型

    除了使用础的数据类型string等,Hive中的列支持使用struct, map, array集合数据类型. 数据类型 描述 语法示例 STRUCT 和C语言中的struct或者"对象&qu ...

随机推荐

  1. 批量查询"_mget"

    1.不同index的批量查询GET /_mget{ "docs":[{ "_index":"test_index1", "_typ ...

  2. .NET Core 使用 Kestrel

    Kestrel介绍 Kestrel是一个基于libuv的跨平台web服务器 在.net core项目中就可以不一定要发布在iis下面了 Kestrel体验 可以使用useUrls来设置一个请求的地址 ...

  3. 用A标签实现页面内容定位 点击链接跳到具体位置

    经常在维基百科等网站看到目录列表,点击链接会跳到具体的位置,小美眉一直在问是怎么做到的,其实挺简单的,用A标签实现页面内容定位就行了.实例参考微信营销理论手册的目录. 首先用A标签定义目录的链接. & ...

  4. jsp在select中的option中编写if标签

    <select onchange="lxx(this)"> <option value="">全部</option> < ...

  5. 由ngx.say和ngx.print差异引发的血案

    Jan 16, 2018openresty点击 最近上线一个项目,利用openresty在前面做反向代理,部分地址通过lua的http请求后端接口进行返回,在线下测试都没问题,公司预发灰度测试都通过了 ...

  6. 使用 Oracle Data Access Components连接oracel

    使用微软自带的oracle连接类,在framework4.0中被标识为弃用,强行用它开发了Winform程序,发布放到XP上提示: Error System.Data.OracleClient req ...

  7. Elasticsearch 节点角色说明

    节点类型 解释 作用 默认配置 专用节点 注意事项 Master-eligible node 主节点 负责轻量级群集范围的操作例如: 创建或删除索引 跟踪集群节点 分片分配 node.master: ...

  8. git checkout .还可以恢复吗

    说实话,希望很渺茫, 如果你在git  checkout . 之前操作了git stash ,还是可以恢复的,操作如下: 最后修改文件恢复了! 但是如果你在git checkout .之前没有git ...

  9. MySQL数据类型--与MySQL零距离接触2-14MySQL默认约束

    创建一个数据表,多加一个字段sex性别,1男,2女,3保密.默认的是3,也就是保密. 但是查看表的时候,会将默认值3赋予这个字段.

  10. Cocos2d-JS studio基础控件的使用

    在studio里把几个基础控件往场景文件一拖,然后导出json格式的资源文件 逻辑代码如下: 1 var HelloWorldLayer = cc.Layer.extend({ 2 sprite:nu ...