2

我想在给定的持续时间内为行编写 ETL。

我正在考虑将 start_time 和 end_time 传递给etl.properties. 但是,如果属性文件没有定义默认值,我不确定如何定义它们。

我在想类似的东西,但不确定这是否可能。

<script connection-id="in" if="not properties.start_time">
    select @starttime := last_day(now() - interval 1 month);
</script>

如果未定义 properties.start_time,则使用 start time 的值作为从现在开始的一个月。

我该怎么做。

谢谢

4

1 回答 1

1

<include>您可以通过在元素后添加赋值来设置属性的默认值。例子:

<properties>
    <include href="etl.properties"/>
    <!-- The new value is set only if it was not defined before -->
    start_time=value 
</properties>

如果同一属性有多个声明,首先出现的声明优先于后续声明。这就是为什么<include>在上面的例子中首先出现的原因。

- - 更新 - -

另一种选择是使用三元表达式,例如 ${start_time==null?'':a} 或许多数据库支持的 COALESCE SQL 函数。后者应该更适合您的示例。试试这样的事情是否可行:

INSERT INTO SomeTable VALUES (COALESCE(?start_time, last_day(now() - interval 1 month)));
于 2013-07-01T15:22:14.163 回答