代码之家  ›  专栏  ›  技术社区  ›  Manish Saraf Bhardwaj

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

  •  0
  • Manish Saraf Bhardwaj  · 技术社区  · 9 年前

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

    我的HQL是:

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

    我的HiveServer操作包含: a、 HQL脚本 b、 两个参数选项,每个日期一个,如fromdate=,todate= c、 为HQL脚本添加了文件选项。

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

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

    并且蜂巢动作参数变为 fromdate = /user/manishs/Oozie/filter.sh

    然而,这种方法不起作用,并有例外: 错误:编译语句时出错:失败:ParseException第4:11行无法识别表达式规范中“/”用户“/”附近的输入(状态=42000,代码=40000)

    NOTE: 如果我将日期传递为:fromdate='2015-08-01',则它有效并给出结果。

    我的问题是如何在配置单元服务器操作中传递动态日期作为参数。 OR是向查询传递动态过滤器的任何方法。

    2 回复  |  直到 9 年前
        1
  •  3
  •   Community arnoo    4 年前

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

    在Coordinator脚本中,假设您正在使用 洛杉矶 时区,应该看起来。。。

    <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>
    

    然后在工作流脚本中,使用 <param> 元素将属性传递给配置单元。

    参考: Oozie Coordinator documentation

    6.7.3.坐标:nominalTime()EL函数

    6.7.4.坐标:actualTime()EL函数

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

    6.9.2.坐标:dateTzOffset(字符串baseDate,字符串时区)EL函数

    6.9.3.坐标:formatTime(字符串ts,字符串格式)EL函数

    好吧,也许你不能用Hue这样做。但是,色调编辑器有很多限制,因此无论如何都无法使用它。

        2
  •  0
  •   Kishore    9 年前

    试试这个,

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

    滤器sh应该在给定的位置