数据库同步工具
sqlserver,Mysql数据同步软件

SQL Server Integration Services带有Azure Data Lake Storage的灵活文件任务

购买事宜请联系QQ:1793040

问题

自发布以来,Integration Services在过去15年中拥有丰富多彩的产品历史。该 提取物,转换和装载的产品与SQL Server 2005的版本中引入这是在设计理念与分成对照编程任务的重大变化和流动的数据流。Microsoft 在SQL Server 2012中引入了 SSIS目录,以满足程序包的运行时跟踪要求。飞行记录仪的想法是一个重大改进。程序包不仅具有执行过程的逐步跟踪,而且还具有每个步骤的运行时统计信息。该 增量包SQL Server 2016中的部署选项可避免将重复的代码复制到目录中。两项增强功能确实使SQL Server Integration Services成为世界一流的产品。

有大量用各种版本的产品编写的软件包。文件夹和文件的管理是正常数据处理的一部分。  如果您的公司正在考虑将这些软件包提起并转移到Azure Data Lake Storage,则如何使用SSIS复制这些文件管理任务?

最新 的Visual Studio 2019 Azure功能包于2019年11月发布.Microsoft自2012年以来一直为SSIS开发人员提供一套适用于Azure的工具。大多数为Azure设计的系统使用两种类型的存储:Blob存储和Data Lake存储。灵活文件任务是管理驻留在本地,blob和数据湖存储系统上的文件的下一步发展。系统设计人员应仅使用Azure数据湖存储的第2代。不推荐使用早期版本,并且该版本不适用于此控件。

今天,我们将研究灵活文件任务如何替换现有的旧文件管理代码。

业务问题

三种用例中,灵活文件任务可以派上用场。 

用例 特征
1个 复制和删除保存在本地存储中的文件。
2 复制和删除保存在Blob存储中的文件。
3 复制和删除保存在数据湖存储中的文件。

因为此灵活文件任务可在各种存储层中工作,所以用此新控件替换现有代码可能是个好主意。这将简化将来向云的任何迁移。通常,我喜欢将旧控件与新控件进行比较和对比。但是,这是不可能的,因为Azure Data Lake Storage于2019年2月开始全面上市。此功能包是与较新的存储系统一起使用的第一组工具。

假定已创建具有Visual Studio 2019和SSIS扩展的开发机。有关开发机的典型构建列表,请参阅此先前文章。此外,必须在环境中 下载并安装Visual Studio 2019的Azure功能包 。我选择安装x86功能包,因为驱动程序对此版本非常有用。 

本文的重点是将新控件与第二代Azure Data Lake Storage一起使用。

本地数据文件

该 灵活的文件任务只能用于复制和删除文件。拥有一组可以在我们创建的示例包中使用的暂存文件很重要。下图显示了合并后的标准普尔500每日每日库存信息,每年压缩为一个zip文件。每个zip文件包含505个数据文件,每个标准普尔500强公司都有一个。下图显示了总共6年的数据。

压缩数据文件

用例#3 – Azure数据湖存储

新的Azure功能包中最令人兴奋的部分是能够使用存储在第二代Azure Data Lake Storage(ADLS2)上的文件。Azure Blob文件系统(ABFS) 驱动程序是客户端与Azure REST API之间的接口。有关详细信息,请参见下面的Microsoft图片。该驱动程序支持来自大数据工具(例如Azure数据砖和Azure SQL数据仓库)的Hadoop文件系统逻辑调用。Microsoft花了几个月的时间来编写新的任务控件,目标连接和源连接才能与ADLS2一起使用。

Azure Blob存储

下图显示了从本地到云的典型文件移动。在本节中,我们将使用 For Each循环容器遍历本地文件和ADLS2文件。此重复循环将允许将单个操作应用于一组文件。因此,我们可以使用这种设计来复制或删除一堆文件。

数据流程图

此时,让我们创建一个Blob存储帐户和一个数据湖存储容器​​。请为您的公司采用Azure对象命名约定。我在存储帐户中使用缩写“ sa”, 在存储容器中使用缩写“ sc”。下图显示了Azure门户中默认仪表板上的存储帐户。

我的仪表板

发现受控漏洞

在继续介绍示例之前,我需要谈谈适用于Visual Studio 2019的Azure Feature Pack中的一个错误.15.1.16.0版中的Flexible File任务在使用ADLS2时可能会出错。我必须与工程团队一起找到错误,然后他们建议了解决方法。

下图显示了执行失败的输出。错误消息指出“试图访问元素的类型与数组不兼容。” 我们如何找到该错误的真正根本原因? 

新控件中的错误

在报告错误之前和之后,我们需要在包装上应用断点。系统内部的 进程资源管理器实用程序可用于检查用于调试的运行时可执行文件(DtsDebugHost.exe)。下图显示了问题的根本原因。有两个版本的Newtonsoft.Json.DLL被加载到内存中。

流程浏览器

当前问题的解决方法是在 AppData文件夹下找到当前用户配置文件的“ DtsDebugHost.config ”文件 。编辑文件。在结束标记</ assemblyBinding>之前插入以下重定向语句(XML)。确保重新启动Visual Studio以正确应用此新绑定。 

<dependentAssembly> 
    <assemblyIdentity name =“ Newtonsoft.Json” publicKeyToken =“ 30ad4fe6b2a6aeed” culture =“ neutral” /> 
    <bindingRedirect oldVersion =“ 4.5.0.0-12.0.0.0” newVersion =“ 11.0.0.0” /> 
</ dependentAssembly>

分配服务原则的权利

The File System Task has to use a connector to log into Azure Data Lake Storage.  It only supports a user defined service principle.  Please see my prior article on how to create a service principle.  Azure storage explore is still the only way to assign ACL rights to directories that you create.  Please see my article on using azure storage explorer with ADLS2.  Please create two directories underneath the root directory of the file system.  The image below shows the stocks directory for unprocessed files and the archives directory for processed files.

档案

Please grab the application id, directory id, and object id assigned to your service principle.  The image below shows the details of the service principle named svcprn01.  Use the third hyper link on the left to obtain the object id for the service principle.  An application key (secret) will need to be defined for the principle.  Please see Microsoft documentation for details.

终点

The image below shows a look up of the svcprn01 using the hidden object id.

添加实体

Please assign access control permissions of read, write and execute to the service principle at the root and subdirectories.  The image below shows the assignment at the root directory.  Repeat the same action for the /stocks and /archives sub-directories.

管理访问

Last but not least, the Service Principle needs to be given RBAC rights to the storage container in Azure.  We can see below that both the user (Dilbert) and the service principle (svcprn01) have owner rights.

微软天蓝色

Make sure you test the connectivity of the ADLS Gen 2 connector before proceeding.  If you get a failure, please double check the permissions.

Azure存储连接管理器编辑器

Copy Local Files to ADLS2

The last package will use three unit tests to make sure the Flexible File task is ready for production use.  The first unit test is to copy a bunch of files from the c:\data directory on premise to the \sc4flexfile2adls2\stocks directory on ADLS2.  The successful execution of the “FELC_LOCAL_DATA_FILES” container is shown below.  The “For Each Loop Container” uses an enumerator to find any matching files.  Then, for each file it will call the “Flexible File Task” to perform an action.  This design pattern will be used for all three unit tests.

本地数据文件

“对于每个循环容器”将在源目录中寻找具有zip扩展名的所有文件。该控件有许多不同的枚举器。我们对LOCAL 和ADLS2存储的枚举数感兴趣。

Foreach循环编辑器

请为此任务定义三个 变量:  [varFileNm] –由循环容器动态更新,[varSrcDir] –源文件的位置,以及[varDstDir] –目标文件的位置。另外,我们需要第二个目标变量和第二个文件名变量。这些变量将在以后解释和使用。

变量

确保将文件名变量映射到索引为0的容器的输出。

foreach循环编辑器

最初,我们必须对“灵活文件任务”进行硬编码,以免产生错误。将任务对象 延迟验证属性标记 为true,以避免错误。

灵活的文件任务编辑器

该过程中最重要的部分是将控件公开的属性映射到我们定义的变量。使用任务编辑器设置 属性表达式。在此示例中,我们使用先前定义的三个变量。该映射将静态执行转换为动态执行。

灵活的文件任务编辑器

容器的成功执行会将文件从内部复制到Azure Data Lake Storage。Azure存储资源管理器图像显示了测试3a的结果。请禁用此容器,以便我们可以创建接下来的两个单元测试。

stocks文件夹中现有的文件

灵活的文件任务–管理ADLS Gen2中的文件

The second unit test is to copy 6 files from \sc4flexfile2adls2\stocks to the \sc4flexfile2adls2\archives folder.The successful execution of the “FELC_ADLS2_STOCK_FILES” container is shown below. 

将ADLS2文件从库存复制到存档文件夹

There are configuration differences to note when using the ADLS2 enumerator.  First, the folder path to the storage is using LINUX like pathing.  Second, there is no pattern matching to reduce the resulting file list.  Third, we cannot dictate the format of the retrieved file name.

ADLS2的枚举器与本地文件不同

To shorten the article, I am only going to skip steps that are the same and previously examined in the prior paragraph.  For instance, the variable mappings section will be using a different variable, varFileNm2.  However, this step uses the same dialog box seen before and is required for the next two unit tests.

源和目标属性。

The above image shows the source and destination connections using data lake storage.  The folder paths are pointing to the directories that we created using the Azure Storage Explorer.  The image below shows the property expression to variable mapping.  Why did I choose to use a different file variable?  Unlike the local file system enumerator, we have no control over the format of the file returned by the for each loop.  I wanted to point this out.  The returned file name is a fully qualified path.  We will have to use functions in SSIS to create a formula to extract the file name.

使用第二个文件和文件夹变量。

The image above shows the usage of three variables.  The file name variable will have to be modified.  Please see the image below.  Use the expression builder to enter the following formula.  It will return just the file name assuming it is proceeded by a slash.

需要使用SSIS公式从完整路径中提取文件名。

A successful execution of the container will copy the 6 files from the stocks to archives directory.  Please disable the “For Each Loop Container” at this time so that we can create the final test.

存档文件夹中的文件

The third unit test deletes the 6 files from the \sc4flexfile2adls2\stocks folder to complete the logical MOVE action.The successful execution of the “FELC_ADLS2_ARCHIVE_FILES” container is shown below. 

从股票文件夹中删除文件

必须执行类似的操作才能设置“对于每个循环容器”的枚举数和变量映射。由于这些步骤不是新步骤,因此我将直接跳至“灵活文件任务”属性。下图对连接,文件夹路径和文件名进行了硬编码。我们将需要使用表达式到变量映射来使此任务动态化。

删除操作只有一个文件夹和文件属性

同样,我们需要应用SSIS公式将完全限定的路径转换为仅文件名和文件扩展名。

表达式到变量的映射以进行动态编码

摘要

在2019年2月,Azure Data Lake Storage Generation 2(ADLS2)正式发布。但是,PowerShell和 SQL Server Integration Services等工具集 无法利用此新存储。2019年11月发布的灵活文件任务允许开发人员编写程序,这些程序可以在ADLS2存储中以及从ADLS2存储中复制和删除文件。

灵活文件任务是控制文件复制和删除的下一步发展,无论文件是否存在于本地,blob存储或数据湖存储中。更改旧程序后,您可能要考虑用较新的控件替换较旧的控件。如果您仍然想将SSIS用作ETL工具,则此准备工作将简化向云的过渡。

关于安全性,始终首选使用服务原理或受管身份而不是证书。这就是ADLS2存储更安全的原因,因为它同时具有RBAC和ACL权限级别。无论您使用哪种类型的Azure存储,请始终在使用前测试连接。

最后,使用命名约定和文档使支持团队更容易获得该软件包的使用寿命。必须将“灵活文件任务”与“对于每个循环容器”一起使用,以复制或删除一组文件。下次,我们可以讨论Azure Data Lake文件系统任务,该任务在一个控件中执行批量操作。重要的是要注意,Azure Storage Explorer仍然是创建目录,删除目录和管理文件系统访问的主要应用程序。

下一步

  • SSIS 2019的Azure功能包中的新增功能
  • 在控制流中使用Azure Data Lake File System Task
  • 在数据流中使用弹性文件源
  • 在数据流中使用灵活文件目标

未经允许不得转载:数据库同步软件|Mysql数据同步软件|sqlserver数据库同步工具|异构同步 » SQL Server Integration Services带有Azure Data Lake Storage的灵活文件任务

分享到:更多 ()

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址

syncnavigator 8.6.2 企业版

联系我们联系我们