Hive 变量定义与引用

1.背景

在书写 Hive SQL 时,有时需要将重复出现的值从 SQL 分离出来,以变量的方式表示和引用。

设置变量和引用变量可以带来以下几个好处:

  1. 简化查询语句:在 SQL 查询中,经常需要使用一些常量或固定值,例如日期、路径等。如果直接在查询语句中写死这些值,会导致查询语句变得冗长且难以维护。通过定义变量并在查询中引用变量,可以使查询语句更加简洁和易读。

  2. 提高可维护性:通过定义变量,可以将常量和固定值抽象出来,使得查询语句更加易于维护和修改。如果需要修改常量或固定值,只需要修改变量的值即可,而不需要修改所有引用该常量或固定值的查询语句。

  3. 提高可重用性:通过定义变量,可以将常量和固定值封装为一个可重用的模块。例如,可以将一些常用的查询条件或参数定义为变量,并在多个查询中引用这些变量,从而避免重复编写相同的查询语句。

  4. 增强灵活性:通过使用变量,可以使查询语句更加灵活和可配置。例如,可以将一些参数定义为变量,并在运行时动态修改这些参数的值,从而使查询语句具有更高的适应性和可配置性。

总之,自定义变量和引用变量是一种良好的编程习惯,可以使查询语句更加简洁、易读、易于维护和重用,并提高查询语句的灵活性和可配置性。

2.Hive 变量命名空间

Hive 变量有四个命名空间 —— hiveconf、system、 env 和 hivevar。

命名空间 权限 描述
hiveconf 读写 Hive 相关配置属性
system 读写 Java 定义的配置属性
env 只读 Shell 环境定义的环境变量
hivevar 读写 用户自定义临时变量(Hive v0.8.0 及之后版本)

查看变量

(1)查看所有变量。

SET;

-- 加上 -v 可以查看 HDFS 和 MapReduce 的环境变量信息
SET -v;

(2)查看指定变量。

SET varname;

-- 查看自定义变量
-- 名字空间 hivevar 可加可不加
SET myvar;
SET hivevar:myvar;

-- 查看 Hive 配置参数:用于限制每个节点上允许创建的动态分区的数量
-- 名字空间 hiveconf 可加可不加
SET hive.exec.max.dynamic.partitions.pernode;
SET hiveconf:hive.exec.max.dynamic.partitions.pernode;

-- 查看 system 变量,必须指定名字空间
SET sytem:user.name;
-- 结果示例
sytem:user.name=hadoop

-- 查看 env 变量,必须指定名字空间
SET env:HADOOP_HOME
-- 结果示例
env:HADOOP_HOME=/usr/local/service/hadoop

设置变量

设置变量时,如果不指定命名空间,缺省为 hiveconf。

(1)修改 Hive 配置参数。

-- 名字空间 hiveconf 可加可不加
SET hive.exec.max.dynamic.partitions.pernode=1000;
SET hiveconf:hive.exec.max.dynamic.partitions.pernode=1000;

(2)自定义变量。

Hive 中的自定义变量是会话级别的,即它们在会话结束后会被重置。

-- 必须加上 hivevar
SET hivevar:myvar='hello';

引用变量

(1)SQL 中引用自定义变量。

-- 可加可不加名字空间 hivevar
SELECT ${myvar};
SELECT ${hivevar:myvar};

SQL 中引用其他名字空间下的变量,好像会报错,比如 env 下的 Shell 环境变量,感兴趣的同学可以试一下。


参考文献

LanguageManual VariableSubstitution - Apache Hive

相关推荐

  1. Hive 变量定义引用

    2024-05-26 05:36:33       41 阅读
  2. [hive] 在hive sql中定义变量

    2024-05-26 05:36:33       58 阅读
  3. 在 YAML 中的变量(使用 &和 * 定义引用变量

    2024-05-26 05:36:33       28 阅读
  4. MySQL变量定义应用

    2024-05-26 05:36:33       28 阅读
  5. MySQL变量定义使用

    2024-05-26 05:36:33       28 阅读
  6. MySQL变量定义使用

    2024-05-26 05:36:33       31 阅读
  7. MySQL变量定义使用

    2024-05-26 05:36:33       37 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-05-26 05:36:33       98 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-05-26 05:36:33       106 阅读
  3. 在Django里面运行非项目文件

    2024-05-26 05:36:33       87 阅读
  4. Python语言-面向对象

    2024-05-26 05:36:33       96 阅读

热门阅读

  1. 【QT】包含中文的QString转换为std::string乱码问题

    2024-05-26 05:36:33       35 阅读
  2. 【vue嵌套iframe】实现项目重构

    2024-05-26 05:36:33       37 阅读
  3. glances的安装方式

    2024-05-26 05:36:33       31 阅读
  4. netstat命令检查端口是否监听

    2024-05-26 05:36:33       32 阅读
  5. C语言基础-如何避免内存泄漏

    2024-05-26 05:36:33       36 阅读
  6. 泛型中K T V E ? Object等分别代表的含义

    2024-05-26 05:36:33       30 阅读
  7. 所有笔记总结目录

    2024-05-26 05:36:33       28 阅读
  8. Python库之Scrapy的简介、安装、使用方法详细攻略

    2024-05-26 05:36:33       34 阅读
  9. 诺兰电影欣赏笔记

    2024-05-26 05:36:33       33 阅读
  10. Kafka之【消费消息】

    2024-05-26 05:36:33       28 阅读
  11. 解决uniApp 中不能直接使用 Axios 的问题

    2024-05-26 05:36:33       35 阅读