如何分别在 Azure Data Lake Analytics 上下文中使用 JSON 文件格式 usql

How to use JSON file formats in the context of Azure Data Lake Analytics respectively usql

我有一个 JSON 输入看起来像

{
    "sessionId": 1234,
    "deviceId": "MAC:1234",
    "IoTHub": {
        "MessageId": "1234-1234-1234-1234"
    }
}

如何在 Azure Data Lake Analytics u sql 脚本中提取 sessionIddeviceIdMessageId 的值?

如何在 Azure Data Lake Analytics 上下文中分别使用 JSON 文件格式 usql

设置过程

  • 从 [1] 下载存储库
    • .\Examples\DataFormats\Microsoft.Analytics.Samples.sln
    • 中打开解决方案
    • 构建解决方案
    • 获取.\Examples\DataFormats\Microsoft.Analytics.Samples.Formats\bin\Debug\Microsoft.Analytics.Samples.Formats.dll
    • 获取.\Examples\DataFormats\Microsoft.Analytics.Samples.Formats\bin\Debug\Newtonsoft.Json.dll
  • 在 ADLS 中创建一个用于存储程序集的文件夹(例如 .\assemblies
    • 如果它消失了(发生在我身上),请在文件夹中创建一个示例文件
  • 与Visual Studio:
    • 将这两个文件添加到 ADLA 解决方案的文件夹中(例如 .\lib\...
    • 打开 Cloud Explorer,导航到 ADLA 数据库 -> 程序集 -> 右键单击​​并注册程序集
      • 将程序集存储在之前在 ADLS 中创建的文件夹中
  • 引用程序集如下所示

用法

JSON 输入数据

  • 使用提取器,例如如下所示
    • 有关详细信息,请参阅 [2] 和 [3]

资源

[1] GitHub Azure USQL

[2]GitHub Azure USQL DataFormats

[3] U-SQL - Extract data from json-array


U-SQL 脚本

DECLARE @localDevelopment bool = true;

IF @localDevelopment == true THEN
    DROP ASSEMBLY IF EXISTS [Newtonsoft.Json];
    DROP ASSEMBLY IF EXISTS [Microsoft.Analytics.Samples.Formats];
    CREATE ASSEMBLY [Newtonsoft.Json] FROM @"/lib/Newtonsoft.Json.dll";
    CREATE ASSEMBLY [Microsoft.Analytics.Samples.Formats] FROM @"/lib/Microsoft.Analytics.Samples.Formats.dll";
    DECLARE @input string = @"/data/input.json";
    DECLARE @output string = @"/data/output.csv";
ELSE
    DECLARE @input string = @"/data/input.json";
    DECLARE @output string = @"/data/output.csv";
END;

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

//Define schema of file, must map all columns
//Names must match keys
@extractDataFirstLevel = 
    EXTRACT sessionId int,
            deviceId string,
            IoTHub string
            //Date DateTime
    FROM @input
    USING new Microsoft.Analytics.Samples.Formats.Json.JsonExtractor();

@selectData =
    SELECT sessionId,
           deviceId,
           Microsoft.Analytics.Samples.Formats.Json.JsonFunctions.JsonTuple(IoTHub)["MessageId"] AS messageId
    FROM @extractDataFirstLevel;

OUTPUT @selectData
TO @output
USING Outputters.Csv();