Распечатать все элементы в экстракторе XML в U-Sql - PullRequest
0 голосов
/ 07 мая 2018

Я новичок в U-Sql и пишу код для извлечения элемента xml. Вот мой XML-код.

<Dispositions>
  <Disposition>test 1</Disposition>
  <Disposition> test 2</Disposition> 
</Dispositions>

Я пытался отобразить все значения «Расположение». Но конечный результат отображает только «Тест 2». У меня есть код, как показано ниже.

DECLARE @testFile string ="Marlboro20180301000000_child.xml";     
@xmlElementRowPath= EXTRACT Disposition string
    FROM @testFile
         USING new Microsoft.Analytics.Samples.Formats.Xml.XmlExtractor("Dispositions",
         new SQL.MAP<string,string>{
{"Disposition","Disposition"} 
} 
);

@words =
        SELECT Ar.word, COUNT(*) AS count
    FROM @xmlElementRowPath
        CROSS APPLY
            EXPLODE(new SQL.ARRAY<String>( Disposition.Split(','))) AS Ar(word)
    GROUP BY Ar.word;
    //ORDER BY count DESC;
OUTPUT @words
TO "test.csv"
USING Outputters.Csv();

Я ожидал вывода как

Test 1
Test 2

Но получает только Test 2 как вывод

1 Ответ

0 голосов
/ 07 мая 2018

Я заставил это работать, используя XmlDomExtractor. Пример кода:

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

// Get the xml using sample extractor
@input = EXTRACT Disposition string
     FROM "/input/yourXML.xml"
     USING new Microsoft.Analytics.Samples.Formats.Xml.XmlDomExtractor(rowPath:"Disposition",
                             columnPaths:new SQL.MAP<string, string> { {".", "Disposition"} } );


// Do some processing here
@output = SELECT * FROM @input;


// Output
OUTPUT @output
TO "/output/output.csv"
USING Outputters.Csv();

Мои результаты:

My results

Я не уверен, зачем вам нужен метод Split - содержит ли узел xml Disposition текст, который должен быть разделен каким-либо разделителем? Если это так, пожалуйста, опубликуйте более реалистичные примеры данных.

...