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

无法向Databricks Delta表的array<struct>列插入字典列表求助

问题分析与解决

你遇到的语法错误是因为Databricks SQL(基于Spark SQL)不支持在VALUES子句中直接使用JSON格式的数组/结构体语法,必须使用Spark提供的内置构造函数来构建复杂类型的数据。

错误原因

你的emp_address列是ARRAY<STRUCT<...>>类型,在VALUES中直接用[{...}, {...}]这种JSON写法不符合Spark SQL的语法规范,Spark SQL要求用array()构造数组,用struct()构造结构体。

修正后的INSERT语句

INSERT INTO emp_db.employee_details(employee_id, employee_name, emp_deptname, emp_endpoint, emp_folder, emp_address, event_timestamp)
VALUES (
    873547690, 'abc', 'sales', 'abc@abc01storage', 'messages', 
    array(
        struct('Home', 'Delhi', 'H.Number 124, B block, XYZ Towers', '123abc'),
        struct('Postbox', 'Delhi', 'Post Office 12A, Sector 22', '456xyz')
    ), 
    '2025-07-16 13:10:43'
)

如果担心字段顺序出错,也可以给struct的字段指定名称,提升可读性:

INSERT INTO emp_db.employee_details(employee_id, employee_name, emp_deptname, emp_endpoint, emp_folder, emp_address, event_timestamp)
VALUES (
    873547690, 'abc', 'sales', 'abc@abc01storage', 'messages', 
    array(
        struct('Home' AS type, 'Delhi' AS city, 'H.Number 124, B block, XYZ Towers' AS apartment_number, '123abc' AS pincode),
        struct('Postbox' AS type, 'Delhi' AS city, 'Post Office 12A, Sector 22' AS apartment_number, '456xyz' AS pincode)
    ), 
    '2025-07-16 13:10:43'
)

补充说明

如果是从JSON文件、DataFrame等数据源导入数据,Spark可以自动解析JSON格式的复杂类型,但直接通过VALUES子句插入时,必须严格使用Spark SQL的构造函数语法来构建数组和结构体。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.12 10:16:10