hive那些事-01:hive中的CLI与REPL

搞技术的人可能比较认真。
之前只知道CLI,甚至一度把REPL当成CLI。那下面说说2个东西都是啥。
#######################################################
CLI:
          我猜你肯定知道什么是CLI。英文是:command-line interface
          就是类似于linux命令行界面那种程序。目前主流的标准分POSIX和GNU两种;
          不刀,直接上图说事:

         

         
         这种的就叫CLI.你会发现有2种参数设置方式,没错一种是GNU标准(--help),一种是POSIX标准(-h)
REPL:
         我想你肯定也见过REPL,而且你知道什么叫交互环境。那没错,PERL就是交互环境,英文是: read–eval–print- loop
         没错,想想你在交互环境下面的经历,就是输入(read)->执行(eval)->显示结果(print),然后最外层是个大的循环.
         同样不刀。直接上图说事:
        

 
         这种就是典型的REPL.

HIVE:
        如果你用过hive,那你会发现它支持CLI和REPL。
        如hive -e "XXXX";hive -f "XXXX";这种是CLI
           直接输入hive,出来那个有>提示符的界面就是REPL了。
HIVE的提示扩展:
        刀了这么多,只讲点概念,有点对不起观众。
        c/c++领域实现CLI与PERL自然有很成熟的工具包。
        java领域有2个非常著名的包分别来做这2件事:
        CLI:  commons-cli  : http://commons.apache.org/cli/
        REPL: jline                : http://jline .sourceforge.net
        java领域实现这种功能基本都是这2个包在做,hive当然也是。这2个包静静的躺在路径的lib下面
        ##########################
        那有什么用呢?这里举个比较有意思的例子。
        如果你常用hive的REPL,那么我想你肯定用过它的自动提示功能,你肯定也想过这个提示的功能太有限,我能定制提示嘛?类似于mysql的rehash功能。这样输入的时候就不用记那么多表名、字段什么的啦啊;
        一个简单而单纯的想法是,我把这些可以提示的词放在一个结构里面,然后我可以CRUD这个结构,这样与提示功能本身分离不是更好;
        你可能有不一样的想法,但我推荐你这么做。一个文件,里面一行放一个你需要提示的词;这样你可能通过外部程序(直接echo也可以啊,噗~)对这个 文件本身进行CRUD;然后hive内部的jline读这个文件,进行提示.很明显的我们通过一个配置文件做到了解耦.
        直接上段代码,你用十分钟学下jline,你就能明白我写的这个是什么意思了:
       

 
      没错,我们在用户的根目录下面定义了个.hive-user-keys文件,然后我们可以定期的把需要提示的词整理写入这个文件,然后在PERL中你就能把这些词T出来了。不是很酷嘛?

############
你自己写的一些小程序,通过CLI、JLINE也可以提供非常亲切的用户体验,至少显得你很专业!~

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值