Azure增量加载不会将纪元时间戳(毫秒)识别为水印列名

iqxoj9l9  于 2022-11-17  发布在  其他
关注(0)|答案(1)|浏览(103)

我正在尝试执行增量加载(增量加载)从SQL Server到Blob存储。我的表具有updateStamp列,该列是以毫秒为单位的Epoch Time,数值(19,0)数据类型。当我在ADF中的复制数据工具的配置部分中选择Watermark列名时,它不是选项之一,也不允许我手动输入列名。看起来它只需要日期时间数据类型或键整数数据类型。我已经尝试使用元数据-驱动复制任务和从数据库模板的增量复制没有运气。有没有一个变通办法或方式转换最大值并使用它(而不是添加另一列到数亿行)。任何帮助或指导都将不胜感激。
我希望能够使用一种数据类型来指示一个时间点作为增量加载的水位标志,即使该数据类型不是datetime。

yqkkidmi

yqkkidmi1#

我已经尝试在我的环境中使用从数据库模板在adf中的增量副本复制带有epoch时间戳类型的水印列。

  • 输入表和水位线表如下图所示。(水位线表的初始水位线值为1657238400000,以便在第一次运行时复制所有记录)

  • 用于更新新水位线值存储过程是在SQL Server中编写,如以下脚本所示
Create PROCEDURE update_watermark @LastModifyDate numeric(19,0)
AS
BEGIN
    UPDATE watermarktable
    SET [WatermarkValue] = @LastModifyDate
END
  • 在ADF中,从数据库模板获取增量副本,并提供源、接收器和控制表的链接服务。然后,选择使用模板

*LookupLastWaterMark、LookupCurrentWaterMark、DeltaCopyfromDB活动中的配置未更改

  • UpdateWaterMark活动中,选择存储过程名称,并导入参数。参数LastModifyDate的类型为Int64.

  • 为管道运行单击Debug,并给出Source、Sink和控制表的管道参数。

  • 复制文件后,水印值将更新为最新值。

接收器文件:

  • 新的行项目被添加到源(下图中的第4条记录是新添加的)。


指令集

  • 重新运行管道以检查是否复制了增量行。

当epoch时间戳作为水印列给出时,增量记录被复制到接收器。
参考:Delta copy from a database template上的MS文件

相关问题