存在的问题:当把hql写到shell中,不方便阅读;但把hql写到文件中,又传递不了参数;怎么办呢?

自定义hivefile

执行方式形如:

第一个参数为要执行的hql文件,后续的参数为要替换的key-value对。

hivefile d:/hivefile_test.hql -date "2013-01-01" -name "luogk"

 

hivefile思路分析:

本案例脚本和代码均放置在/home/spark/software/hivefile路径下,lib包放在/home/spark/lib下

1、将hql脚本放置在单独的脚本中:hivefile_test.hql

select a.id,sum(b.amount) from city a join sale_order b on a.id=b.city_id where b.amount > {$amount} group by a.id

2、创建shell脚本:hivefile_test.sql,在sh脚本中通过hivefile调用hql文件,并传递进去要替换的参数键值对

#!/bin/bash
. ~/.bash_profile
cd /home/spark/software/hivefile
hivefile ./hivefile_test.hql -amount

3、创建hivefile脚本

. ~/.bash_profile
sql=`java -jar /home/spark/lib/hivefile.jar $*`  #$*用于传递参数
echo "$sql"
hive -e "$sql"

4、hivefile做要的事情

  1)获取到hive -e命令行的参数,形如:c:/hive_test.hql -date "2013-01-01" ;

  2)解析参数,解析规则为:第一个参数为sql文件名,从第二个参数开始要替换的变量名采用"-"开头,紧跟着的是该变量名的值,一次类推;

  3)java代码获取到文件名,读取该文件的内容,并使用值去替换掉文件中的占位符变量名;

  4)将替换后的文件内容交给hive -e 去执行;

5、执行hivefile_test.sh

cd /home/spark/software/hivefile
hivefile_test.sh

6、为了使用hivefile脚本更加方便,将hivefile脚本封装到~/.bash_profile中去,使得在任意位置都可以执行hivefile命令,在path中添加hivefile的路径:

export PATH=.:/home/spark/software/hivefile

添加到环境变量后,就可以在任意路径下执行hivefile命令,形如:

hivefile /home/spark/software/hivefile/hivefile_test.hql -amount 

Hive基础之自定义封装hivefile命令的更多相关文章

  1. [转帖]Hive基础(一)

    Hive基础(一) 2018-12-19 15:35:03 人间怪物 阅读数 234   版权声明:本文为博主原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明. 本文链接 ...

  2. Hive基础概念、安装部署与基本使用

    1. Hive简介 1.1 什么是Hive Hives是基于Hadoop的一个数据仓库工具,可以将结构化的数据文件映射为一张数据库表,并提供类SQL查询功能. 1.2 为什么使用Hive ① 直接使用 ...

  3. Hive基础(1)

    Hive基础(1) Hive的HQL(2) 1. Hive并不是分布式的,它独立于机器之外,类似于Hadoop的客户端. 2. 元数据和数据的区别,前者如表名.列名.字段名等. 3. Hive的三种安 ...

  4. easyUI单元格合并自定义封装

    1.指定列的行合并 * 效果图: 合并自定义封装(一)   * 程序: function mergeGridColCells(grid,rowFildName) { var rows=grid.dat ...

  5. iOS开发——UI篇Swift篇&玩转UItableView(四)自定义&封装

    UItableView自定义&封装 一:Model class AppsModel: NSObject { //定义模型的三个属性 var imageName:String! //图片名称 v ...

  6. 《Programming Hive》读书笔记(两)Hive基础知识

    <Programming Hive>读书笔记(两)Hive基础知识 :第一遍读是浏览.建立知识索引,由于有些知识不一定能用到,知道就好.感兴趣的部分能够多研究. 以后用的时候再具体看.并结 ...

  7. Hive基础(4)---Hive的内置服务

    版权声明:<—— 本文为作者呕心沥血打造,若要转载,请注明出处@http://blog.csdn.net/gamer_gyt <——   目录(?)[+]   一:Hive的几种内置服务 ...

  8. Hive基础(2)---(启动HiveServer2)Hive严格模式

    启动方式 1, hive  命令行模式,直接输入/hive/bin/hive的执行程序,或者输入 hive –service cli 用于linux平台命令行查询,查询语句基本跟mysql查询语句类似 ...

  9. Hive基础知识

    一.产生背景 1.MapReudce编程繁琐,需要编写大量的代码 2.HDFS中存放的都是文件,在HDFS中没有Scheme的概念,无法用SQL进行快速的查询. 二.Hive的概念 Hive是基于Ha ...

随机推荐

  1. 用jquery在必填表单字段前加红星总结

    一.总结: 今天公司项目中要求给表单中的必填字段添加标记,因为表单字段比较多,后期又有可能某些字段会有变化,所以写了一段js代码来给表单添加标记. html代码: js代码: 关键步骤: 1.红星的设 ...

  2. HackerRank "Permutation game"

    A typical game theory problem - Recursion + Memorized Searchhttp://justprogrammng.blogspot.com/2012/ ...

  3. (转)C# wnform 请求http ( get , post 两种方式 )

    本文转载自:http://www.cnblogs.com/hailexuexi/archive/2011/03/04/1970926.html 1.Get请求 string strURL = &quo ...

  4. (转)用Eclipse进行C++开发时Bianry not found的问题解决

    本文转载自:http://blog.csdn.net/baimafujinji/article/details/49722399 由于Visual Studio体积过于庞大,很多人选择在Eclipse ...

  5. Python之Fabric模块

    Fabric是基于Python实现的SSH命令行工具,简化了SSH的应用程序部署及系统管理任务,它提供了系统基础的操作组件,可以实现本地或远程shell命令,包括:命令执行.文件上传.下载及完整执行日 ...

  6. 纯js上传控件——fineuploader

    fineuploader是一款基于ajax实现文件上传的插件,具有以下有点: A:支持文件上传进度显示. B:文件拖拽浏览器上传方式 C:Ajax页面无刷新. D:多文件上传. F:跨浏览器. E:跨 ...

  7. Filter实现全站违法关键词屏蔽

    思路:客户端请求服务器数据,经过Filter过滤(请求放行,响应拦截),服务器向客户端返回数据时,在Filter中修改掉返回数据中违法的部分. 修改服务器的响应需要自定义一个HttpServletRe ...

  8. Scala控制抽象

    private def filesHere = (new java.io.File(".")).listFiles() def filesEnding(query: String) ...

  9. Python 汉字转拼音库 pypinyin

    一.初衷: 一些开源软件的配置文件中识别区分的部分用英文,那么我们在批量生成配置文件的时候,可以从CMDB导入汉字(idc_name), 然后将它转换成拼音,再或者拼接上IP地址,以便更准确的识别.例 ...

  10. Jquery each和map 的区别

    1,回调函数的参数顺序相反,each:i,elem,map:elem,i 2,返回值不同,map返回一个新的数组,each返回原始数组 回调的返回值,each只能返回 true 和 false,map ...