사용자 정의 함수(StreamInsight)

 

이 항목의 예에서는 기존 .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)  
             };  

참고 항목

이벤트 창 사용
사용자 정의 집계 및 연산자