【问题标题】:Azure data factory data flow silently NULLing date columnAzure 数据工厂数据流静默清空日期列
【发布时间】:2020-12-16 21:16:12
【问题描述】:

我正在尝试使用 Azure 数据工厂将 CSV 插入 Azure SQL 表。在我检查结果之前,一切似乎都很好。其中一列是可为空的日期。 CSV 包含类似1/2/2020 12:00:00 AM 的值。数据流静默插入NULL,而不是抛出错误,因为它不喜欢输入。那么如何让我的数据流正确地将字符串转换为日期时间,然后在将来出现此类问题时出错?我真的不想要无声的失败和糟糕的数据。

【问题讨论】:

    标签: csv azure-sql-database azure-data-factory azure-data-factory-2 azure-data-flow


    【解决方案1】:

    空值是由于 ADF 中的日期格式不兼容。您需要进行日期格式转换。

    您的源日期格式是这样的MM/dd/yyyy HH:mm:ss吗?
    如果是这样,您可以使用Derived column 并添加表达式toString(toTimestamp(<Your_Column_Name>,'MM/dd/yyyy HH:mm:ss'),'yyyy-MM-dd HH:mm:SS') 将此列格式化为字符串。它解决了NULL 的值。当然你可以选择你想要的日期格式。

    我做了如下测试:

    1. 我的数据源来自 csv 文件,EmpDate 是与您类似的日期类型,最后一行包含空值。

    2. 然后我在派生列活动中添加表达式toString(toTimestamp(EmpDate,'MM/dd/yyyy HH:mm:ss'),'yyyy-MM-dd HH:mm:SS')。在这里您可以选择所需的日期格式。

    3.根据 Mark Kromer 的建议,我直接在 Derived Column 之后添加条件拆分并检查 isNull(EmpDate)。这里我使用not(isNull(EmpDate)) 表达式。

    1. 最后,如果EmpDate包含空值,它会转到sink2,否则转到sink1。 该行包含空值:

    【讨论】:

    • 补充约瑟夫的答案...如果您不希望您的数据流接收未通过此转换的行,则在派生列之后直接使用条件拆分并检查 isNull(EmpDate) .如果为空,则写入错误日志。否则,继续正常路径。
    • @MarkKromer 谢谢!但是有没有办法将它设置为默认值,如果列无法转换整个数据流失败?
    • 默认是在转换失败时继续,设置为 NULL。要设置您自己的自定义行为,您将使用此技术。
    • 感谢@Mark Kromer,根据他的建议,我已经更新了我的答案。
    • 希望我的回答对你有帮助@John。
    猜你喜欢
    • 2021-09-12
    • 1970-01-01
    • 2021-03-15
    • 2020-12-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-11-21
    • 2020-11-26
    相关资源
    最近更新 更多