Unit testing 如何在不使用usql的情况下从datalake store上的csv文件中删除一行?
我正在编写一个单元测试,用于将数据附加到datalake上的CSV文件中。我想通过查找附加到同一文件的测试数据来测试它,一旦找到,我想删除插入的行。基本上,一旦我找到了测试数据,我的测试就会通过,但由于测试是在生产环境中运行的,所以我必须搜索我的测试数据,即查找插入到文件中的行,并在测试运行后将其删除Unit testing 如何在不使用usql的情况下从datalake store上的csv文件中删除一行?,unit-testing,azure,azure-data-lake,Unit Testing,Azure,Azure Data Lake,我正在编写一个单元测试,用于将数据附加到datalake上的CSV文件中。我想通过查找附加到同一文件的测试数据来测试它,一旦找到,我想删除插入的行。基本上,一旦我找到了测试数据,我的测试就会通过,但由于测试是在生产环境中运行的,所以我必须搜索我的测试数据,即查找插入到文件中的行,并在测试运行后将其删除 为了避免使用usql所涉及的成本因素,我希望在不使用usql的情况下进行此操作。我们还有什么其他可能的方法可以做到这一点?与其他大数据分析平台一样,ADLA/U-SQL本身不支持附加到文件。您可以
为了避免使用usql所涉及的成本因素,我希望在不使用usql的情况下进行此操作。我们还有什么其他可能的方法可以做到这一点?与其他大数据分析平台一样,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移动项目。详情如下:
不能从文件中删除行或任何部分。Azure data lake store是一个仅附加的文件系统。数据一旦提交就无法擦除或更新。如果您在生产环境中进行测试,您的应用程序需要知道测试行并适当地忽略它们 另一种选择是读取U-SQL中的所有行,然后写入不包括测试行的输出