在U-Sql中打印XML提取器中的所有元素

时间:2018-05-07 10:39:15

标签: xml extract azure-data-lake u-sql

我是U-Sql的新手并编写用于提取xml元素的代码。这是我的XML代码。

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

我试图展示所有&#34; Disposition&#34;值。但最终输出显示&#34;测试2&#34;只要。 我的代码如下。

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 :(得分:1)

我使用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节点是否包含需要通过某个分隔符拆分的文本?如果是这样,请发布更实际的样本数据。