Как использовать форматы файлов JSON в контексте Azure Data Lake Analytics и соответственно usql - PullRequest
0 голосов
/ 26 июня 2018

У меня есть вход JSON, который выглядит как

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

Как извлечь значения sessionId, deviceId и MessageId в сценарии Azure Datalake Analytics usql?

1 Ответ

0 голосов
/ 26 июня 2018

Как использовать форматы файлов JSON в контексте Azure Data Lake Analytics соответственно 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] иd [3]

Ресурсы

[1] GitHub Azure USQL

[2] GitHub Azure USQL DataFormats

[3] U-SQL - извлечение данных из массива json


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();
...