如何使用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
相关产品推荐
相关产品推荐

