【问题标题】:Processing Event Hub Capture AVRO files with Azure Data Lake Analytics使用 Azure Data Lake Analytics 处理事件中心捕获 AVRO 文件
【发布时间】:2018-01-22 19:35:05
【问题描述】:

我正在尝试从 Event Hub Capture 生成的 AVRO 文件中提取数据。在大多数情况下,这完美无缺。但是某些文件给我带来了问题。当我运行以下 U-SQL 作业时,出现错误:

USE DATABASE Metrics;
USE SCHEMA dbo;

REFERENCE ASSEMBLY [Newtonsoft.Json];
REFERENCE ASSEMBLY [Microsoft.Analytics.Samples.Formats];
REFERENCE ASSEMBLY [Avro];
REFERENCE ASSEMBLY [log4net];

USING Microsoft.Analytics.Samples.Formats.ApacheAvro;
USING Microsoft.Analytics.Samples.Formats.Json;
USING System.Text;

//DECLARE @input string = "adl://mydatalakestore.azuredatalakestore.net/event-hub-capture/v3/{date:yyyy}/{date:MM}/{date:dd}/{date:HH}/{filename}";
DECLARE @input string = "adl://mydatalakestore.azuredatalakestore.net/event-hub-capture/v3/2018/01/16/19/rcpt-metrics-us-es-eh-metrics-v3-us-0-35-36.avro";


@eventHubArchiveRecords =
    EXTRACT Body byte[], 
            date DateTime, 
            filename System.String
    FROM @input
    USING new AvroExtractor(@"
        {
            ""type"":""record"",
            ""name"":""EventData"",
            ""namespace"":""Microsoft.ServiceBus.Messaging"",
            ""fields"":[
                {""name"":""SequenceNumber"",""type"":""long""},
                {""name"":""Offset"",""type"":""string""},
                {""name"":""EnqueuedTimeUtc"",""type"":""string""},
                {""name"":""SystemProperties"",""type"":{""type"":""map"",""values"":[""long"",""double"",""string"",""bytes""]}},
                {""name"":""Properties"",""type"":{""type"":""map"",""values"":[""long"",""double"",""string"",""bytes""]}},
                {""name"":""Body"",""type"":[""null"",""bytes""]}
            ]
        }
    ");

@json =
    SELECT Encoding.UTF8.GetString(Body) AS json
    FROM @eventHubArchiveRecords;

OUTPUT @json
TO "/outputs/Avro/testjson.csv"
USING Outputters.Csv(outputHeader : true, quoting : true);

我收到以下错误:

来自用户代码的未处理异常:“给定的键不在字典中。”

在用户类型“Microsoft.Analytics.Samples.Formats.ApacheAvro.AvroExtractor”上调用方法“Extract”时,报告了来自用户代码的未处理异常

我是否正确假设问题出在 Event Hub Capture 生成的 AVRO 文件中,还是我的代码有问题?

【问题讨论】:

  • 嗨,Marc,我联系了 Avro 提取器的作者。 Microsoft.Hadoop.Avro 库存在一些问题,这些问题已通过迁移到 Apache C# Avro 库得到解决。我对代码不够熟悉,但不知道这是这个问题还是其他问题,也不知道如何解决您的问题。

标签: azure-data-lake


【解决方案1】:

Key Not Present 错误指的是您的提取语句中的字段。它没有找到数据和文件名字段。我删除了这些字段,您的脚本在我的 ADLA 实例中正确运行。

【讨论】:

    【解决方案2】:

    目前的实现只支持原始类型,不支持Avro specification的复杂类型。

    【讨论】:

      【解决方案3】:

      您必须构建和使用基于 apache avro 的提取器,而不是使用 MS 提供的示例提取器。 我们走的是同一条路

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-07-19
        • 2020-11-22
        • 2022-10-18
        • 2019-08-17
        • 1970-01-01
        相关资源
        最近更新 更多