2016-10-25 44 views
1

有没有什么办法让我可以在行集更新的值更新在USQL Azure的数据湖

数据:

1,apple,0 
2,check,1 
3,chec,1 

USQL脚本:

@result = EXTRACT 
ID int, 
value string, 
types int 
FROM @"TLD_BT/sacmple.txt" 
USING Extractors.Csv(); 

现在我想更新上述结果集@result set type = 1,其中值为apple

我试过下面的脚本。

UPDATE @result SET types=1 WHERE value="apple" 

,但我得到以下错误:

UPDATE ### @result SET types=1 WHERE value="apple" 

Error 
    E_CSC_USER_SYNTAXERROR 
Message 
    syntax error. Expected one of: STATISTICS 

反正由我可以更新行集中的值或者我应该围绕找出任何其他工作。

回答

4

目前在U-SQL中没有UPDATE命令,但是您可以使用条件语句创建一个新列并输出该列。您也可以使用CTAS语法来创建一个新的内部表。下面的例子:

@result = 
    EXTRACT [ID] int, 
      value string, 
      types int 
    FROM @"input/input.txt" 
    USING Extractors.Csv(); 

//UPDATE @result SET types=1 WHERE value="apple" 
@output = 
    SELECT [ID] AS id, 
      value, 
      value == "apple"? 1 : types AS types 
    FROM @result; 

// CTAS 
CREATE TABLE IF NOT EXISTS dbo.interimResult 
(
    INDEX cdx_Result 
    CLUSTERED(id) 
    DISTRIBUTED BY 
    ROUND ROBIN 
) 
AS 
SELECT [ID] AS id, 
     value, 
     value == "apple"? 1 : types AS types 
FROM @result; 


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

希望是有道理的。另见这里:U-SQL DML Statements

+4

目前ADLA的U-SQL实现是仅附加存储(与大多数大数据存储一样)。因此,正如wBob概述的那样,如果您想进行更改或跟踪“增量”,则必须“回收”数据。 –

+0

谢谢你们。 – The6thSense

1

如果你想更新同一个表,我们创建一个新的分区并插入Unchanged和新记录。通过这种方式,新分区将始终具有最新的数据集