从 hive -h:

--hiveconf <property=value>   Use value for given property
--hivevar <key=value>         Variable subsitution to apply to hive
                                  commands. e.g. --hivevar A=B

最佳答案

我觉得文档中的示例并不足够,因此这是我的答案。

最初只有--hiveconf,不存在变量替换。
--hiveconf选项允许用户从命令行设置Hive configuration values就是这样。所有Hive配置值都存储在hiveconf命名空间下,即hiveconf:mapred.reduce.tasks。这些值使您可以控制诸如映射器和化简器的数量,是否应显示状态消息以及脚本是否应继续执行错误等操作。

稍后,variable substitution was added。这意味着您现在可以在查询中使用${...}语法使用变量。但是,您只能在命令行中使用hiveconf--hiveconf命名空间下设置变量,因此用户可以在此处放置变量。

将您的个人变量放在Hive配置 namespace 下可能不会破坏任何内容,但这也不是一种好的形式。后来,it was suggested专​​门为用户变量添加了hivevar命名空间,该命名空间也可以在命令行使用--hivevar进行定义。这意味着在Hive配置值和用户定义的变量之间更清晰的分隔。

总结:
应当使用hiveconf命名空间和--hiveconf设置Hive配置值。hivevar命名空间和--hivevar应该用于定义用户变量。
hiveconf命名空间下设置用户变量可能不会破坏任何内容,但不建议这样做。

08-07 11:40