我正在尝试读取 Azure Blob 存储中的 AzureBlob 存储中的文件.xlsx扩展名在我的 Azure 数据工厂数据集中。 它抛出以下错误
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://learn.microsoft.com/en-us/azure/data-factory/format-excel
Excel 文件具有专有格式,不是简单的分隔文件。 如此处所述,Azure 数据工厂没有用于导入 Excel 文件的直接选项,例如,无法创建指向 Excel 文件的链接服务并轻松读取它。 您的选择是:
- 将数据导出或转换为平面文件,例如在传输到云之前,因为.csv,制表符分隔,管道分隔等比Excel文件更容易阅读。 这是您最简单的选择,尽管显然需要更改流程。
- 尝试粉碎 XML - 创建自定义任务以 XML 格式打开 Excel 文件,并按照此处的建议提取数据。
- Azure 数据工厂现在支持 SSIS 包(使用执行 SSIS 包活动(,并且对 Excel 文件(例如连接管理器(有更好的支持。 因此,可以选择创建 SSIS 包来处理 Excel 并将其托管在 ADFv2 中。警告!我没有测试过这个,我只是推测这是可能的。 此外,创建集成运行时 (IR( 以在 ADFv2 中运行 SSIS 会产生开销。
-
尝试其他一些自定义活动,例如,这里有一个自定义的 U-SQL 提取器,用于在 github 上粉碎 XML。 - 尝试使用Databricks读取Excel,尽管启动Spark集群以读取一些Excel文件似乎有些矫枉过正。 如果 Spark 已经在您的架构中,这可能是一个不错的选择。
让我们知道您的情况。
Azure 数据工厂 V2 最近发布了一个更新,以支持在现有连接器上分析 Excel(.xls( 文件。
目前,支持 excel 文件的连接包括:
- 亚马逊 S3
- Azure Blob
- Azure Data Lake Storage Gen1
- Azure Data Lake Storage Gen2
- Azure 文件存储
- 文件系统
- 邮票
- 谷歌云存储
- 高密度纤维化
- HTTP
- 自来水龙
更多细节可以在这里找到:https://learn.microsoft.com/en-us/azure/data-factory/format-excel
Azure 数据工厂没有用于上传 Excel 的直接选项,但是,可以通过某些配置通过链接服务上传Excel。请按照以下步骤操作:
- 使用适当的协议(FTP、文件共享、SFTP 等(创建到源的链接服务
- 创建到云存储的链接服务。
- 执行复制数据活动,使用以前定义的链接服务定义文件系统源数据集和接收器
- 在"源和接收器"中,勾选"二进制文件"选项。二进制文件选项
- 发布和执行管道
我想对选项 3 进行更多阐述。SSIS 包。我测试了解决方案,它有点工作。首先 - SSIS IR非常昂贵,您想在不需要时使用http post来启动 - 停止它。
其次,SSIS 不支持处理现成的 blob 文件。有一些方法可以解决它。您可以使用一些第三方软件(没有尝试过(,或探索选项
就我而言,我使用技巧在本地部署下载文件的包,处理然后删除它。由于 SSIS IR 是 VM,因此在部署后,它基本上在 IR 上执行相同的操作。这是一个技巧而不是解决方案,它不是100%稳定的。另一个问题 - 数字字段在处理过程中出现一些微不足道的错误 - 例如。上传 25 导致 25.00000000001 在数据库站点。不知道为什么。我没有足够的时间更深入地调查问题。