如何在配置单元服务器操作中将动态日期作为参数传递

How can I pass a dynamic date in a hive server action as a parameter

在 Oozie 中,我在 Hue 中使用了 Hive 操作,同样的操作我使用参数选项来提供日期参数。在这里我想提供动态日期参数,例如昨天和前天。我怎样才能生成这些日期?以及如何作为参数传递。

我的 HQL 是:

CREATE TABLE IF NOT EXISTS tmp_table as 
select * from emptable 
where day>=${fromdate}  and day<=${todate}

我的 HiveServer 操作包含: 一种。脚本 b.每个日期都有两个参数选项,例如 fromdate = , todate = C。为 HQL 脚本添加了文件选项。

我尝试了什么: 我创建了两个单独的 shell 脚本,它们 returns 日期。 Shell 脚本之一是

#! /bin/bash
FROM_DAY=$(date +%Y-%m-%d -d " - 1 day")
echo "$FROM_DAY" 

并且配置单元操作参数变为 fromdate = /user/manishs/Oozie/filter.sh

但是这种方法不起作用并给出了例外情况: 错误:编译语句时出错:失败:ParseException 行 4:11 无法识别表达式规范中 '/' 'user' '/' 附近的输入 (state=42000,code=40000)

NOTE: 如果我将日期传递为: fromdate ='2015-08-01' ,它正在运行并给出结果。

我的问题是如何在配置单元服务器操作中将动态日期作为参数传递。 或者有什么方法可以将动态过滤器传递给查询。

试试这个,

fromdate = $(sh /user/manishs/Oozie/filter.sh)

filter.sh 应该在给定的地方

Oozie 是一个调度器,对吧?那么为什么不使用内置的 EL 函数来计算“今天”和“昨天”并将它们传递给 Hive 操作呢?

在协调器脚本中,假设您使用的是 洛杉矶 时区,它应该看起来像...

<coordinator-app .......>
  <action>
    <app-path>/path/to/the/worklow/definition</app-path>
    <configuration>
      <property>
        <name>today</name>
        <value>${coord:formatTime(coord:dateTzOffset(coord:nominalTime(), "America/Los_Angeles"), 'yyyy-MM-dd')}</value>
      </property>
      <property>
        <name>yesterday</name>
        <value>${coord:formatTime(coord:dateOffset(coord:dateTzOffset(coord:nominalTime(), "America/Los_Angeles"), -1, 'DAY'), 'yyyy-MM-dd')}</value>
      </property>
    </configuration>
  </action>
</coordinator-app>

然后在 Workflow 脚本中,使用 <param> 元素将属性传递给 Hive。

参考: Oozie Coordinator documentation

6.7.3. coord:nominalTime() EL Function

6.7.4. coord:actualTime() EL Function

6.9.1. coord:dateOffset(String baseDate, int instance, String timeUnit) EL Function

6.9.2. coord:dateTzOffset(String baseDate, String timezone) EL Function

6.9.3. coord:formatTime(String ts, String format) EL Function

好的,您可能无法使用 Hue 做到这一点。但是 Hue 编辑器有很多限制,无论如何你都不能用它做很多事情。