2017-08-01 33 views
0

我正在编写一个单元测试,用于将数据附加到datalake上的CSV文件。我想通过查找附加到同一个文件的测试数据来测试它,并且一旦找到它,我想删除插入的行。基本上,一旦我找到测试数据,我的测试就会通过,但是由于测试在生产中运行,所以我必须搜索我的测试数据,即查找我插入到文件中的行并在测试运行后将其删除。如何从datalake store上的csv文件中删除一行而不使用usql?

我想在不使用usql的情况下这样做,以避免使用usql所涉及的成本因素。我们能做到的其他可能方式有哪些?

回答

1

您不能删除文件的行(或其任何部分)。 Azure数据湖存储是一个仅追加文件系统。曾经提交的数据不能被删除或更新。如果您在生产环境中进行测试,那么您的应用程序需要了解测试行并适当地忽略它们。

另一种选择是读取U-SQL中的所有行,然后写入排除测试行的输出。

0

与其他大数据分析平台一样,ADLA/U-SQL不支持附加到文件本身。你可以做的是采取一个输入文件,添加一些内容,它(例如,通过U型SQL)并写入为另一个文件,例如一个简单的例子:如果你想进一步控制

DECLARE @inputFilepath string = "input/input79.txt"; 
DECLARE @outputFilepath string = "output/output.txt"; 


@input = 
    EXTRACT col1 int, 
      col2 DateTime, 
      col3 string 
    FROM @inputFilepath 
    USING Extractors.Csv(skipFirstNRows : 1); 


@output = 
    SELECT * 
    FROM @input 

    UNION ALL 

    SELECT * 
    FROM(
     VALUES 
     (
      2, 
      DateTime.Now, 
      "some string" 
     )) AS x (col1, col2, col3); 


OUTPUT @output 
TO @outputFilepath 
USING Outputters.Csv(quoting : false, outputHeader : true); 

,你可以通过PowerShell的SDK做一些事情,如测试项目存在:

Test-AdlStoreItem -Account $adls -Path "/data.csv" 

Move-AzureRmDataLakeStoreItem移动的项目。更多细节在这里:

Manage Azure Data Lake Analytics using Azure PowerShell

相关问题