2017-09-26 84 views
1

我有一个返回USQL阵列平CSV

SQL.ARRAY<SQL.ARRAY<string>> 

我需要拼合这一个csv,没有得到正确的结果集。

这里是什么样子以U-SQL,如果我创建阵列,该阵列:

DECLARE @boardA1 SQL.ARRAY<string> = new SQL.ARRAY<string>{"111", "PASS", "0"}; 
DECLARE @boardA2 SQL.ARRAY<string> = new SQL.ARRAY<string>{"222", "PASS", "0"}; 
DECLARE @boardA3 SQL.ARRAY<string> = new SQL.ARRAY<string>{"333", "PASS", "0"}; 

@boards = 
    SELECT * 
    FROM(
     VALUES 
     (
      new SQL.ARRAY<SQL.ARRAY<string>>{@boardA1, @boardA2, @boardA3} 
     ) 
      ) AS t(boards); 

@result = 
    SELECT n.value AS Board 
    FROM @boards 
     CROSS APPLY 
      EXPLODE(boards) AS c(value) 
     CROSS APPLY 
      EXPLODE(c.value) AS n(value); 


OUTPUT @result 
TO "result1.csv" 
USING Outputters.Csv(); 

我得到这样的输出:

"111" 
"PASS" 
"0" 
"222" 
"PASS" 
"0" 
"333" 
"PASS" 
"0" 

,但我想这样的输出:

"111","PASS","0" 
"222","PASS","0" 
"333","PASS","0" 

我在做什么错?任何输入赞赏!

+0

只是对测试数据的一种观察,数组中的每个“列”都是相同的结构,表明它实际上应该是一行。这只是你的样本数据的一个神器吗? – wBob

回答

1

@result2 = SELECT "\"" + string.Join(",", c.board).Replace(",", "\",\"") + "\"" AS Boards FROM @boards CROSS APPLY EXPLODE(boards) AS c(board);

OUTPUT @result2 TO "result2.csv" USING Outputters.Csv(quoting: false);

ARRAY<ARRAY<string>>下的例子从Explode (U-SQL)

+0

我早些时候尝试过,但它使逗号分隔值的一个字符串,而不是逗号分隔的字符串。它制作了这个“111,PASS,0”而不是这个“111”,“PASS”,“0” – Anders

0

我想这个您要使用的阵列的顺序做,例如

@result = 
    SELECT 
     x.board[0] AS a, 
     x.board[1] AS b, 
     x.board[2] AS c   
    FROM @boards 
     CROSS APPLY 
      EXPLODE(boards) AS x(board); 

通过这种方法,你可以明确指定列名称,quoting表现为exp ected。这种方法的缺点是你必须知道数组中有多少“列”。