You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用Azure Synapse分析Azure Data Lake中的Excel与XML文件?

Azure Synapse Serverless SQL处理ADLS中Excel/XML文件的可行方案

一、处理Excel文件的方案

1. 转格式后查询(推荐生产环境使用)

直接在Synapse Studio中创建「复制数据」管道:源选择ADLS存储的Excel文件,目标选择ADLS中的Parquet或CSV格式(Parquet的查询性能更优)。转换完成后,即可用Serverless SQL的OPENROWSET直接查询,也能基于转换后的文件创建视图。

示例查询转换后的Parquet文件:

SELECT *
FROM OPENROWSET(
    BULK 'abfss://<容器名>@<存储账户名>.dfs.core.windows.net/转换后文件路径/*.parquet',
    FORMAT = 'PARQUET'
) AS [result]

2. 用ODBC驱动直接读取(仅私有端点环境适用)

如果你的Serverless SQL池通过私有端点访问ADLS,可配置外部数据源搭配ACE驱动读取Excel,但该方法依赖环境配置,稳定性较差,不推荐生产环境使用。示例代码:

CREATE EXTERNAL DATA SOURCE ExcelDataSource
WITH (
    LOCATION = 'odbc://<ADLS路径对应的ODBC连接>',
    CONNECTION_OPTIONS = 'Driver={Microsoft Excel Driver (*.xls, *.xlsx, *.xlsm, *.xlsb)};DBQ=abfss://<容器名>@<存储账户名>.dfs.core.windows.net/Excel文件路径/xxx.xlsx'
);

SELECT * FROM OPENROWSET(
    BULK '',
    DATA_SOURCE = 'ExcelDataSource',
    FORMAT = 'EXCEL'
) AS [result]

二、处理XML文件的方案

1. 直接读取并解析

Serverless SQL支持读取XML文件,先通过OPENROWSET将文件内容读取为XML类型,再用T-SQL的XML函数进行解析。示例代码:

SELECT
    x.XmlData.value('(Root/Record/ID)[1]', 'INT') AS ID,
    x.XmlData.value('(Root/Record/Name)[1]', 'VARCHAR(50)') AS Name
FROM (
    SELECT CAST(BulkColumn AS XML) AS XmlData
    FROM OPENROWSET(
        BULK 'abfss://<容器名>@<存储账户名>.dfs.core.windows.net/XML文件路径/xxx.xml',
        FORMAT = 'CSV',
        FIELDTERMINATOR = '0x0b',
        ROWTERMINATOR = '0x0b'
    ) AS [data]
) AS t
CROSS APPLY XmlData.nodes('/Root/Record') AS x(XmlData)

注:用CSV格式读取是为了将整个XML文件作为单一行内容,方便转换为XML类型解析。

2. 转格式后查询

和Excel的处理思路一致,用Synapse管道将XML文件转换为Parquet或CSV格式,后续直接查询转换后的文件,适合高频分析场景,性能更优。

三、优化建议

  • 高频访问的Excel/XML文件优先转换为Parquet格式,列式存储在Serverless SQL中的查询性能远高于原生格式。
  • 可为管道配置触发规则,实现新文件上传时自动转换,无需手动操作。
  • 创建视图时基于转换后的列式存储文件,避免每次查询都解析原生Excel/XML,提升查询效率。

内容的提问来源于stack exchange,提问作者developer

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.15 00:01:07