【问题标题】:How to default a value of variable if etl.properties do not list a variable如果 etl.properties 未列出变量,如何默认变量的值
【发布时间】:2013-07-01 11:17:08
【问题描述】:

我想为给定时间段内的行编写 ETL。

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

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

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

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

我该怎么做。

谢谢

【问题讨论】:

    标签: scriptella


    【解决方案1】:

    您可以通过在&lt;include&gt; 元素后添加赋值来设置属性的默认值。示例:

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

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

    ----更新----

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

    INSERT INTO SomeTable VALUES (COALESCE(?start_time, last_day(now() - interval 1 month)));
    

    【讨论】:

    • 我如何让value 取自now() 的默认值,这是一个函数调用而不是静态值。我想我需要某种脚本节。但不确定到底是哪种。
    • 我认为使用 if 进行查询是我需要的,但我无法使 if 条件正确。这个不行。 select @starttime := last_day(now() - interval 1 month); 我也试过各种条件运算符 ==, =~, eq .
    • 检查 COALESCE 语句是否对您的情况有所帮助。我更新了答案
    • 那是相当简洁的 sql 东西,我不知道。谢谢。
    猜你喜欢
    • 2016-05-08
    • 2016-09-10
    • 2011-08-27
    • 2020-03-19
    • 1970-01-01
    • 1970-01-01
    • 2019-03-22
    相关资源
    最近更新 更多