USQL 中的文件存在函数
File Exists function in USQL
我正在 USQL 中做一个简单的测试来检查文件是否存在,然后根据它执行合并操作。但是,我似乎无法做到这一点。你能帮我解决这个问题吗?让我知道哪里出错了。
DECLARE @InputFile1 string = "/MergeTest/FINAL/Check1.csv";
DECLARE @InputFile2 string = "/MergeTest/STAGING/Test-{*}.json";
DECLARE @OutputFile1 string = "/MergeTest/FINAL/Check1.csv";
IF (FILE.EXISTS(@InputFile1))
THEN
@Final = EXTRACT [ID] int,
[Name] string,
[City] string,
[Country] string
FROM @InputFile1
USING Extractors.Csv(skipFirstNRows:1);
END;
@Delta = EXTRACT [ID] int,
[Name] string,
[City] string,
[Country] string
FROM @InputFile2
USING new JsonExtractor("$.DEP[*]");
以下代码在 IF 条件下不起作用。我收到错误消息:@FileExists 已声明为标量变量。如果这是错误的实现方式,那么正确的方法是什么?
@FileExists = SELECT (FILE.EXISTS(@InputFile1)) AS exists_good FROM (VALUES (1)) AS T(dummy);
IF ####@FileExists THEN
@result = SELECT * FROM @Delta
UNION ALL
SELECT * FROM Final AS T1
ANTISEMIJOIN (SELECT * FROM @Delta) AS T2
ON T1.[ID] == T2.[ID];
ELSE
@result = SELECT * FROM @Delta;
END;
OUTPUT @result
TO @OutputFile1
USING Outputters.Csv(outputHeader:true);
谢谢,
苏妮莎
只写这个:
IF FILE.EXISTS(@InputFile1) THEN ...
当您使用 SELECT
分配给它时,这基本上是一个行集,不能像标量变量一样对待。
我还在您的示例中注意到 @inputFile1
和 @outputFile1
具有相同的文件名。我相信这会导致问题。确保它们在您的真实示例中是不同的。
我正在 USQL 中做一个简单的测试来检查文件是否存在,然后根据它执行合并操作。但是,我似乎无法做到这一点。你能帮我解决这个问题吗?让我知道哪里出错了。
DECLARE @InputFile1 string = "/MergeTest/FINAL/Check1.csv";
DECLARE @InputFile2 string = "/MergeTest/STAGING/Test-{*}.json";
DECLARE @OutputFile1 string = "/MergeTest/FINAL/Check1.csv";
IF (FILE.EXISTS(@InputFile1))
THEN
@Final = EXTRACT [ID] int,
[Name] string,
[City] string,
[Country] string
FROM @InputFile1
USING Extractors.Csv(skipFirstNRows:1);
END;
@Delta = EXTRACT [ID] int,
[Name] string,
[City] string,
[Country] string
FROM @InputFile2
USING new JsonExtractor("$.DEP[*]");
以下代码在 IF 条件下不起作用。我收到错误消息:@FileExists 已声明为标量变量。如果这是错误的实现方式,那么正确的方法是什么?
@FileExists = SELECT (FILE.EXISTS(@InputFile1)) AS exists_good FROM (VALUES (1)) AS T(dummy);
IF ####@FileExists THEN
@result = SELECT * FROM @Delta
UNION ALL
SELECT * FROM Final AS T1
ANTISEMIJOIN (SELECT * FROM @Delta) AS T2
ON T1.[ID] == T2.[ID];
ELSE
@result = SELECT * FROM @Delta;
END;
OUTPUT @result
TO @OutputFile1
USING Outputters.Csv(outputHeader:true);
谢谢, 苏妮莎
只写这个:
IF FILE.EXISTS(@InputFile1) THEN ...
当您使用 SELECT
分配给它时,这基本上是一个行集,不能像标量变量一样对待。
我还在您的示例中注意到 @inputFile1
和 @outputFile1
具有相同的文件名。我相信这会导致问题。确保它们在您的真实示例中是不同的。