If statement Azure数据湖-条件

If statement Azure数据湖-条件,if-statement,aggregate,azure-data-lake,u-sql,If Statement,Aggregate,Azure Data Lake,U Sql,我想使用if-else语句来决定在什么位置导出数据。 我的情况是: 我从azure blob存储中提取了几个文件(可能没有文件!!) 我计算文件集中的记录数 如果记录数>20,则我将文件导出到特定的报告位置 若文件集中并没有记录,我必须将伪空文件输出到不同的位置,因为我不想用空报告替换现有报告 解决方案可能是IF..ELSE确认。问题是,如果我计算记录数,我得到的是行集变量,而我无法将其与标量变量进行比较 @RECORDS = SELECT COUNT(id) AS IdsCount FROM

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

  • 我从azure blob存储中提取了几个文件(可能没有文件!!
  • 我计算文件集中的记录数
  • 如果记录数>20,则我将文件导出到特定的报告位置
  • 若文件集中并没有记录,我必须将伪空文件输出到不同的位置,因为我不想用空报告替换现有报告
  • 解决方案可能是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;
    
    @记录=
    选择计数(id)作为IdsCount
    来自@final;
    
    IF@RECORDSU-SQL的IF语句当前仅在编译期间使用。所以你可以做一些像

    IF FILE.EXIST() THEN
    
    但是,如果要根据记录数输出不同的文件,则必须在SDK/CLI级别写入:


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

    您尝试的是将行集变量用作标量变量。这在usql中目前还不可能实现。请参阅和问题。