저는 Azure Data Lake Analytics의 테이블과 함께 U-SQL을 사용하고 있습니다. C# 프로그램에서 생성 된 파티션 키 목록을 U-SQL 스크립트에 전달한 다음 스크립트가 해당 파티션의 모든 요소를 반환하도록 할 방법이 있습니까?U-SQL 스크립트에 C# 프로그램의 매개 변수를 전달할 방법이 있습니까?
0
A
답변
2
dev 상자에서 C# 코드를 실행하고 U-SQL 스크립트에 값을 전달하거나 U-SQL 스크립트에서 C# 코드를 실행 하시겠습니까? 설명이 명확하지 않습니다. 질문 제목에 따라 첫 번째 질문에 답변 해 드리겠습니다.
C# 프로그램에서 매개 변수로 값 전달 : Azure Data Factory와 달리 ADLA SDK는 아직 U-SQL 스크립트에 대한 매개 변수 모델을 제공하지 않습니다 (우리의 백 로그에 있음을 알고 있지만 http://aka.ms/adlfeedback에 요청을 제출하십시오. 이미 외부 고객 수요가 우선 순위 결정에 도움이 됨).
그러나 스크립트 시작 부분에 다음과 같은 DECLARE 문을 추가하고 매개 변수 값을 스크립트에서 변수로 참조하도록하여 매개 변수 값을 추가하는 것이 매우 쉽습니다.
DECLARE @param = new SqlArray<int>(1, 2, 3, 4); // 1,2,3,4 were calculated in your C# code (I assume you have int partition keys).
그럼 당신은 술어의 배열을 사용할 수 있어야합니다 (예를 들어, @param.Contains(partition_col)
). 그것은 (아직, 우리는 그것을위한 작업 항목을 가지고있다) 파티션 제거를 유발하지는 않을 것이다.
파티션 제거를 원할 경우 고정 된 매개 변수 값 집합을 가져야하며 IN 절에 사용해야합니다. 예를 들어, 당신이 3 개월까지 확인하려면, 당신은 쿼리 조건 작성합니다
WHERE partition_col IN (@p1, @p2, @p3);
을 그리고 당신은 아마도 필요하지 않은 매개 변수의 값을 복제, @p1, @p2
및 @p3
에 대한 정의를 앞에 추가.
그래서 모든 매개 변수 값은 미리 하드 코딩해야합니까? –
Data Lake Store 데이터베이스를 쿼리하기 위해 문자열 파티션 키 목록을 생성하는 C# 함수 (getKeys)가 있습니다. 해당 파티션 키 (즉, 하드 코드되지 않은)로 U-SQL을 사용하여 데이터베이스를 쿼리 할 수있는 방법이 있습니까? 파티션 제거가 발생하지 않는 코드는 다음과 같습니다. @results = SELECT RowKey FROM Schema.TableName WHERE USQLApp.queryHelper.getKeys(). Contains (PartitionKey) –
현재 값이 상수 일 수있는 간단한 비교 술어 (예 : 컴파일시 알려진) 파티션 분리에 사용할 수 있습니다. 매개 변수 값의 하드 코딩은 모든 스크립트가 제출시 컴파일되므로 큰 문제는 아닙니다. 따라서 제출 시간에 매개 변수 값을 추가하면 대부분 시간이 걸립니다. –