【问题标题】:Unable to open or query .parquet files due to corrupted column由于列损坏,无法打开或查询 .parquet 文件
【发布时间】:2022-04-20 21:17:20
【问题描述】:

我正在将 JSON 遥测数据从 Azure 流分析发送到序列化为 .parquet 文件的 Azure Data Lake Gen2。然后,我从数据湖中在我的 Azure Synapse Serverless SQL 池中创建了一个视图,我可以连接到该视图并查询数据以获取报告。

每隔一段时间我会运行一个查询并返回以下错误:

处理外部文件时出错:'parquet 文件中的元数据无效。数字 元数据中的行数与镶木地板中的实际行数不匹配 文件。'。文件/外部表名: 'https://test123.dfs.core.windows.net/devicetelemetry/2021/12/03/20/-1875592941_d9a0239529f04e1eb587b83d50bbb590_1.parquet'。

当我尝试使用“Apache Parquet 查看器”或任何其他 Parquet 查看器打开有问题的 .paqruet 文件时,它会出错并拒绝打开文件,并抱怨名为“数据”的列未定义。数据列是一个 JSON 字符串,其中包含来自 IoT 设备的各种传感器读数。

将数据发送到我的 ADLS 的 StreamAnalytics 查询如下所示:

SELECT 
  Tel.identities.corporationId AS corporationId, Tel.identities.deviceId, 
  Tel.deviceTelemetry.version, Tel.deviceTelemetry.TimeStamp AS dateTimeStamp, 
  Tel.deviceTelemetry.data
INTO 
  deviceTelemetryADLS
FROM 
  data AS Tel 
WHERE Tel.deviceTelemetry.data IS NOT null

问题

这里使用的 WHERE 子句不能确保数据始终存在吗?不然不会发?否则我的 .parquet 文件怎么会损坏?

【问题讨论】:

  • 嗨,乔希,如果这对时间敏感,您能否在 Azure 门户中打开支持票证?如果没有,我将尝试重现该问题。如果可能,您介意共享一个重现该问题的示例输入文件吗?最好发送至 askasa@microsoft.com
  • 仅供参考,一旦预览数据,您可以在输入配置文件中轻松地从 VS Code 生成示例文件。
  • 我正在经历这个确切的错误。你解决了吗?
  • @FlavioPegas 请参阅下面的答案

标签: apache-spark parquet azure-data-lake azure-stream-analytics azure-synapse


【解决方案1】:

有问题的“数据”列是动态对象的嵌套 JSON 数组,SA 似乎无法正确转换为镶木地板格式。我们最终做的是创建一个流分析函数,它接收这个数组并将其转换为字符串

功能

function main(InputJSON) {
  var InputJSONString = JSON.stringify(InputJSON);
  return InputJSONString;
}

查询

Tel.identities.corporationId AS corporationId, Tel.identities.deviceId, Tel.deviceTelemetry.version, Tel.deviceTelemetry.TimeStamp AS dateTimeStamp, udf.ConvertToJSONString(Tel.deviceTelemetry.data) as deviceData
INTO 
    deviceTelemetryADLS
FROM 
    data AS Tel 
WHERE Tel.deviceTelemetry.data IS NOT null 

因此,我们将这个嵌套的 JSON 作为单列存储在 SQL 中,因为我们不需要索引这些“数据”字段。当向我们的 .NET 应用程序查询它时,我们将其反序列化为一个对象

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-07-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-04-07
    • 1970-01-01
    相关资源
    最近更新 更多