데이터 흐름 태스크Data Flow Task

데이터 흐름 태스크는 원본과 대상 사이에 데이터를 이동하는 데이터 흐름 엔진을 캡슐화하며, 이를 통해 사용자는 데이터 이동 시 데이터를 변환, 정리 및 수정할 수 있습니다.The Data Flow task encapsulates the data flow engine that moves data between sources and destinations, and lets the user transform, clean, and modify data as it is moved. 데이터 흐름 태스크를 패키지에 추가하면 패키지에서 데이터를 추출, 변환 및 로드할 수 있습니다.Addition of a Data Flow task to a package control flow makes it possible for the package to extract, transform, and load data.

데이터 흐름은 적어도 하나 이상의 데이터 흐름 구성 요소로 구성되지만 일반적으로 데이터를 추출하는 원본, 데이터를 수정, 라우팅 또는 요약하는 변환 및 데이터를 로드하는 대상과 같은 일련의 연결된 데이터 흐름 구성 요소로 구성됩니다.A data flow consists of at least one data flow component, but it is typically a set of connected data flow components: sources that extract data; transformations that modify, route, or summarize data; and destinations that load data.

런타임 시 데이터 흐름 태스크는 데이터 흐름으로부터 실행 계획을 작성하고, 이 계획은 데이터 흐름 엔진에 의해 실행됩니다.At run time, the Data Flow task builds an execution plan from the data flow, and the data flow engine executes the plan. 데이터 흐름이 없는 데이터 흐름 태스크를 만들 수 있지만 적어도 하나 이상의 데이터 흐름이 있는 경우에만 태스크가 실행됩니다.You can create a Data Flow task that has no data flow, but the task executes only if it includes at least one data flow.

텍스트 파일의 데이터를 SQL ServerSQL Server 데이터베이스에 대량 삽입하려는 경우 데이터 흐름 태스크 및 데이터 흐름 대신 대량 삽입 태스크를 사용할 수 있습니다.To bulk insert data from text files into a SQL ServerSQL Server database, you can use the Bulk Insert task instead of a Data Flow task and a data flow. 하지만 대량 삽입 태스크에서는 데이터를 변환할 수 없습니다.However, the Bulk Insert task cannot transform data. 자세한 내용은 Bulk Insert Task을 참조하세요.For more information, see Bulk Insert Task.

여러 흐름Multiple Flows

데이터 흐름 태스크에는 여러 데이터 흐름이 포함될 수 있습니다.A Data Flow task can include multiple data flows. 태스크에서 여러 데이터가 복사되고, 데이터 복사 순서가 중요하지 않은 경우에는 데이터 흐름 태스크에 여러 데이터 흐름을 포함시키는 것이 편리합니다.If a task copies several sets of data, and if the order in which the data is copied is not significant, it can be more convenient to include multiple data flows in the Data Flow task. 예를 들어 플랫 파일의 데이터를 데이터 웨어하우스의 별모양 스키마에 있는 다른 차원 테이블로 복사하는 5개의 데이터 흐름을 만들 수 있습니다.For example, you might create five data flows, each copying data from a flat file into a different dimension table in a data warehouse star schema.

하지만 데이터 흐름 엔진은 하나의 데이터 흐름 태스크 내에 여러 데이터 흐름이 있는 경우 실행 순서를 결정합니다.However, the data flow engine determines order of execution when there are multiple data flows within one data flow task. 따라서 순서가 중요한 경우에는 패키지에서 각각 하나의 데이터 흐름이 포함된 여러 데이터 흐름 태스크를 사용해야 합니다.Therefore, when order is important, the package should use multiple Data Flow tasks, each task containing one data flow. 그런 다음에는 선행 제약 조건을 적용하여 태스크의 실행 순서를 제어할 수 있습니다.You can then apply precedence constraints to control the execution order of the tasks.

다음 다이어그램에서는 여러 데이터 흐름이 포함된 하나의 데이터 흐름 태스크를 보여 줍니다.The following diagram shows a Data Flow task that has multiple data flows.

데이터 흐름Data flows

로그 항목Log Entries

Integration ServicesIntegration Services 에서는 모든 태스크에서 사용할 수 있는 로그 이벤트 집합을 제공합니다. provides a set of log events that are available to all tasks. Integration ServicesIntegration Services 에서는 여러 태스크에서 사용할 수 있는 사용자 지정 로그 항목도 제공합니다. also provides custom log entries to many tasks. 자세한 내용은 Integration Services(SSIS) 로깅을 참조하세요.For more information, see Integration Services (SSIS) Logging. 데이터 흐름 태스크에는 다음 사용자 지정 로그 항목이 포함됩니다.The Data Flow task includes the following custom log entries:

로그 항목Log entry DescriptionDescription
BufferSizeTuningBufferSizeTuning 데이터 흐름 태스크로 인해 버퍼 크기가 변경되었음을 나타냅니다.Indicates that the Data Flow task changed the size of the buffer. 로그 항목은 크기가 변경된 이유를 설명하고 임시 새 버퍼 크기를 나열합니다.The log entry describes the reasons for the size change and lists the temporary new buffer size.
OnPipelinePostEndOfRowsetOnPipelinePostEndOfRowset 구성 요소에 ProcessInput 메서드의 마지막 호출로 설정된 해당 행 집합 끝 신호를 제공했음을 나타냅니다.Denotes that a component has been given its end-of-rowset signal, which is set by the last call of the ProcessInput method. 입력을 처리하는 데이터 흐름의 각 구성 요소에 대한 항목이 기록됩니다.An entry is written for each component in the data flow that processes input. 이 항목은 구성 요소의 이름을 포함합니다.The entry includes the name of the component.
OnPipelinePostPrimeOutputOnPipelinePostPrimeOutput 구성 요소가 PrimeOutput 메서드에 대한 마지막 호출을 완료했음을 나타냅니다.Indicates that the component has completed its last call to the PrimeOutput method. 데이터 흐름에 따라 여러 로그 항목이 기록될 수 있습니다.Depending on the data flow, multiple log entries may be written. 구성 요소가 원본일 경우 이 로그 항목은 구성 요소가 행 처리를 완료했음을 의미합니다.If the component is a source, this log entry means that the component has finished processing rows.
OnPipelinePreEndOfRowsetOnPipelinePreEndOfRowset 구성 요소가 ProcessInput 메서드의 마지막 호출로 설정된 해당 행 집합 끝 신호를 수신하려고 함을 나타냅니다.Indicates that a component is about to receive its end-of-rowset signal, which is set by the last call of the ProcessInput method. 입력을 처리하는 데이터 흐름의 각 구성 요소에 대한 항목이 기록됩니다.An entry is written for each component in the data flow that processes input. 이 항목은 구성 요소의 이름을 포함합니다.The entry includes the name of the component.
OnPipelinePrePrimeOutputOnPipelinePrePrimeOutput 구성 요소가 PrimeOutput 메서드에서 해당 호출을 수신하려고 함을 나타냅니다.Indicates that the component is about to receive its call from the PrimeOutput method. 데이터 흐름에 따라 여러 로그 항목이 기록될 수 있습니다.Depending on the data flow, multiple log entries may be written.
OnPipelineRowsSentOnPipelineRowsSent ProcessInput 메서드 호출로 구성 요소 입력에 제공한 행 수를 보고합니다.Reports the number of rows provided to a component input by a call to the ProcessInput method. 이 로그 항목은 구성 요소 이름을 포함합니다.The log entry includes the component name.
PipelineBufferLeakPipelineBufferLeak 버퍼 관리자가 없어진 후에 버퍼를 활성 상태로 유지하는 모든 구성 요소에 대한 정보를 제공합니다.Provides information about any component that kept buffers alive after the buffer manager goes away. 버퍼가 여전히 활성 상태인 경우 버퍼 리소스가 해제되지 않으므로 메모리가 손실될 수 있습니다.If a buffer is still alive, buffers resources were not released and may cause memory leaks. 로그 항목은 구성 요소 이름과 버퍼 ID를 제공합니다.The log entry provides the name of the component and the ID of the buffer.
PipelineComponentTimePipelineComponentTime 5개의 주요 처리 단계인 Validate, PreExecute, PostExecute, ProcessInput 및 ProcessOutput 각각에서 구성 요소에 소요된 시간(밀리초)을 보고합니다.Reports the amount of time (in milliseconds) that the component spent in each of its five major processing steps—Validate, PreExecute, PostExecute, ProcessInput, and ProcessOutput.
PipelineExecutionPlanPipelineExecutionPlan 데이터 흐름의 실행 계획을 보고합니다.Reports the execution plan of the data flow. 실행 계획은 버퍼를 구성 요소로 전송하는 방법에 대한 정보를 제공합니다.The execution plan provides information about how buffers will be sent to components. 이 정보는 PipelineExecutionTrees 로그 항목과 함께 데이터 흐름 태스크 내에서 발생하는 사항에 대해 설명합니다.This information, in combination with the PipelineExecutionTrees log entry, describes what is happening within the Data Flow task.
PipelineExecutionTreesPipelineExecutionTrees 데이터 흐름에서 레이아웃 실행 트리를 보고합니다.Reports the execution trees of the layout in the data flow. 데이터 흐름 엔진 스케줄러에서는 이 트리를 사용하여 데이터 흐름의 실행 계획을 작성합니다.The scheduler of the data flow engine uses the trees to build the execution plan of the data flow.
PipelineInitializationPipelineInitialization 태스크에 대한 초기화 정보를 제공합니다.Provides initialization information about the task. 이 정보에 BLOB 데이터의 임시 저장소에 사용할 디렉터리, 기본 버퍼 크기 및 버퍼의 행 수가 포함됩니다.This information includes the directories to use for temporary storage of BLOB data, the default buffer size, and the number of rows in a buffer. 데이터 흐름 태스크의 구성에 따라 여러 로그 항목이 기록될 수 있습니다.Depending on the configuration of the Data Flow task, multiple log entries may be written.

이러한 로그 항목은 패키지를 실행할 때마다 데이터 흐름 태스크의 실행과 관련된 다양한 정보를 제공합니다.These log entries provide a wealth of information about the execution of the Data Flow task each time you run a package. 패키지를 반복적으로 실행할 경우 해당 태스크에서 수행하는 처리, 성능에 영향을 줄 수 있는 문제 및 해당 태스크에서 처리하는 데이터 볼륨에 대한 중요한 기록 정보를 시간별로 제공하는 정보를 캡처할 수 있습니다.As you run the packages repeatedly, you can capture information that over time provides important historical information about the processing that the task performs, issues that might affect performance, and the data volume that task handles.

이러한 로그 항목을 사용하여 데이터 흐름의 성능을 모니터링하고 향상시키는 방법은 다음 항목 중 하나를 참조하십시오.For more information about how to use these log entries to monitor and improve the performance of the data flow, see one of the following topics:

데이터 흐름 태스크의 예제 메시지Sample Messages From a Data Flow Task

다음 표에서는 매우 간단한 패키지의 로그 항목에 대한 예제 메시지를 보여 줍니다.The following table lists sample messages for log entries for a very simple package. 이 패키지에서는 OLE DB 원본을 사용하여 테이블에서 데이터를 추출하고, 정렬 변환을 사용하여 데이터를 정렬하며, OLE DB 대상을 사용하여 다른 테이블에 데이터를 씁니다.The package uses an OLE DB source to extract data from a table, a Sort transformation to sort the data, and an OLE DB destination to writes the data to a different table.

로그 항목Log entry 메시지Messages
BufferSizeTuningBufferSizeTuning Rows in buffer type 0 would cause a buffer size greater than the configured maximum. There will be only 9637 rows in buffers of this type.

Rows in buffer type 2 would cause a buffer size greater than the configured maximum. There will be only 9497 rows in buffers of this type.

Rows in buffer type 3 would cause a buffer size greater than the configured maximum. There will be only 9497 rows in buffers of this type.
OnPipelinePostEndOfRowsetOnPipelinePostEndOfRowset A component will be given the end of rowset signal. : 1180 : Sort : 1181 : Sort Input

A component will be given the end of rowset signal. : 1291 : OLE DB Destination : 1304 : OLE DB Destination Input
OnPipelinePostPrimeOutputOnPipelinePostPrimeOutput A component has returned from its PrimeOutput call. : 1180 : Sort

A component has returned from its PrimeOutput call. : 1 : OLE DB Source
OnPipelinePreEndOfRowsetOnPipelinePreEndOfRowset A component has finished processing all of its rows. : 1180 : Sort : 1181 : Sort Input

A component has finished processing all of its rows. : 1291 : OLE DB Destination : 1304 : OLE DB Destination Input
OnPipelinePrePrimeOutputOnPipelinePrePrimeOutput PrimeOutput will be called on a component. : 1180 : Sort

PrimeOutput will be called on a component. : 1 : OLE DB Source
OnPipelineRowsSentOnPipelineRowsSent Rows were provided to a data flow component as input. : : 1185 : OLE DB Source Output : 1180 : Sort : 1181 : Sort Input : 76

Rows were provided to a data flow component as input. : : 1308 : Sort Output : 1291 : OLE DB Destination : 1304 : OLE DB Destination Input : 76
PipelineComponentTimePipelineComponentTime The component "Calculate LineItemTotalCost" (3522) spent 356 milliseconds in ProcessInput.

The component "Sum Quantity and LineItemTotalCost" (3619) spent 79 milliseconds in ProcessInput.

The component "Calculate Average Cost" (3662) spent 16 milliseconds in ProcessInput.

The component "Sort by ProductID" (3717) spent 125 milliseconds in ProcessInput.

The component "Load Data" (3773) spent 0 milliseconds in ProcessInput.

The component "Extract Data" (3869) spent 688 milliseconds in PrimeOutput filling buffers on output "OLE DB Source Output" (3879).

The component "Sum Quantity and LineItemTotalCost" (3619) spent 141 milliseconds in PrimeOutput filling buffers on output "Aggregate Output 1" (3621).

The component "Sort by ProductID" (3717) spent 16 milliseconds in PrimeOutput filling buffers on output "Sort Output" (3719).
PipelineExecutionPlanPipelineExecutionPlan SourceThread0

Drives: 1

Influences: 1180 1291

Output Work List

CreatePrimeBuffer of type 1 for output ID 11.

SetBufferListener: "WorkThread0" for input ID 1181

CreatePrimeBuffer of type 3 for output ID 12.

CallPrimeOutput on component "OLE DB Source" (1)

End Output Work List

End SourceThread0

WorkThread0

Drives: 1180

Influences: 1180 1291

Input Work list, input ID 1181 (1 EORs Expected)

CallProcessInput on input ID 1181 on component "Sort" (1180) for view type 2

End Input Work list for input 1181

Output Work List

CreatePrimeBuffer of type 4 for output ID 1182.

SetBufferListener: "WorkThread1" for input ID 1304

CallPrimeOutput on component "Sort" (1180)

End Output Work List

End WorkThread0

WorkThread1

Drives: 1291

Influences: 1291

Input Work list, input ID 1304 (1 EORs Expected)

CallProcessInput on input ID 1304 on component "OLE DB Destination" (1291) for view type 5

End Input Work list for input 1304

Output Work List

End Output Work List

End WorkThread1
PipelineExecutionTreesPipelineExecutionTrees begin execution tree 0

output "OLE DB Source Output" (11)

input "Sort Input" (1181)

end execution tree 0

begin execution tree 1

output "OLE DB Source Error Output" (12)

end execution tree 1

begin execution tree 2

output "Sort Output" (1182)

input "OLE DB Destination Input" (1304)

output "OLE DB Destination Error Output" (1305)

end execution tree 2
PipelineInitializationPipelineInitialization No temporary BLOB data storage locations were provided. The buffer manager will consider the directories in the TEMP and TMP environment variables.

The default buffer size is 10485760 bytes.

Buffers will have 10000 rows by default

The data flow will not remove unused components because its RunInOptimizedMode property is set to false.

로그 이벤트는 대부분 여러 개의 항목을 기록하며 다양한 로그 항목의 메시지에는 복잡한 데이터가 들어 있습니다.Many log events write multiple entries, and the messages for a number of log entries contain complex data. 복잡한 메시지 내용을 보다 쉽게 이해하고 전달할 수 있도록 메시지 텍스트를 구문 분석할 수 있습니다.To make it easier to understand and to communicate the content of complex messages you can parse the message text. 로그의 위치에 따라 Transact-SQL 문이나 스크립트 구성 요소를 사용하여 복잡한 텍스트를 열이나 보다 유용한 그 밖의 형식으로 구분할 수 있습니다.Depending on the location of the logs, you can use Transact-SQL statements or a Script component to separate the complex text into columns or other formats that you find more useful.

예를 들어 다음 표에서는 "행이 데이터 흐름 구성 요소에 입력으로 제공되었습니다.For example, the following table contains the message "Rows were provided to a data flow component as input. : : 1185 : OLE DB 원본 출력 : 1180 : Sort : 1181 : 정렬 입력 : 76"이라는 메시지가 여러 개의 열로 구문 분석된 결과를 보여 줍니다.: : 1185 : OLE DB Source Output : 1180 : Sort : 1181 : Sort Input : 76", parsed into columns. 이 메시지는 OLE DB 원본의 행이 정렬 변환으로 보내질 때 OnPipelineRowsSent 이벤트에 의해 기록된 것입니다.The message was written by the OnPipelineRowsSent event when rows were sent from the OLE DB source to the Sort transformation.

Column DescriptionDescription ValueValue
PathIDPathID OLE DB 원본과 정렬 변환 사이의 경로에 대한 ID 속성 값입니다.The value from the ID property of the path between the OLE DB source and the Sort transformation. 11851185
PathNamePathName 경로의 Name 속성 값입니다.The value from the Name property of the path. OLE DB 원본 출력OLE DB Source Output
ComponentIDComponentID 정렬 변환의 ID 속성 값입니다.The value of the ID property of the Sort transformation. 11801180
ComponentNameComponentName 정렬 변환의 Name 속성 값입니다.The value from the Name property of the Sort transformation. 정렬Sort
InputIDInputID 정렬 변환에 대한 입력의 ID 속성 값입니다.The value from the ID property of the input to the Sort transformation. 11811181
InputNameInputName 정렬 변환에 대한 입력의 Name 속성 값입니다.The value from the Name property of the input to the Sort transformation. 정렬 입력Sort Input
RowsSentRowsSent 정렬 변환의 입력으로 보내지는 행 수입니다.The number of rows sent to the input of the Sort transformation. 7676

데이터 흐름 태스크 구성Configuration of the Data Flow Task

속성 창을 사용하거나 프로그래밍 방식으로 속성을 설정할 수 있습니다.You can set properties in the Properties window or programmatically.

속성 창에서 이러한 속성을 설정하는 방법을 보려면 다음 항목을 클릭하십시오.For more information about how to set these properties in the Properties window, click the following topic:

데이터 흐름 태스크의 프로그래밍 방식 구성Programmatic Configuration of the Data Flow Task

패키지에 데이터 흐름 태스크를 프로그래밍 방식으로 추가하고 데이터 흐름 속성을 설정하는 방법을 보려면 다음 항목을 클릭하십시오.For more information about programmatically adding a data flow task to a package and setting data flow properties, click the following topic:

태스크 또는 컨테이너의 속성 설정Set the Properties of a Task or Container

technet.microsoft.com의 비디오, 분산 데이터 배포자Video, Balanced Data Distributer, on technet.microsoft.com.