Stream Analytics生成的Parquet文件在Synapse中出现层级格式错误的原因
这个Malformed levels错误本质是Parquet文件的嵌套层级与Synapse SQL的解析能力/预期不匹配,结合你的场景,核心原因有以下几点:
Stream Analytics生成Parquet的嵌套层级超出Synapse SQL支持范围
Synapse SQL查询Parquet文件时,对复杂类型(数组、记录)的嵌套深度有默认限制,通常最多支持1层嵌套(比如数组元素是基本类型、记录字段是基本类型)。如果Stream Analytics输出的Parquet中存在双层嵌套(比如数组里套数组、记录里嵌套另一个记录),就会触发这个错误——因为Parquet schema里标记的层级范围(min:0 max:2)超过了Synapse能处理的最大层级(1)。数据结构不一致导致Parquet Schema混乱
部分消息的数组/记录字段存在不规则嵌套:比如同一份数据中,有的消息是单层数组,有的是数组嵌套数组;或者有的记录是单层结构,有的记录里还包含子记录。Stream Analytics生成Parquet时会自动推断schema,这种不一致的结构会让Parquet的schema定义出现层级范围冲突(比如有的字段层级是0-1,有的是0-2),Synapse SQL合并schema时就会报错。Parquet Schema演化引发的层级冲突
如果你的数据源(Service Bus消息)存在schema变化——比如某个字段从单层记录变成了双层记录,Stream Analytics会生成schema不兼容的Parquet文件。当Synapse SQL批量读取这些文件时,合并后的schema层级范围(min:0 max:2)超出了它预设的解析最大层级(1),从而触发错误。Synapse SQL对Parquet复杂类型的解析限制
Synapse SQL的外部表在处理Parquet的复杂类型时,存在特定限制:比如不支持二维数组(数组嵌套数组),也不支持记录嵌套记录的深层结构。当Parquet文件包含这类结构时,解析就会失败并抛出层级错误。
内容的提问来源于stack exchange,提问作者data_and_coffee

