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

时间:2018-09-26 09:16:45

标签: excel azure azure-data-factory azure-data-factory-2

我正在尝试在Azure数据工厂数据集中读取具有.xlsx扩展名的Azure Blob存储中的文件并使其表现出色。会引发以下错误

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

在Azure Data Factory中要读取的Excel文件,正确的列和行分隔符是什么

4 个答案:

答案 0 :(得分:5)

Excel文件具有专有格式,不是简单的定界文件。如here所示,Azure数据工厂没有没有可以直接导入Excel文件,例如,您不能创建到Excel文件的链接服务并读取它容易。您可以选择的是:

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

让我们知道您的生活

答案 1 :(得分:0)

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

  1. 使用适当的协议(FTP,文件共享,SFTP等)创建到源的链接服务
  2. 创建到您的云存储的链接服务。
  3. 进行复制数据活动,使用先前定义的链接服务定义文件系统源数据集和接收器
  4. 在“源和接收器”中,选中“二进制文件”选项。Binary file option
  5. 发布并执行管道

答案 2 :(得分:0)

我想详细说明选项3。SSIS软件包。我测试了解决方案,它确实起作用了。首先-SSIS IR非常昂贵,您可以在不需要时使用http post's to start-stop

第二,SSIS不支持开箱即用地处理Blob文件。有一些解决方法。您可以使用一些第三方软件(没有尝试过),或者使用explore options

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

答案 3 :(得分:0)

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

当前,支持excel文件的连接为:

  • Amazon S3
  • 天蓝色斑点
  • 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