2016-12-08 9 views
1

У меня есть приложение U-SQL, которое работает в среде Azure Data Lake. Предполагается обработать файл, полный данных JSON, который выглядит так, за исключением того, что в реальной жизни это намного больше двух строк.JSONPath: Извлечь один dict с ключами и значениями

[ 
{"reports" : {"direction": "FWD", "drive": "STOPS", "frob_variable": 0}}, 
{"reports" : {"direction": "FWD", "drive": "CRANKS", "frob_variable": -3}} 
] 

В этом озере Данные работы, у меня есть следующие строки:

@json = 
EXTRACT direction string, drive string, frob_variable int FROM @"/input/file.json" 
USING new Microsoft.Analytics.Samples.Formats.Json.JsonExtractor("reports"); 

Когда я сбросить содержимое этой @json переменной в текстовый файл я получаю пустые значения: строки нулевой длины и ноль -значные целые числа. Я получаю правильное количество строк вывода, поэтому он должен быть итерированием по всем моим вводам.

Немного сотрясая исходный код на JsonExtractor показывает, что мое указанное значение JsonPath («reports»), кажется, возвращает ключ «reports» со встроенным dict. Если я попробую значение JsonPath для «отчетов. *», Я получаю внедренные значения (например, { "FWD", "STOPS", 0 }), но мне очень хотелось, чтобы ключи соответствовали им, поэтому SELECT direction, drive, frob_variable вернет что-то полезное.

Короче говоря, я ищу способ вытащить ключи и значения из этого внутреннего dict. Таким образом, мой желаемый результат от EXTRACT был бы строкой, чьи столбцы являются «направлением», «диском» и «frob_variable» и значения которых указаны в исходных данных. Кажется, должно быть решение JsonPath или простой обходной путь в U-SQL.

ответ

2
@extract = 
    EXTRACT 
     reports String 
    FROM @"/input/file.json" 
    USING new Microsoft.Analytics.Samples.Formats.Json.JsonExtractor(); 

@relation = 
    SELECT 
    Microsoft.Analytics.Samples.Formats.Json.JsonFunctions.JsonTuple(reports) 
    AS report 
    FROM @extract; 

@fields = 
    SELECT 
     report["direction"] AS direction, 
     report["drive"] AS drive, 
     Int32.Parse(report["frob_variable"]) AS frob 
    FROM @relation; 

Смотрите также U-SQL - Extract data from json-array

+0

Aha! Это то, что я искал. Извлечение Json-массива! – catfood

 Смежные вопросы

  • Нет связанных вопросов^_^