首页 > 编程语言 >向Hive程序传递变量的三种方法

向Hive程序传递变量的三种方法

时间:2023-02-06 16:04:07浏览次数:60  
标签:变量 hive 三种 Hive hiveconf hivevar 读取


向Hive程序传递变量的三种方法_Hive

图 1 外部向Hive程序中传递变量的方法

使用Hive编写程序最常用的方法是将Hive语句写到文件中,然后使用hive -f filename.hql来批量执行查询语句。经常需要将外部参数传入到hql语句中替换其中的变量来动态执行任务,比如动态设定数据库名、表名、时间值、字段序列等变量,以达到脚本泛化执行的目的。

1) 方法1:字符串、正则、模板引擎等暴力方式替换

最简单也最暴力的方式,是在hql文件中设定{table_name}这样的变量占位符,然后使用调度程序比如shell、python、java语言读取整个hql文件到一个字符串,替换其中的变量。然后使用hive -e cmd_str来执行该Hive命令字符串。举例代码如表格 1和表格 2所示。

表格 1 hive ql文件内容

use test;

select * from student limit {limit_count};

表格 2 Python脚本读取、替换和执行Hive程序

import os

#step1: 读取query.ql整个文件的内容

ql_source=open(“query.ql”,”r”).read()

#step2:替换其中的占位符变量

ql_target=ql_source.replace(“{limit_count}”,”10″)

#step3:使用hive -e的方法执行替换后的Hql语句序列

os.system(“hive -e ‘%s'”%ql_target)

2) 方法2:使用系统变量或者环境变量

通常情况是使用shell来调度执行hive程序的,Hive提供了可以直接读取系统env和system变量的方法,如表格 3所示。

表格 3 使用env和system读取外部环境变量

use test;

–使用${env:varname}的方法读取shell中export的变量

select * from student limit ${env:g_limit_count};

–使用${system:varname}的方法读取系统的变量

select ${system:HOME} as my_home from student;

这种方式比较好,比如在shell中可以配置整个项目的各种路径变量,hive程序中使用env就可以直接读取这些配置了。

3) 方法3:在执行Hive命令时传入hivevar和hiveconf

第3中方法是在用hive命令执行hive程序时传递命令行参数,使用-hivevar和-hiveconf两种参数选项给该次执行传入外部变量,其中hivevar是专门提供给用户自定义变量的,而hiveconf则包括了hive-site.xml中配置的hive全局变量。

表格 4 hivevar和hiveconf传递变量的方法

hive -hivevar -f file

hive -hivevar tbname=’a’ -hivevar count=10

hive -hivevar -e cmd

hive -hivevar tbname=’a’ -hivevar count=10

hive -hiveconf -f file

hive -hiveconf tbname=’a’ – hiveconf count=10

hive -hiveconf -e cmd

hive -hiveconf tbname=’a’ -hiveconf count=10

最经常使用的是env和-hivevar方法,前者直接在Hive脚本中读取shell export的变量,后者则对脚本的当前执行进行参数设置。


标签:变量,hive,三种,Hive,hiveconf,hivevar,读取
From: https://blog.51cto.com/peishuai/6039308

相关文章

  • Hive的left join、left outer join和left semi join三者的区别
    Hive的Join的文档说明地址:​​​https://cwiki.apache.org/confluence/display/Hive/LanguageManual%2BJoins​​以下为两个测试数据表建表语句:MySQLuse......
  • Python新手常见问题二:不正确的使用类变量
    不正确的使用类变量看下面一个例子:>>>classA(object):...x=1...>>>classB(A):...pass...>>>classC(A):...pass...>>>printA.x,B.x,C.x111看起......
  • MATLAB实现随机森林(RF)回归与自变量影响程度分析
      本文介绍基于MATLAB,利用随机森林(RF)算法实现回归预测,以及自变量重要性排序的操作。目录1分解代码1.1最优叶子节点数与树数确定1.2循环准备1.3数据划分1.4随机森林......
  • springmvc url处理映射的三种方式集合
    目录一、springMVC简介二、工作流程与介绍三、代码截图以下组件通常使用框架提供实现:1、DispatcherServlet:前端控制器2、HandlerMapping:处理器映射器3、Handler:......
  • Hive窗口函数中range和rows的区别
    说明聊到hive,就少不了灵活的开窗函数,今天介绍下开窗函数中over子句内部经常会用到的rows和range的用法;数据准备createtabletemp_id_0116(idint)stor......
  • 一、python——变量和简单数据类型
    message="helloworld"print(message)message="Let'sgo"print(message)#title()以首字母大写显示每个单词name="zhouyuting"print(name.title())name......
  • spring注入静态变量有几种方法?不看的都掉坑里了!
    springboot中经常会用到properties文件中的配置,一般使用@Value注入,但是针对Utils工具类,需要注入一个静态变量有几种方法?为什么有的同学注入的值为null?代码示例如果直接......
  • C++ const成员函数如何改变类的成员变量
    C++const成员函数不能改变类的普通成员变量。可以改变类的静态成员变量。可以改变类的被mutable修饰的成员变量。#include<bits/stdc++.h>usingnamespacestd;s......
  • golang变量
    1.golang变量命名规则由26个英文字母大小写,0-9,_组成。变量名不能以数字开头。变量都是先声明再使用,一旦声明必须使用。2.golang变量赋值方法2.1单个变量赋值......
  • shell规范写法与变量
    shell规范写法与变量一、shell脚本概述1、shell是什么?Shell是一个特殊的应用程序,它介于操作系统内核与用户之间,充当了一个“命令解释器”的角色,负责接收用户输入的操作......