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

含struct日期字段的Databricks Delta表导入Power BI时日期无引号问题

问题:Delta表含日期字段的Struct列在Power BI中无法解析,需访问嵌套字段

场景复现

在Databricks中创建包含Struct类型列(内部有date字段)、date类型列的Delta表:

create table date_struct (s struct<d:date>, d date, s_json string);
insert into date_struct (s, d, s_json) values (
    named_struct('d', '2020-01-01'), 
    '2020-02-01', 
    to_json(named_struct('d', '2020-01-01')))

将该表导入Power BI后,s列被映射为字符串,d列正常识别为date类型,结果如下:

sds_json
{"d":2020-01-01}01/02/2020{"d":"2020-01-01"}

问题表现

s列的字符串是格式错误的JSON(日期值缺少引号),导致Power BI的Json.Document()函数无法解析。使用以下M代码尝试解析时:

let
    Source = Databricks.Catalogs("xxx.azuredatabricks.net", "/sql/1.0/warehouses/yyy", [Catalog = "", Database = ""]),
    my_Database = Source{[Name="my",Kind="Database"]}[Data],
    delta_tutorial_Schema = my_Database{[Name="myschema",Kind="Schema"]}[Data],
    ds1 = delta_tutorial_Schema{[Name="date_struct",Kind="Table"]}[Data],
    ds2 = Table.AddColumn(ds1, "record_from_s", each Json.Document([s])),
    ds3 = Table.AddColumn(ds2, "record_from_s_json", each Json.Document([s_json]))
in
    ds3

会出现如下错误,仅预先序列化的s_json列能正常转换:

sdrecord_from_srecord_from_s_json
{"d":2020-01-01}01/02/2020ErrorRecord

错误详情:

DataFormat.Error: We found extra characters at the end of the JSON input.
Details:
    Value=-
    Position=9

需求

需要可靠方法访问s.d字段,排除以下方案:

  • 使用预先序列化的s_json列调用Json.Document()
  • 用Replace函数手动为s列的日期添加引号(实际场景Struct结构更复杂,该方法不可靠)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.19 16:40:04