含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类型,结果如下:
| s | d | s_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列能正常转换:
| s | d | record_from_s | record_from_s_json |
|---|---|---|---|
| {"d":2020-01-01} | 01/02/2020 | Error | Record |
错误详情:
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
相关产品推荐
相关产品推荐

