1

我有一个 SSIS 任务,它从 Azure Data Lake 读取 JSON 文件,使用脚本任务中的反序列化命令对其进行解析,并将它们的副本创建为本地 SQL Server 中的表。

这进展顺利,但非常缓慢。导入一个目录需要6个小时,而且目录很多。

所以我决定以一种渐进的方式来做这个。

起初,我使用条件拆分来避免将旧记录写入本地 SQL 服务器,但这仍然涉及读取整个文件的时间成本。条件拆分是一个有趣的组件,我观察到它只是无缘无故地跳过了一些记录。不好。

那么,为什么不跳过我之前导入的整个文件呢?但为此,我需要获取我正在处理的文件的最后修改日期。

现在我知道有一些 .Net 方法可以在纯 c# 中执行此操作(使用 .NET SDK 在 Azure Data Lake Storage Gen1 上进行文件系统操作),但由于我使用的是 SSIS 的脚本组件,因此我已经与 Data Lake 建立了有效连接。应该容易得多吧?

但我找不到办法,我很感激这里的任何指导。

干杯

4

1 回答 1

1

如果您尝试使用SSIS 中的 Data Lake Store 任务按修改日期对文件进行排序,那么您将不会很幸运地过滤按修改日期加载的文件 - 它没有那种意识。

如果您通过脚本任务将数据拉入 SSIS,那么您的状态会更好。您可以使用 SDK,也可以通过标准 REST API。REST API使用HDFS REST规范。https://<yourstorename>.azuredatalakestore.net/webhdfs/v1/mytempdir/myinputfile.txt?op=GETFILESTATUS将像 SDK 一样返回修改后的时间戳。

在坚持使用 SSIS 数据存储源的同时,您可能能够将两者结合起来获得类似的结果 - 使用带有条件的脚本任务来确定源及其下游是否应该运行。不过,这取决于您的包的架构方式。

于 2019-07-25T17:42:23.440 回答