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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.02 15:52:40