Azure 数据湖 - 条件

Azure Data Lake - Conditions

我想使用 if-else 语句来决定我必须在什么位置导出数据。 我的情况是:

  1. 我从 azure blob 存储中提取了几个文件(可能没有文件!!)。
  2. 我计算文件集中的记录数。
  3. 如果记录数大于 20,那么我将文件导出到特定的报告位置
  4. 如果文件集中没有记录,我必须将虚拟空文件输出到不同的位置,因为我不想用空报告替换现有报告。

解决方案可能是IF..ELSE条件。问题是,如果我计算记录数,我得到行集变量,我无法将它与标量变量进行比较。

@RECORDS =
SELECT COUNT(id) AS IdsCount
FROM @final; 


IF @RECORDS <= 20 THEN //generate dummy empty file 
    OUTPUT @final_result
    TO @EMPTY_OUTPUT_FILE
    USING Outputters.Text(delimiter : '\t', quoting : true, encoding : Encoding.UTF8, outputHeader : true, dateTimeFormat : "s", nullEscape : "NULL");
ELSE 
    OUTPUT @final_result
    TO @OUTPUT_FILE
    USING Outputters.Text(delimiter : '\t', quoting : true, encoding : Encoding.UTF8, outputHeader : true, dateTimeFormat : "s", nullEscape : "NULL");
END;

U-SQL的IF语句目前只在编译时使用。所以你可以做类似

的事情
IF FILE.EXIST() THEN

但是如果你想根据记录的数量输出不同的文件,你必须在 SDK/CLI 级别编写它:

第一个作业写入一个临时文件输出(可能还有一个包含行数的状态文件)。然后检查(例如在 Powershell 中)文件是否为空(或您要使用的任何条件),如果不是,则复制结果,否则创建空输出文件。