biml을 사용할 때 SSIS에서 병합 조인에 대한 입력 구성 요소를 정렬하려면 어떻게해야합니까?

루이 돈트
<Biml xmlns="http://schemas.varigence.com/biml.xsd">
<Packages>
    <Package Name="Extraction_RecordCount" ConstraintMode="Parallel">
        <Tasks>
            <ExecuteSQL Name="Extraction_RecordCount" ConnectionName="Target">
                <DirectInput> <![CDATA[ Truncate table CMC.Extraction_RecordCount ]]> </DirectInput>
            </ExecuteSQL>
            <Dataflow Name="Fill Extraction_RecordCount">
                <PrecedenceConstraints>
                    <Inputs>
                        <Input OutputPathName="Extraction_RecordCount.Output" />
                    </Inputs>
                </PrecedenceConstraints>
                <Transformations>
                    <OleDbSource Name="ExtractedTables" ConnectionName="Target" >
                        <DirectInput>
                            <![CDATA[
                            SELECT cast( sysobjects.NAME as nvarchar(128)) as TableName 
                                ,sysindexes.Rows as #Rows 
                            FROM sysobjects 
                            INNER JOIN sysindexes ON sysobjects.id = sysindexes.id 
                            INNER JOIN ( SELECT c.table_name ,c.table_schema FROM information_schema.columns c GROUP BY c.table_name ,c.table_schema) c ON c.table_name = sysobjects.NAME 
                            WHERE type = 'U' 
                                AND sysindexes.IndId < 2 
                                AND c.table_schema = 'EXT' 
                            ORDER BY TableName, #Rows
                            ]]>
                        </DirectInput>
                    </OleDbSource>
                    <OleDbSource Name="BackOffice" ConnectionName="Source" >
                        <DirectInput> <![CDATA[ select TABLE_NAME  , cast(NUM_ROWS as int) as NUM_ROWS from ALL_ALL_TABLES ORDER BY TABLE_NAME, NUM_ROWS]]> </DirectInput>
                    </OleDbSource>
                    <MergeJoin Name="Join Extracted Tables w BACKOFFICE" JoinType="InnerJoin">
                        <LeftInputPath OutputPathName="ExtractedTables.Output">
                            <Columns>
                                <Column SourceColumn="TableName" SortKeyPosition="1"/>
                                <Column SourceColumn="#Rows" SortKeyPosition="2"/>
                            </Columns>
                        </LeftInputPath>
                        <RightInputPath OutputPathName="BackOffice.Output">
                            <Columns>
                                <Column SourceColumn="TABLE_NAME" SortKeyPosition="1"/>
                                <Column SourceColumn="NUM_ROWS" SortKeyPosition="2" />
                            </Columns>
                        </RightInputPath>
                        <JoinKeys>
                            <JoinKey LeftColumn="TableName" RightColumn="TABLE_NAME" />
                        </JoinKeys>
                    </MergeJoin>
                    <OleDbDestination Name="Extraction_RecordCount" ConnectionName="Target">
                        <ExternalTableOutput Table="CMC.Extraction_RecordCount"/>
                    </OleDbDestination>
                </Transformations>
            </Dataflow>
        </Tasks>
    </Package>
</Packages>

이 코드는 'Extraction_RecordCount'패키지를 생성하지만 'Merge Join'구성 요소에 의해 두 소스의 대치가 정렬되어야한다는 오류가 발생합니다. 'IsSorted'= 'True'를 수동으로 설정하고 'SortKeyPosition'을 설정하면 문제가 일시적으로 해결됩니다.

정렬 구성 요소 삽입도 작동하지 않습니다.

Billinkc

병합 조인에 대한 요구 사항은 소스를 정렬하는 것입니다. 현재 코드에서 지정하는 것은 병합 조인 변환의 출력이 정렬된다는 것입니다. 대신 병합 조인에 대한 입력이 정렬되었음을 나타내려고합니다.

소스 데이터가 정렬되어 있으며 둘 다 명시 적 ORDER BY작업이 있습니다. 누락 된 것은 소스 구성 요소가 정렬 된 사양입니다.

                <OleDbSource Name="ExtractedTables" ConnectionName="Target" >
                    <DirectInput>
                        <![CDATA[
                        SELECT cast( sysobjects.NAME as nvarchar(128)) as TableName 
                            ,sysindexes.Rows as #Rows 
                        FROM sysobjects 
                        INNER JOIN sysindexes ON sysobjects.id = sysindexes.id 
                        INNER JOIN ( SELECT c.table_name ,c.table_schema FROM information_schema.columns c GROUP BY c.table_name ,c.table_schema) c ON c.table_name = sysobjects.NAME 
                        WHERE type = 'U' 
                            AND sysindexes.IndId < 2 
                            AND c.table_schema = 'EXT' 
                        ORDER BY TableName, #Rows
                        ]]>
                    </DirectInput>
                     <Columns>
                         <Column SourceColumn="TableName" SortKeyPosition="1"></Column>
                         <Column SourceColumn="#Rows" SortKeyPosition="2"></Column>
                     </Columns>
                </OleDbSource>
                <OleDbSource Name="BackOffice" ConnectionName="Source" >
                    <DirectInput> <![CDATA[ select TABLE_NAME  , cast(NUM_ROWS as int) as NUM_ROWS from ALL_ALL_TABLES ORDER BY TABLE_NAME, NUM_ROWS]]> </DirectInput>
                        <Columns>
                            <Column SourceColumn="TABLE_NAME" SortKeyPosition="1"></Column>
                            <Column SourceColumn="NUM_ROWS" SortKeyPosition="2"></Column>
                        </Columns>
                </OleDbSource>

#Rows첫 번째 쿼리 의 실제 이름 이 유효 할 것이라고 100 %는 아니지만 중요한 것은 열 이름으로 정렬 된 것으로 표시하는 것입니다.

이 DBA.StackExchange.com 질문에 대한 내 대답에는 완전한 종단 간 병합 조인 예제가 있습니다.

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

Related 관련 기사

뜨겁다태그

보관