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

Print all element in XML extractor in U-Sql

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

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

我试图显示所有 "Disposition" 值。但最终输出仅显示 "Test 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 作为输出

我使用 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();

我的结果:

我不确定您为什么需要 Split 方法 - xml Disposition 节点是否包含需要由某个分隔符分隔的文本?如果是这样,请post一些更真实的示例数据。