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

Уже пробовал предложенную опцию JSONPath, но кажется, что JSONExtractor распознает только корневой уровень. В моем случае мне приходится иметь дело с вложенной json-структурой, а также с массивом (см. Пример ниже). Любые варианты для извлечения этого без нескольких промежуточных файлов?

"relation": {
"relationid": "123456",
"name": "relation1",
"addresses": {
    "address": [{
        "addressid": "1",
        "street": "Street 1",
        "postcode": "1234 AB",
        "city": "City 1"
        },
    {
        "addressid": "2",
        "street": "Street 2",
        "postcode": "5678 CD",
        "city": "City 2"
    }]
}}

ВЫБРАТЬ реляционный, адресный, улицу, почтовый индекс, город?

 morels01 июл. 2016 г., 16:36
пожалуйста, опубликуйте свой код попробуйте, чтобы исправить.

Ответы на вопрос(1)

После исправления фрагмента JSON:

{
    "relation": {
        "relationid": "123456",
        "name": "relation1",
        "addresses": {
            "address": [{
                "addressid": "1",
                "street": "Street 1",
                "postcode": "1234 AB",
                "city": "City 1"
            }, {
                "addressid": "2",
                "street": "Street 2",
                "postcode": "5678 CD",
                "city": "City 2"
            }]
        }
    }
}

и поместив его в файл, следующий скрипт даст вам то, что вы хотите. Обратите внимание, что вам нужно пройтись вниз по структуре, чтобы перенести предметы более высокого уровня, и как только вы встретите массив, выCROSS APPLY EXPLODE это если вам нужны только те, у которых есть массив, или OUTER APPLY EXPLODE, если вы хотите строки с отсутствующими массивами.

DECLARE @input string = @"/temp/stackoverflow.json";

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

@json = 
EXTRACT relationid int, 
        name string, 
        addresses string
  FROM @input 
USING new Microsoft.Analytics.Samples.Formats.Json.JsonExtractor("relation");

@relation =
SELECT relationid,
       name,
       Microsoft.Analytics.Samples.Formats.Json.JsonFunctions.JsonTuple(addresses)["address"] AS address_array
FROM @json;

@addresses = 
SELECT relationid, 
       name, 
       Microsoft.Analytics.Samples.Formats.Json.JsonFunctions.JsonTuple(address) AS address
FROM @relation
     CROSS APPLY
        EXPLODE (Microsoft.Analytics.Samples.Formats.Json.JsonFunctions.JsonTuple(address_array).Values) AS A(address);

@result =
SELECT relationid,
       name,
       address["addressid"]AS addressid,
       address["street"]AS street,
       address["postcode"]AS postcode,
       address["city"]AS city
FROM @addresses;

OUTPUT @result
TO "/users/temp/st_out.csv"
USING Outputters.Csv();

Ваш ответ на вопрос