2017-10-05 1 views
1

if-else 문을 사용하여 데이터를 내보낼 위치를 결정하고 싶습니다. 내 경우는 다음과 같습니다 나는 푸른 BLOB 저장소에서 여러 파일 (이 파일이 없으면 가능합니다!)의 압축을Azure 데이터 레이크 - 조건

  1. .
  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; 
+0

행 집합 변수를 스칼라 변수로 사용하는 것입니다. 지금은 usql에서는 불가능합니다. [this] (https://stackoverflow.com/q/40094944/2417043) 및 [this] (https://stackoverflow.com/q/41394628/2417043) 질문을 참조하십시오. – arghtype

답변

1

U-SQL의 IF 문은 현재 컴파일하는 동안에만 사용됩니다. 그래서 당신은

IF FILE.EXIST() THEN 

처럼 뭔가를 할 수 있지만 레코드의 수에 따라 출력을 다른 파일을 원하는 경우는 SDK/CLI 수준에서 작성해야합니다 : 첫 번째 작업이 온도를 기록

파일 출력 (및 행 수를 포함하는 상태 파일 일 수도 있습니다). 그런 다음 (예를 들어 Powershell에서) 파일이 비어 있는지 (또는 사용할 기준) 확인하고 그렇지 않은 경우 결과를 복사합니다. 그렇지 않으면 빈 출력 파일을 만듭니다.

관련 문제