hive --define --hivevar --hiveconf
set

1、hivevar命名空间

用户自定义变量
  1. hive -d name=zhangsan
  2. hive --define name=zhangsan
  3. hive -d a=1 -d b=2
效果跟hivevar是一样的
  1. hive --hivevar a=1 --hivevar b=2
引用hivevar命名空间的变量时,变量名前面可以加hivevar:也可以不加
  1. set name;
  2. set name=zhangsan;
  3. set hivevar:name;
  4. set hivevar:name=zhangsan;
在代码中使用${}引用,变量名前面可以加hivevar:也可以不加
  1. create table ${a} ($(b) int);

2、hiveconf命名空间
hive的配置参数,覆盖hive-site.xml(hive-default.xml)中的参数值
  1. hive --hiveconf hive.cli.print.current.db=true --hiveconf hive.cli.print.header=true
  1. hive --hiveconf hive.root.logger=INFO,console
启动时指定用户目录,不同的用户不同的目录
  1. hive --hiveconf hive.metastore.warehouse.dir=/hive/$USER
引用hiveconf命名空间的变量时,变量名前面可以加hiveconf:也可以不加
  1. set hive.cli.print.header;
  2. set hive.cli.print.header=false;

3、sytem命名空间
JVM的参数,不能通过hive设置,只能读取

引用时,前面必须加system:
  1. set sytem:user.name;
  1. create table ${system:user.name} (a int);

4、env命名空间
shell环境变量,引用时必须加env:
  1. set env:USER;
  2. set env:HADOOP_HOME;
  1. create table ${env:USER} (${env:USER} string);

附录:常用的设置

  • 在会话里输出日志信息
  1. hive --hiveconf hive.root.logger=DEBUG,console
也可以修改$HIVE_HOME/conf/hive-log4j.properties的hive.root.logger属性,但是用set命令是不行的。

  • 显示当前数据库
  1. set hive.cli.print.current.db=true;
  • 显示列名称
  1. set hive.cli.print.header=true;
  • 向桶表中插入数据前,需要启用桶
  1. create table t1 (id int) clustered by (id) into 4 buckets;
  2. set hive.enforce.bucketing=true;
  3. insert into table t1 select * from t2;
向桶表insert数据时,hive自动根据桶表的桶数设置reduce的个数。否则需要手动设置reduce的个数:set mapreduce.job.reduces=N(桶表定义的桶数)或者mapred.reduce.tasks,然后在select语句后加clustered by 

  • 动态分区相关
  1. set hive.exec.dynamic.partition=true #开启动态分区
  2. set hive.exec.dynamic.partition.mode=nostrict #动态分区模式:strict至少要有个静态分区,nostrict不限制
  3. set hive.exec.max.dynamic.partitions.pernode=100 #每个mapper节点最多创建100个分区
  4. set hive.exec.max.dynamic.partitions=1000 #总共可以创建的分区数
from t insert overwrite table p  partition(country, dt) select ... cuntry, dt
上面的查询在执行过程中,单个map里的数量不受控制,可能会超过hive.exec.max.dynamic.partition.pernode配置的数量,可以通过对分区字段分区解决,上面的sql改成:
from t insert overwrite table p  partition(country, dt) select ... cuntry, dt distributed by country, dt;

  • hive操作的执行模式
  1. set hive.mapred.mode=strict
strict:不执行有风险(巨大的mapreduce任务)的操作,比如:笛卡尔积、没有指定分区的查询、bigint和string比较、bigint和double比较、没有limit的orderby
nostrict:不限制
    
  • 压缩mapreduce中间数据
  1. set hive.exec.compress.intermediate=true;
  1. setmapreduce.map.output.compress.codec=org.apache.hadoop.io.compress.SnappyCodec; #设置中间数据的压缩算法,默认是org.apache.hadoop.io.compress.DefaultCodec

  • 压缩mapreduce输出结果
  1. set hive.exec.compress.output=true;
  1. set mapreduce.output.fileoutputformat.compress.codec=org.apache.hadoop.io.compress.GzipCodec #设置输出数据的压缩算法,使用GZip可以获得更好的压缩率,但对mapreduce而言是不可分隔的
  1. set mapreduce.output.fileoutputformat.compress.type=BLOCK; #如果输出的是SequenceFile,则使用块级压缩

  • 启用对分区归档
  1. set hive.archive.enabled=true;




















Hive设置变量的更多相关文章

  1. hive 传递变量的两种方式

    在使用hive开发数据分析代码时,经常会遇到需要改变运行参数的情况,比如select语句中对日期字段值的设定,可能不同时间想要看不同日期的数据,这就需要能动态改变日期的值.如果开发量较大.参数多的话, ...

  2. Hive中变量的使用

    1.Hive配置属性 (1)命令行方式 Hive配置属性存储于 hiveconf 命名空间中,该命名空间中的属性是可读写的.在查询语句中插入 '${hiveconf:变量名}',就可以通过 hive ...

  3. Hive设置配置参数的方法,列举8个常用配置

    Hive设置配置参数的方法 Hive提供三种可以改变环境变量的方法,分别是: (1).修改${HIVE_HOME}/conf/hive-site.xml配置文件: (2).命令行参数: (3).在已经 ...

  4. Kettle_设置变量的两种方法

    一个复杂的kettle作业一般包括很多子作业和转换,在主作业Start后通常会添加一个[设置变量]的流程,该流程的功能是为所有流程的公共变量设置通用值.       主作业添加的[设置变量]针对的是所 ...

  5. postman提取接口的返回值及动态设置变量(一)

    一.提取接口返回值   1.当返回值是返回JSON时 let json = JSON.parse(responseBody); // responseBody是包含整个返回内容的字符串 let foo ...

  6. postman—环境切换和设置变量

    postman提供了environment管理功能,想要在多个环境中测试,比如在测试环境.灰度环境.生产环境等,只需要用同样的接口,切换下环境即可,非常方便.具体步骤: 一.切换环境 1.点击界面右上 ...

  7. KETTLE设置变量

    一.kettle变量类型 kettle变量分为: 1.环境变量 通过 set variables组件设置变量,范围可以是:JVM变量.作业变量.父作业变量.根作业变量.使用时通过${var}或 %%v ...

  8. linux 服务注册 service文件 在service文件中设置变量和环境变量

    [Unit] Description=  #服务描述 After=syslog.target     #服务启动依赖 [Service] Type=forking          #服务启动类型 可 ...

  9. kettle 设置变量

    以下只是本人在使用过程中一些经验,可能有误解不对的地方,希望大家指正. 这个控件可以在job中调用,也可以在transformation中使用.下面将分别说明在两个不同任务中调用时的使用方法和需要注意 ...

随机推荐

  1. (转)更换镜像rootvg卷组中的硬盘

    F85系统镜像盘更换实录之一:删除原有镜像操作 # cfgmgr # lsdev -Cc disk hdisk0 Available 11-09-00-8,0  16 Bit LVD SCSI Dis ...

  2. EF 通过DataAnnotations配置属性和类型

    一.通过Attribute配置约束 1.主键约束 通过KeyAttribute来配置主键约束,代码如下: [Key] public int PrimaryKey{ get; set; } 2.外键约束 ...

  3. Spring Security构建Rest服务-0300-Restful API异常处理

    SpringBoot默认的错误处理机制: 一.测试需要的部分代码 (完整代码放在了github https://github.com/lhy1234/spring-security): UserCon ...

  4. Javascript中Date对象的格式化

    很多语言中都带有日期的格式化函数,而Javascript中却没有提供类似的方法.之前从某位前人的帖子中发现了下面的代码,感觉非常简洁,存留备用. /** * 时间对象的格式化; */ Date.pro ...

  5. 部分替换mysql表中某列的字段

    UPDATE `table_name` SET `field_name` = replace (`field_name`,'from_str','to_str') WHERE `field_name` ...

  6. [转]你真的了解 console 吗

    原文:https://segmentfault.com/a/1190000000481884 对于前端开发者来说,在开发过程中需要监控某些表达式或变量的值的时候,用 debugger 会显得过于笨重, ...

  7. android学习-异步消息处理机制

    消息处理机制主要对象:Looper,Handler,Message(还有MessageQueue和Runnable) Looper不断从MessageQueue消息队列中取出一个Message,然后传 ...

  8. springboot-mongodb的多数据源配置

    pom.xml中引入mongodb的依赖 <dependency> <groupId>org.springframework.boot</groupId> < ...

  9. OOAD之创建型模式之工厂模式

    首先我们为什么要学习设计模式呢? 1)模式从经验中总结出来的,经过证实的方案,模式只有在实际系统中经过多次验证之后才能成为模式. 2) 提高系统的可维护性, 通过使用设计模式,在系统面临升级和维护时, ...

  10. JAVA 之 多态 抽象 接口

    一:多态  1:多态   一个对象有多种形式的能力 2:步骤 1编写父类派生子类 2子类重写父类方法 3用父类的数据类型引用子类对象 3:静态多态的实现方式就是方法重载 4:动态多态的实现方式就是重写 ...