사용자 정의 함수
이 항목의 예에서는 기존 .NET 함수 또는 UDF(사용자 정의 함수)에 대한 메서드 호출을 사용하여 StreamInsight LINQ 연산자의 가능한 식을 확장하는 방법을 보여 줍니다.
UDF를 사용하면 복잡성에 관계없이 모든 식을 작성할 수 있으며 일반 식을 사용할 수 있는 모든 위치(필터 조건자, 프로젝션, 조인 조건자 등)에 이러한 식을 사용할 수 있습니다. 그러나 각 이벤트에 대해 이러한 메서드 호출을 계산합니다. 사용자 정의 함수는 런타임에 어댑터가 제공 및 사용되는 것과 같은 방식으로 StreamInsight 서버에서 액세스 가능한 어셈블리로 컴파일해야 합니다.
매개 변수 및 UDF 반환 값은 StreamInsight 기본 유형 중 하나여야 합니다. 또한 UDF에는 culture 관련 매개 변수도 사용할 수 있습니다.
사용 사례
다음 사용 사례에서는 사용자 정의 함수를 사용하여 StreamInsight 쿼리의 기능을 확장하는 방법을 보여 줍니다.
사용자 정의 필터
사용자 정의 필터 연산자를 만들어 들어오는 이벤트를 확인하고 이벤트를 출력으로 전달하거나 필터링을 통해 제외할 수 있습니다. 이러한 사용자 정의 필터는 사용자 정의 데이터를 확인할 수 있으며 이벤트 필터링 프로세스에 복잡한 논리 또는 특수 논리를 포함할 수 있습니다.
사용자 정의 프로젝트
사용자 정의 필터와 비슷한 사용자 정의 프로젝트 식은 새로운 페이로드 값을 생성할 수 있습니다. 이 값을 계산하는 방법은 StreamInsight에서 제공되는 식 기능의 범위를 벗어나므로 설명하지 않습니다.
예
다음 예에서는 페이로드 필드에 함수 MyFunc를 적용하여 필터 식에 사용자 정의 계산을 사용합니다.
// Assuming the following input event type:
public class MyPayload
{
public int id;
public int a;
public int b;
public double value;
}
var filteredStream = from e in stream
where e.value > MyFunc(e.a * e.b)
select e;
다음 예에서는 필터 조건자에 사용자 정의 함수 MyFunctions.valThreshold를 지정합니다.
var filteredStream = from e in stream
where e.value < MyFunctions.valThreshold(e.id)
select e;
다음 예에서는 단일 매개 변수를 사용하여 값을 반환하는 사용자 정의 함수 valThreshold를 사용합니다.
public class MyFunctions
{
public static int valThreshold(int id)
{
switch (id)
{
case 1:
return 15;
case 2:
return 11;
case 3:
return 18;
default:
return 0;
}
}
}
사용자 정의 프로젝트 함수는 다음 예와 같이 프로젝션의 다른 식처럼 사용할 수 있습니다.
var result = from e in stream
select new { location = MyFunctions.Lookup(e.id) };
사용자 정의 함수는 기본 제공 기본 유형 외에 culture 관련 정보도 매개 변수로 사용할 수 있습니다. 허용되는 유형은 다음과 같습니다.
CultureInfo
StringComparison
CompareOptions
다음 예에서는 culture 관련 정보를 UDF에 제공하는 방법을 보여 줍니다.
// Assuming the following input event type:
public class MyPayload
{
public int id;
public string name;
}
var result = from e in stream
select new { location = MyFunctions.Lookup2(
e.name,
new CultureInfo("en-US"),
CompareOptions.IgnoreCase)
};
다음 예와 같이 도우미 함수 CepUtility.GetEventFieldCulture를 사용하여 입력 스트림의 이벤트 필드에서 culture 정보를 가져올 수도 있습니다.
var result = from e in stream
select new { location = MyFunctions.Lookup2(
e.name,
CepUtility.GetEventFieldCulture(e.name),
CompareOptions.IgnoreCase)
};