【问题标题】:Delete data between date range in Data Flow删除数据流中日期范围之间的数据
【发布时间】:2022-01-04 02:16:24
【问题描述】:

我有一个数据流,它从 Parquet 文件中读取数据,进行一些过滤,然后加载到 Delta Lake 中。数据流会运行多次,我不想在我的 Delta Lake 中出现重复数据。为了保障这一点,我想实现一个删除插入机制——找到传入数据的最小和最大日期,并删除目标(delta)中落入此范围内的所有数据。删除后,所有过滤的传入数据都将插入到 delta Lake 中。

从文档中,我看到我需要在 Alter Row Tx 的行级别添加策略以标记该特定行以进行删除。我将 Delete-If 条件添加为 - between(toDate(date, 'MM/dd/yyyy'), toDate("2021-12-22T01:49:57", 'MM/dd/yyyy'), toDate("2021-12-23T01:49:57", 'MM/dd/yyyy')) 其中日期是传入数据中的一列。

但是,在 Alter Row Tx 的数据预览中,当肯定有属于该范围的记录时,所有行都被标记为插入,0 为删除。

我怀疑 Delete-If 条件不能按我希望的方式工作。在这种情况下,如何在以 Delta 为目标的 Data Flow 中的数据范围之间实现删除?

【问题讨论】:

    标签: azure date azure-data-factory delete-row azure-data-flow


    【解决方案1】:

    您需要告诉 ADF 如何处理时间戳的其他部分(它还不是日期类型)。试试这个:

    toString(toTimestamp('2021-12-22T01:49:57', 'yyyy-MM-dd'T'HH:mm:ss'), 'MM/dd/yyyy')

    【讨论】:

    • 感谢您的回复。我将整个表达式更改为 - between(toString(toTimestamp(date, "yyyy-MM-dd'T'HH:mm:ss"), 'MM/dd/yyyy'), toString(toTimestamp("2021-12- 22T01:49:57", "yyyy-MM-dd'T'HH:mm:ss"), 'MM/dd/yyyy'), toString(toTimestamp("2021-12-23T01:49:57", " yyyy-MM-dd'T'HH:mm:ss"), 'MM/dd/yyyy')) 这样对吗?现在是字符串比较。
    • 如果需要强制转换为日期,则添加 toDate()
    猜你喜欢
    • 2021-01-10
    • 1970-01-01
    • 2020-08-16
    • 1970-01-01
    • 2018-11-15
    • 2013-03-27
    • 1970-01-01
    • 2012-12-21
    相关资源
    最近更新 更多