zoukankan      html  css  js  c++  java
  • hive传递参数与调用

    在运行hive命令时传入参数,使用-hivevar 和 -hiveconf 两种参数选项,来给此次的执行脚本传入参数

    -hivevar : 传参数 ,专门提供给用户自定义变量。

    -hiveconf : 传参数,包括了hive-site.xml中配置的hive全局变量。

     (1)脚本调用

    test.sql

    use default;
    select 
    '${hiveconf:month}' as month
    from default.user1;
    use default;
    select 
    '${hivevar:month}' as month
    from default.user1;

    start.sh

    #!/bin/sh
    #ecoding=utf-8
    
    set -x
    month=`date -d 'last month' +%Y-%m`
    hive --hiveconf month=$month -f test.sql
    #!/bin/sh
    #ecoding=utf-8
    
    set -x
    month=`date -d 'last month' +%Y-%m`
    hive --hivevar month=$month -f test.sql

     (2)直接传参

    bash:hive -f 参数传递,执行文件

    CDH 集群

      命令: hive --hivevar v_date='20170630' -S -f test1.hql    -- 返回3条记录

      命令: hive --hivevar v_date='20170101' -S -f test1.hql    -- 返回0条记录

    FI集群:

          命令: beeline --hivevar v_date='20170630' -S -f test1.hql    -- 返回3条记录

    查看文件内容:

      cat test1.hql

        use default; select * from logs where dt='${hivevar:v_date}' limit 3;

      cat test2.hql 

        use default; select * from logs limit 3;

    -------------------------------------------------------更正规的解释------------------------------------------------------

    1. hiveconf

    hiveconf用于定义HIVE执行上下文的属性(配置参数),可覆盖覆盖hive-site.xml(hive-default.xml)中的参数值,如用户执行目录、日志打印级别、执行队列等,常用的配置属性如下:

    参数名称 参数解释
    hive.metastore.warehouse.dir 启动时指定用户目录,不同的用户不同的目录
    hive.cli.print.current.db 显示当前数据库
    hive.root.logger 输出日志信息
    hive.cli.print.header 显示列名称
    mapred.job.queue.name 执行队列名称

    如果熟悉HIVE操作的话,这些配置属性还可以利用“set”指令进行修正,如下:

    # 首先启动HIVE
    hive
    # 然后设置参数
    set mapred.job.queue.name=root.default

    上面的指令可等价于“hive --hiveconf”命令,如下:

    hive --hiveconf "mapred.job.queue.name=root.default"

    2. hivevar

    hivevar用于定义HIVE运行时的变量替换,类似于JAVA中的“PreparedStatement”,与“${}”配合使用,示例如下:

    #  定义变量,并启动HIVE CLI
    hive  --hivevar my="201809" --database deafult -e 'select * from a1 where concat(year, month) = ${my} limit 10';

    3. define

    define与hivevar用途完全一样,还有一种简写“-d”,示例如下:

    #   定义变量
    hive --hiveconf "mapred.job.queue.name=root.default" -d my="201809" --database default -e
    'select * from mydb where concat(year, month) = ${my} limit 10';
  • 相关阅读:
    用Asp获取Dll加密新闻内容
    Silverlight编译范围
    c++连接mssql
    委托理解
    NClass,终于找到了可以绘制类图的工具了!
    RIATasks: A Simple Silverlight CRUD Example (using View Model)
    PetaPoco使用
    匿名方法,Action,Func以及lambda的区别
    第一个c++
    System.Threading中Thread和Task区别
  • 原文地址:https://www.cnblogs.com/wqbin/p/10361045.html
Copyright © 2011-2022 走看看