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

通过Synapse将CosmosDB的JSON数据导入SQL无服务器池遇阻求助

问题描述

场景

尝试将CosmosDB NoSQL分析存储中的无深度嵌套简单JSON数据,提供给同事在Synapse SQL Serverless Pool中使用,遇到两个核心问题:

问题1:视图创建时的类型不兼容报错

在Azure Data Studio基于CosmosDB链接服务创建视图,部分表抛出错误:

Column 'xxx' of type 'FLOAT' is not compatible with external data type 'Parquet physical type: INT64', please try with 'BIGINT'.

异常细节:涉事列仅包含整数,且视图中已明确指定数据类型为bigint。

问题2:Copy管道处理数组属性报错

使用Synapse Copy管道以CosmosDB为源写入Parquet接收器,针对数组属性开启“add array”选项后,运行时报错:

{
    "errorCode": "2200",
    "message": "ErrorCode=JsonUnsupportedHierarchicalComplexValue,'Type=Microsoft.DataTransfer.Common.Shared.HybridDeliveryException,Message=The retrieved type of data JArray is not supported yet. Please either remove the targeted column 'xxx' or enable skip incompatible row to skip the issue rows.,Source=Microsoft.DataTransfer.Common,'",
    "failureType": "UserError",
    "target": "xxxx",
    "details": []
}
解决建议

针对问题1:类型不兼容报错

  • 显式强制转换类型:创建视图时,对涉事列使用TRY_CAST或CAST直接转换为bigint,避免依赖自动推断。示例SQL:
    CREATE VIEW TargetView AS
    SELECT
        TRY_CAST(xxx AS BIGINT) AS xxx,
        -- 其他列
    FROM OPENROWSET(PROVIDER = 'CosmosDB', ...)
    
  • 显式定义查询架构:在OPENROWSET中通过WITH子句硬编码列类型,强制Synapse使用指定类型而非Parquet元数据的推断结果。示例:
    SELECT *
    FROM OPENROWSET(
        PROVIDER = 'CosmosDB',
        CONNECTION = 'Account=your-account;Database=your-db',
        OBJECT = 'your-container',
        SERVER_CREDENTIAL = 'your-credential'
    ) WITH (
        xxx BIGINT,
        -- 其他列的类型定义
    ) AS result
    
  • 刷新CosmosDB分析存储元数据:如果Parquet元数据因历史数据误标记为FLOAT,可触发分析存储的重新生成(通过CosmosDB门户的分析存储设置),纠正类型标记。

针对问题2:数组属性处理报错

  • 改用Data Flow处理复杂类型:Copy管道对JArray支持有限,Data Flow可直接处理数组:
    1. 创建Data Flow,添加CosmosDB分析存储作为源;
    2. 对数组列使用Flatten转换拆分为多行,或用Derived Column将数组转为字符串(如string(xxx));
    3. 将处理后的数据写入Parquet接收器。
  • 在CosmosDB源端转换数组:如果不需要保留数组结构,在Copy管道的CosmosDB源查询中,用CosmosDB内置函数将数组转为字符串。示例查询:
    SELECT ARRAY_TO_STRING(xxx, ',') AS xxx, * FROM c
    
  • 临时跳过不兼容行:若可接受部分数据丢失,在Copy管道的“设置”页开启“跳过不兼容的行”,但仅作为临时应急方案。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.26 15:23:26