데이터 흐름 매핑의 조회 변환Lookup transformation in mapping data flow

적용 대상: Azure Data Factory Azure Synapse Analytics

조회 변환을 사용하여 데이터 흐름 스트림의 다른 원본에서 데이터를 참조할 수 있습니다.Use the lookup transformation to reference data from another source in a data flow stream. 조회 변환은 일치하는 데이터의 열을 원본 데이터에 추가합니다.The lookup transformation appends columns from matched data to your source data.

조회 변환은 왼쪽 우선 외부 조인과 유사합니다.A lookup transformation is similar to a left outer join. 기본 스트림의 모든 행이 조회 스트림의 추가 열과 함께 출력 스트림에 존재하게 됩니다.All rows from the primary stream will exist in the output stream with additional columns from the lookup stream.

구성Configuration

스크린샷에는 다음 텍스트에 설명 된 레이블이 있는 조회 설정 탭이 표시 됩니다.Screenshot shows the Lookup settings tab with the labels described in the following text.

기본 스트림: 들어오는 데이터 스트림입니다.Primary stream: The incoming stream of data. 이 스트림은 조인의 왼쪽에 해당합니다.This stream is equivalent to the left side of a join.

조회 스트림: 기본 스트림에 추가되는 데이터입니다.Lookup stream: The data that is appended to the primary stream. 추가되는 데이터는 조회 조건에 따라 결정됩니다.Which data is added is determined by the lookup conditions. 이 스트림은 조인의 오른쪽에 해당합니다.This stream is equivalent to the right side of a join.

여러 행 일치: 사용하도록 설정하면 기본 스트림에서 여러 일치 항목이 있는 행이 여러 행을 반환합니다.Match multiple rows: If enabled, a row with multiple matches in the primary stream will return multiple rows. 그러지 않으면 '일치 기준' 조건에 따라 단일 행만 반환됩니다.Otherwise, only a single row will be returned based upon the 'Match on' condition.

일치 기준: '여러 행 일치'를 선택하지 않은 경우에만 표시됩니다.Match on: Only visible if 'Match multiple rows' is not selected. 임의 행, 첫 번째 일치 항목 또는 마지막 일치 항목에 일치할지를 선택합니다.Choose whether to match on any row, the first match, or the last match. 가장 빠르게 실행되는 임의 행이 권장됩니다.Any row is recommended as it executes the fastest. 첫 번째 행 또는 마지막 행을 선택한 경우 정렬 조건을 지정해야 합니다.If first row or last row is selected, you'll be required to specify sort conditions.

조회 조건: 일치시킬 열을 선택합니다.Lookup conditions: Choose which columns to match on. 같음 조건이 충족되면 행이 일치하는 것으로 간주됩니다.If the equality condition is met, then the rows will be considered a match. 데이터 흐름 식 언어를 사용하여 값을 추출하려면 '계산 열'을 가리키고 선택합니다.Hover and select 'Computed column' to extract a value using the data flow expression language.

두 스트림의 모든 열이 출력 데이터에 포함됩니다.All columns from both streams are included in the output data. 중복되거나 불필요한 열을 삭제하려면 조회 변환 후 선택 변환을 추가합니다.To drop duplicate or unwanted columns, add a select transformation after your lookup transformation. 싱크 변환에서 열을 삭제하거나 이름을 바꿀 수도 있습니다.Columns can also be dropped or renamed in a sink transformation.

비동등 조인Non-equi joins

조회 조건에서 같지 않음(! =) 또는 보다 큼(>)과 같은 조건부 연산자를 사용하려면 두 열 사이의 연산자 드롭다운을 변경합니다.To use a conditional operator such as not equals (!=) or greater than (>) in your lookup conditions, change the operator dropdown between the two columns. 비동등 조인에서는 최적화 탭에서 고정 브로드캐스팅을 사용하여 두 스트림 중 하나 이상을 브로드캐스트해야 합니다.Non-equi joins require at least one of the two streams to be broadcasted using Fixed broadcasting in the Optimize tab.

비동등 조회Non-equi lookup

일치하는 행 분석Analyzing matched rows

조회 변환 후 isMatch() 함수를 사용하여 조회가 개별 행과 일치하는지 여부를 확인할 수 있습니다.After your lookup transformation, the function isMatch() can be used to see if the lookup matched for individual rows.

조회 패턴Lookup pattern

이 패턴의 예는 조건부 분할 변환을 사용하여 isMatch() 함수에서 분할을 수행하는 것입니다.An example of this pattern is using the conditional split transformation to split on the isMatch() function. 위의 예제에서는 일치하는 행이 위쪽 스트림을 통과하고 일치하지 않는 행이 NoMatch 스트림을 통해 흐릅니다.In the example above, matching rows go through the top stream and non-matching rows flow through the NoMatch stream.

조회 조건 테스트Testing lookup conditions

디버그 모드에서 데이터 미리 보기를 사용하여 조회 변환을 테스트할 때 알려진 소규모 데이터 세트를 사용합니다.When testing the lookup transformation with data preview in debug mode, use a small set of known data. 대규모 데이터 세트에서 행을 샘플링하는 경우 테스트를 위해 읽을 행과 키를 예측할 수 없습니다.When sampling rows from a large dataset, you can't predict which rows and keys will be read for testing. 따라서 결과가 명확하지 않으므로 조인 조건이 일치하는 항목을 반환하지 않을 수 있습니다.The result is non-deterministic, meaning that your join conditions may not return any matches.

브로드캐스트 최적화Broadcast optimization

브로드캐스트 조인Broadcast Join

조인, 조회 및 있음 변환에서 하나 또는 두 데이터 스트림이 작업자 노드 메모리에 맞는 경우 브로드캐스팅 를 사용하도록 설정하여 성능을 최적화할 수 있습니다.In joins, lookups and exists transformation, if one or both data streams fit into worker node memory, you can optimize performance by enabling Broadcasting. 기본적으로 spark 엔진은 한쪽에서 브로드캐스트할지 여부를 자동으로 결정합니다.By default, the spark engine will automatically decide whether or not to broadcast one side. 브로드캐스트할 쪽을 수동으로 선택하려면 고정 을 선택합니다.To manually choose which side to broadcast, select Fixed.

조인이 실행되는 동안 시간 제한 오류가 발생하는 경우에만 해제 옵션을 통해 브로드캐스팅을 사용하지 않도록 설정하는 것이 좋습니다.It's not recommended to disable broadcasting via the Off option unless your joins are running into timeout errors.

캐시된 조회Cached lookup

동일한 원본에서 여러 개의 더 작은 조회를 수행 하는 경우 캐시 된 싱크와 조회는 조회 변환 보다 더 나은 사용 사례가 될 수도 있습니다.If you're doing multiple smaller lookups on the same source, a cached sink and lookup maybe a better use case than the lookup transformation. 캐시 싱크가 데이터 저장소에서 max 값을 조회 하 고 오류 코드를 오류 메시지 데이터베이스와 일치 시킬 수 있는 일반적인 예입니다.Common examples where a cache sink may be better are looking up a max value on a data store and matching error codes to an error message database. 자세한 내용은 캐시 싱크캐시 된 조회에 대해 알아봅니다.For more information, learn about cache sinks and cached lookups.

데이터 흐름 스크립트Data flow script

구문Syntax

<leftStream>, <rightStream>
    lookup(
        <lookupConditionExpression>,
        multiple: { true | false },
        pickup: { 'first' | 'last' | 'any' },  ## Only required if false is selected for multiple
        { desc | asc }( <sortColumn>, { true | false }), ## Only required if 'first' or 'last' is selected. true/false determines whether to put nulls first
        broadcast: { 'auto' | 'left' | 'right' | 'both' | 'off' }
    ) ~> <lookupTransformationName>

예제Example

스크린샷에는 다음 코드에 대 한 조회 설정 탭이 표시 됩니다.Screenshot shows the Lookup settings tab for the following code.

위의 조회 구성에 대한 데이터 흐름 스크립트는 아래 코드 조각에 나와 있습니다.The data flow script for the above lookup configuration is in the code snippet below.

SQLProducts, DimProd lookup(ProductID == ProductKey,
    multiple: false,
    pickup: 'first',
    asc(ProductKey, true),
    broadcast: 'auto')~> LookupKeys

다음 단계Next steps