3

我有两个 Hive 脚本,如下所示:

脚本 A:

SET hive.exec.dynamic.partition=true;
SET hive.exec.dynamic.partition.mode=non-strict;
SET hive.exec.parallel=true;

... do something ...

脚本 B:

  SET hive.exec.dynamic.partition=true;
  SET hive.exec.dynamic.partition.mode=non-strict;
  SET hive.exec.parallel=true;

... do something else ...

我们在每个脚本开头设置的选项都是相同的。是否有可能以某种方式将它们提取到一个公共位置(例如,到一个 commonoptions.sql 中),以便我们的脚本如下所示:

脚本 A:

 <run commonoptions.sql>

... do something ...

脚本 B:

 <run commonoptions.sql>

... do something else ...

理想情况下,我也想提取表格定义,这样我就有:

脚本 A:

 <run commonoptions.sql>
 <run defineExternalTableXYZ.sql>
... do something with Table XYZ ...

脚本 B:

 <run commonoptions.sql>
 <run defineExternalTableXYZ.sql>
... do something else with Table XYZ ...

这样我就可以在一个地方管理 TableXYZ 定义。我没有使用 Hive CLI。我正在使用带有 Hive 步骤的 Amazon EMR。

4

2 回答 2

2

source您可以将这些配置参数存储在公共文件中,并使用命令加载到每个脚本中:

source /tmp/common_init.hql;

您还可以从数据库中为每个工作流生成此文件。

于 2016-11-24T10:15:46.350 回答
0

您应该能够使用hive -i config.hql -f script_A.hql,其中config.hql将包含您的动态设置。该-i标志允许您传递一个初始化脚本,该脚本将在实际的配置单元文件传递给-f. 我对 AWS 如何逐步启动 hive 作业不是非常熟悉,但大概您编辑了提交参数。

于 2017-11-04T15:22:03.610 回答