繁体   English   中英

使用Azure Data Factory将文件内容从Azure存储复制到Azure SQL Db

[英]Copying file contents from Azure Storage to Azure SQL Db using Azure Data Factory

第一次海报,长时间阅读。

第三方提供商每天将CSV文件上载到共享Azure Blob存储一次。 这些文件具有一定的前缀,文件名中包含时间戳,并且位于同一目录中。 Fi“dw_palkkatekijat_20170320T021”每个文件都将包含之前的所有数据,以及前一天新添加的数据。 我想将所有文件中的所有行导入Azure SQL DB中的SQL表。 我能这样做。

我遇到的问题是我不知道如何将文件名添加到表中的单独列中,因此我可以分隔行来自哪个文件,并且只使用最新的行。 我需要导入所有文件的内容并存储文件的所有“版本”。 有没有办法可以将文件名作为SQL存储过程的参数发送? 或者任何其他方式来处理这个问题?

谢谢您的帮助。

在您描述的当前情况下,您将无法获得确切的文件名。 ADF不是数据转换服务,因此不会为您提供此级别的功能......我希望它能做到!

但是,有几个选项可以获取文件名或类似的东西。 我接受的都不是完美的!

选项1 (我认为最佳选择!)

正如你问的那样。 将参数传递给SQL DB存储过程。 使用ADF活动参数属性当然可以实现这一点。

作为一个参数传递什么?...

好吧,如果blob存储中的源文件在文件名中有明确定义的日期和时间。 您已在输入数据集定义中使用了哪个,然后将其传递给proc。 将其存储在SQL DB表中。 然后你可以在文件加载时以及何时和重叠期间计算出来。 也许?

您可以访问活动中数据集的时间片开始。 示例JSON ...

    "activities": [
        {
            "name": "StoredProcedureActivityTemplate",
            "type": "SqlServerStoredProcedure",
            "inputs": [
                {
                    "name": "BlobFile"
                }
            ],
            "outputs": [
                {
                    "name": "RelationalTable"
                }
            ],
            "typeProperties": {
              "storedProcedureName": "[dbo].[usp_LoadMyBlobs]",
              "storedProcedureParameters": {
                  //like this:
                  "ExactParamName": "$$Text.Format('{0:yyyyMMdd}', Time.AddMinutes(SliceStart, 0))" //tweak the date format
              }
            }, //etc ....

选项2 (努力量)

创建一个中间人ADF自定义活动,读取文件,加上文件名,并将值添加为列。

ADF中的自定义活动基本上为您提供了可扩展性,因为您必须在C#中创建数据转换行为。

如果你想沿着这条路走下去,我会建议你学习使用自定义活动所涉及的内容。 需要付出更多努力,并且需要Azure批处理服务。

选项3 (总矫枉过正)

使用Azure Data Lake Analytics服务! 采用与选项2相同的方法。在数据湖中使用USQL来解析文件并在输出数据集中包含文件名。 在USQL中,您可以将文件名的通配符作为提取程序的一部分传递,并在输出数据集中使用它。

我认为这个选项太过分了,因为在完整的数据湖服务上进行抽薹只是为了读取文件名是过分的。 实际上,数据湖可能会取代您的SQL数据库层,并免费为您提供文件名转换。

顺便说一句,您不需要使用Azure Data Lake存储来存储源文件。 您可以为分析服务提供对现有共享Blob存储帐户的访问权限。 但是,您只需要它来支持分析服务。

选项4

重新考虑并使用Azure Data Lake而不是Azure SQL DB ?????

希望这可以帮助

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM