Azure Synapse Analytics:如何创建指向ADLS Gen2表的外部表或视图
解决OPENROWSET查询Azure Table Storage报错问题
你当前的问题在于FORMAT='TABLE'参数并不适用于Azure Table Storage,该参数仅针对SQL Server原生的表格式文件,无法解析Azure Table返回的Atom XML或JSON格式数据,因此导致报错。以下是两种可行的解决方案:
方案1:解析XML格式返回数据
Azure Table Storage默认返回Atom格式的XML,通过FORMAT='XML'获取数据后,使用OPENXML提取字段:
DECLARE @xml XML; -- 获取XML格式的表数据 SELECT @xml = BulkColumn FROM OPENROWSET( BULK 'https://mylakename.table.core.windows.net/MyTableName?sv=2022-11-02&ss=asdd&srt=co&sp=xxxxxx&se=2025-01-31T17:53:54Z&st=2024-01-08T09:53:54Z&spr=https&sig=xxxxxxx', FORMAT='XML' ) AS rows; -- 解析XML节点提取业务字段 SELECT T.c.value('(./PartitionKey/text())[1]', 'NVARCHAR(255)') AS PartitionKey, T.c.value('(./RowKey/text())[1]', 'NVARCHAR(255)') AS RowKey, T.c.value('(./Timestamp/text())[1]', 'DATETIME') AS Timestamp, -- 替换为你的自定义字段 T.c.value('(./YourCustomField/text())[1]', 'NVARCHAR(255)') AS YourCustomField FROM @xml.nodes('//entry/content/m:properties') T(c);
方案2:解析JSON格式返回数据
在请求URL中添加$format=json参数,让Azure Table返回JSON格式数据,再用FORMAT='JSON'结合OPENJSON解析:
SELECT * FROM OPENROWSET( BULK 'https://mylakename.table.core.windows.net/MyTableName?$format=json&sv=2022-11-02&ss=asdd&srt=co&sp=xxxxxx&se=2025-01-31T17:53:54Z&st=2024-01-08T09:53:54Z&spr=https&sig=xxxxxxx', FORMAT='JSON' ) AS rows CROSS APPLY OPENJSON(BulkColumn, '$.value') WITH ( PartitionKey NVARCHAR(255) '$.PartitionKey', RowKey NVARCHAR(255) '$.RowKey', Timestamp DATETIME '$.Timestamp', -- 替换为你的自定义字段 YourCustomField NVARCHAR(255) '$.YourCustomField' );
关键说明
- Azure Table Storage的REST API返回的并非SQL Server兼容的表格式文件,因此不能使用
FORMAT='TABLE'参数。 - 两种方案可根据你的数据格式偏好选择,JSON格式的解析逻辑相对更直观。
内容的提问来源于stack exchange,提问作者DataWrangler1980
相关产品推荐
相关产品推荐

