다음을 통해 공유


프로젝션

이 항목의 예에서는 개별 이벤트를 출력 이벤트로 변환하는 작업의 일환으로 개별 이벤트에 대해 특정 계산을 수행하는 방법을 보여 줍니다. 이러한 계산은 프로젝션을 사용하여 수행합니다. 프로젝션은 CepStream<T1> 스트림에 대해 작동하며 CepStream<T2> 스트림을 새로 생성합니다. 여기서 CepStream<T>는 T 유형 페이로드를 포함하는 Event 스트림입니다. LINQ에서 SELECT 절을 사용할 때는 항상 프로젝션이 수행됩니다. 프로젝션은 아래에서 설명하는 것처럼 새 유형을 암시적으로 만들거나 정의된 이벤트 유형을 명시적으로 참조할 수 있습니다.

다음 예에서는 쿼리에 정의된 프로젝트 식에 따라 TestEventStream 스트림의 모든 이벤트를 새 이벤트로 프로젝션합니다. 쿼리에서 i 및 f 필드에 2를 곱합니다. 이들 값이 새 이벤트로 프로젝션됩니다. 여기서 새 이벤트 유형은 익명 유형이며 프로젝트 식으로 작성된 필드 할당을 통해 암시적으로 정의됩니다.

// Assuming the following input event type:
public class MyPayload
{
    public int i;
    public float f;
}

var queryProject = from c in TestEventStream
                   select new {i = c.i * 2, f = c.f * 2};

다음 예에서는 명시적으로 선언된 MeterWattage 이벤트 유형을 사용하여 MeterReading 유형의 입력 스트림에 있는 모든 이벤트를 realValueStream 스트림의 새 이벤트로 프로젝션합니다. InputStream 스트림에 있는 각 이벤트의 consumption 필드는 double CLR 유형으로 변환되며, 이 값을 10으로 나눈 다음 MeterWattage 유형의 wattage 필드에 할당합니다.

public class MeterReading
{
    public int consumption;
}

public class MeterWattage
{
    public double wattage;
}

[…]

var realValueStream = from e in InputStream
                      select new MeterWattage {wattage = (double)e.consumption / 10};

프로젝트 식은 유형의 생성자를 사용할 수 없으며, 항상 MemberInit 식(중괄호 내의 이벤트 필드 할당)을 통해 필드 할당을 새 유형(암시적/명시적)으로 지정해야 합니다. 그러나 다음 예와 같이 기본 유형의 단일 필드를 프로젝션할 때는 이 구문이 필요하지 않습니다.

public class MeterReading
{
    public int consumption;
}

public class MeterWattage
{
    public double wattage;
}

[…]

var realValueStream = from e in InputStream
                      select (double)e.consumption / 10;

이 프로젝션은 기본 double 유형의 CepStream을 암시적으로 생성합니다.

명시적 유형을 사용하는 경우 각 필드 또는 속성을 프로젝트 식에서 초기화해야 합니다.

참고 항목

개념

StreamInsight 서버 개념