hive - 如何在 HIVE 脚本中设置变量

标签 hive hiveql

我正在寻找 Hive QL 中 SET varname = value 的 SQL 等效项

我知道我可以做这样的事情:

SET CURRENT_DATE = '2012-09-16';
SELECT * FROM foo WHERE day >= @CURRENT_DATE

但是我收到了这个错误:

character '@' not supported here

最佳答案

您需要使用特殊的hiveconf进行变量替换。 例如

hive> set CURRENT_DATE='2012-09-16';
hive> select * from foo where day >= ${hiveconf:CURRENT_DATE}

同样,您可以传递命令行:

% hive -hiveconf CURRENT_DATE='2012-09-16' -f test.hql

请注意,还有env系统变量,因此您可以引用${env:USER}为例。

要查看所有可用变量,请从命令行运行

% hive -e 'set;'

或者从 hive 提示符中运行

hive> set;

更新: 我也开始使用 hivevar 变量,将它们放入我可以使用 source 命令从 hive CLI 包含的 hql 片段中(或从命令行作为 -i 选项传递) )。 这里的好处是,该变量可以在有或没有 hivevar 前缀的情况下使用,并允许类似于全局与本地使用的东西。

因此,假设有一些设置表名变量的setup.hql:

set hivevar:tablename=mytable;

然后,我可以带入配置单元:

hive> source /path/to/setup.hql;

并在查询中使用:

hive> select * from ${tablename}

hive> select * from ${hivevar:tablename}

我还可以设置一个“本地”表名,这会影响 ${tablename} 的使用,但不会影响 ${hivevar:tablename}

hive> set tablename=newtable;
hive> select * from ${tablename} -- uses 'newtable'

对比

hive> select * from ${hivevar:tablename} -- still uses the original 'mytable'

对于 CLI 来说可能没有太多意义,但可以在使用 source 的文件中包含 hql,但设置一些“本地”变量以在脚本的其余部分中使用。

关于hive - 如何在 HIVE 脚本中设置变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12464636/

相关文章:

apache-spark - 用以前的记录填充 NULLS - Netezza SQL

merge - 如何减少Hive中SQL "Alter Table/Partition Concatenate"的生成文件?

mysql - Hive 查询语言时间戳

azure - 如何将数据上传到 HDInsight 中的 Hive?

hadoop - 在 hive 中读取兽人时的时区

java - 确定在 Hive 中创建 UDF 的语言

hadoop - 提前了解Hive行将进入哪个存储桶

hadoop - Hive在分区表上的分组依据给出重复的结果行

hadoop - 配置单元压缩不会自动触发-HDP_2.6.5

hive - 在 hive 表上设置压缩