如何读取 Azure 数据工厂中扩展名为 .xlsx 和 .xls 的文件?

How to read files with .xlsx and .xls extension in Azure data factory?

我正在尝试在我的 Azure 数据工厂数据集中读取和 excel Azure Blob 存储中扩展名为 .xlsx 的文件。它抛出以下错误

Error found when processing 'Csv/Tsv Format Text' source 'Filename.xlsx' with row number 3: found more columns than expected column count: 1.

要在 Azure 数据工厂中读取的 excel 文件的正确列和行分隔符是什么

2022 年 3 月更新: ADF 现在通过映射数据流更好地支持 Excel:

https://docs.microsoft.com/en-us/azure/data-factory/format-excel

Excel 文件具有专有格式,不是简单的分隔文件。如 here 所示,Azure 数据工厂 没有 有一个直接选项来导入 Excel 文件,例如你 不能 创建链接服务到 Excel 文件并轻松阅读。您的选择是:

  1. 将数据导出或转换为平面文件,例如在传输到云之前,因为 .csv、制表符分隔、竖线分隔等比 Excel 文件更易于阅读。这是最简单的选择,但显然需要更改流程。
  2. 尝试粉碎 XML - 创建自定义任务以 XML 打开 Excel 文件并按照建议提取数据 here.
  3. Azure 数据工厂现在支持 SSIS 包(使用 Execute SSIS package activity)并且更好地支持 Excel 文件,例如连接管理器。因此,可能 是创建 SSIS 包以处理 Excel 并将其托管在 ADFv2 中的一个选项。 警告!我没有测试过这个,我只是推测这是可能的。此外,在 ADFv2 中为 运行 SSIS 创建集成运行时 (IR) 也会产生开销。
  4. 尝试一些其他自定义 activity,例如 github [=14= 上有一个自定义 U-SQL 提取器用于粉碎 XML ].
  5. 尝试使用 Databricks 阅读 Excel,一些示例 尽管启动 Spark 集群来读取一些 Excel 文件似乎有些过分。如果 Spark 已经在您的架构中,这可能是一个不错的选择。

告诉我们你的进展情况。

Azure 数据工厂没有直接上传 excel 的选项,但是,可以通过某些配置通过链接服务 上传。按照以下步骤操作:

  1. 使用适当的协议(FTP、文件共享、SFTP 等)创建到源的链接服务
  2. 为您的云存储创建链接服务。
  3. 获取复制数据 activity,使用您之前定义的链接服务定义文件系统源数据集和接收器
  4. 在 Source and Sink 中,勾选 Binary file 选项。Binary file option
  5. 发布并执行您的管道

我想详细说明选项 3.SSIS 包。我测试了这个解决方案,它有点奏效了。首先 - SSIS IR 非常昂贵,您想在不需要时使用它 http post's to start-stop

其次,SSIS 不支持直接处理 blob 文件。有一些解决方法。你可以使用一些第三方软件(没试过),或者explore options

在我的例子中,我使用技巧来部署在本地下载文件的包,处理然后删除它。由于 SSIS IR 是一个 VM,它在部署后基本上在 IR 上做了同样的事情。这是一个技巧而不是解决方案,它不是 100% 稳定的。另一个问题——数字字段在处理过程中出现了一些微不足道的错误——例如。上传 25 在 db 站点导致 25.0000000001。不知道为什么。我没有足够的时间深入调查问题。

Azure 数据工厂 V2 最近发布了一个更新,支持在现有连接器上解析 Excel(.xls) 文件。

目前支持excel个文件的连接有:

  • 亚马逊 S3
  • Azure Blob
  • Azure Data Lake Storage Gen1
  • Azure Data Lake Storage Gen2
  • Azure 文件存储
  • 文件系统
  • FTP
  • Google 云存储
  • HDFS
  • HTTP
  • SFTP

可以在此处找到更多详细信息:https://docs.microsoft.com/en-us/azure/data-factory/format-excel