我正在编写一个单元测试,用于将数据附加到datalake上的CSV文件。我想通过查找附加到同一个文件的测试数据来测试它,并且一旦找到它,我想删除插入的行。基本上,一旦我找到测试数据,我的测试就会通过,但是由于测试在生产中运行,所以我必须搜索我的测试数据,即查找我插入到文件中的行并在测试运行后将其删除。如何从datalake store上的csv文件中删除一行而不使用usql?
我想在不使用usql的情况下这样做,以避免使用usql所涉及的成本因素。我们能做到的其他可能方式有哪些?
我正在编写一个单元测试,用于将数据附加到datalake上的CSV文件。我想通过查找附加到同一个文件的测试数据来测试它,并且一旦找到它,我想删除插入的行。基本上,一旦我找到测试数据,我的测试就会通过,但是由于测试在生产中运行,所以我必须搜索我的测试数据,即查找我插入到文件中的行并在测试运行后将其删除。如何从datalake store上的csv文件中删除一行而不使用usql?
我想在不使用usql的情况下这样做,以避免使用usql所涉及的成本因素。我们能做到的其他可能方式有哪些?
您不能删除文件的行(或其任何部分)。 Azure数据湖存储是一个仅追加文件系统。曾经提交的数据不能被删除或更新。如果您在生产环境中进行测试,那么您的应用程序需要了解测试行并适当地忽略它们。
另一种选择是读取U-SQL中的所有行,然后写入排除测试行的输出。
与其他大数据分析平台一样,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
移动的项目。更多细节在这里: