Compartir a través de


Tarea Flujo de datos

La tarea Flujo de datos encapsula el motor de flujo de datos que mueve datos entre orígenes y destinos, y permite al usuario transformar, limpiar y modificar datos a medida que se mueven. Agregar una tarea Flujo de datos a un flujo de control de paquetes permite que el paquete extraiga, transforme y cargue datos.

Un flujo de datos se compone de por lo menos un componente de flujo de datos, pero normalmente es un conjunto de componentes de flujo de datos conectados: orígenes que extraen datos, transformaciones que modifican, enrutan o resumen datos, y destinos que cargan datos. Los componentes están conectados en el flujo de datos mediante rutas. Cada ruta especifica los dos componentes que son el inicio y el final de la ruta. Para obtener más información, vea Elementos de flujo de datos.

En el tiempo de ejecución, la tarea Flujo de datos genera un plan de ejecución a partir del flujo de datos y el motor de flujo de datos ejecuta el plan. Se puede crear una tarea Flujo de datos que no tenga flujo de datos, pero la tarea solo se ejecuta si incluye por lo menos un flujo de datos.

El siguiente diagrama muestra una tarea Flujo de datos con un flujo de datos.

Flujo de datos

Una tarea Flujo de datos puede incluir varios flujos de datos. Si una tarea copia varios conjuntos de datos, y si el orden en que los datos se copian no es significativo, puede ser más conveniente incluir varios flujos de datos en la tarea Flujo de datos. Por ejemplo, puede crear cinco flujos de datos, y cada uno de ellos copiaría datos de un archivo plano en una tabla de dimensiones diferente en un esquema de estrella de almacenamiento de datos.

Sin embargo, el motor de flujo de datos determina el orden de ejecución cuando existen varios flujos de datos dentro de una tarea de flujo de datos. Por tanto, cuando el orden es importante, el paquete debe usar varias tareas Flujo de datos, cada una de las cuales contiene un flujo de datos. En ese caso, puede aplicar restricciones de precedencia para controlar el orden de ejecución de las tareas.

El siguiente diagrama muestra una tarea Flujo de datos con varios flujos de datos.

Flujos de datos

Un paquete puede contener varias tareas Flujo de datos, lo que es frecuente en los paquetes complejos. Por ejemplo, si un paquete requiere que los flujos de datos se ejecuten en un orden especificado, o que se realicen otras tareas entre los flujos de datos, debe utilizar una tarea Flujo de datos independiente para cada flujo de datos.

La tarea Flujo de datos también administra los flujos de errores. En el tiempo de ejecución, pueden generarse errores de nivel de fila cuando los componentes de flujo de datos convierten datos, realizan una búsqueda o evalúan expresiones. Por ejemplo, una columna de datos con un valor de cadena no puede convertirse en un número entero, o una expresión intenta dividirse por cero. Ambas operaciones generan errores, y las filas que contienen los errores se pueden procesar independientemente mediante un flujo de errores. Para obtener más información acerca de cómo utilizar los flujos de errores en el flujo de datos de paquetes, vea Control de errores en el flujo de datos.

Para realizar una inserción masiva de datos de archivos de texto en una base de datos de SQL Server, puede usar la tarea Inserción masiva en lugar de la tarea Flujo de datos y un flujo de datos. Sin embargo, la tarea Inserción masiva no transforma datos. Para obtener más información, vea Tarea Inserción masiva.

Usar expresiones de propiedad con elementos de flujo de datos

Algunos de los componentes de flujo de datos (orígenes, transformaciones y destinos) admiten el uso de expresiones de propiedad en algunas de sus propiedades. Una expresión de propiedad es una expresión que reemplaza el valor de la propiedad cuando se carga el paquete. El paquete utiliza los valores actualizados de las propiedades en tiempo de ejecución. Las expresiones de propiedad se generan con la sintaxis de expresiones de Integration Services y pueden incluir funciones, operadores, identificadores y variables de Integration Services. Para obtener más información, vea Referencia de expresiones de Integration Services, Usar expresiones en paquetes y Usar expresiones de propiedad en paquetes.

Si genera un paquete en Business Intelligence Development Studio, las propiedades de todos los componentes de flujo de datos que admiten expresiones de propiedad se muestran en la tarea Flujo de datos a la que pertenecen. Para agregar, cambiar y quitar las expresiones de propiedad de componentes de flujo de datos, haga clic en la tarea Flujo de datos y, a continuación, utilice la ventana Propiedades o el editor de la tarea a fin de agregar, cambiar o eliminar expresiones de propiedad. Las expresiones de propiedad de la tarea Flujo de datos en sí se administran en la ventana Propiedades.

Si el flujo de datos contiene componentes que usan expresiones, estas expresiones se exponen también en la ventana Propiedades. Para ver las expresiones, seleccione la tarea Flujo de datos a la que pertenece el componente. Puede ver las propiedades por categoría o en orden alfabético. Si utiliza la vista por categorías de la ventana Propiedades, las expresiones que no se usan en ninguna propiedad específica se enumeran en la categoría Varios. Si utiliza la vista alfabética, las expresiones se enumeran en orden por el nombre del componente de flujo de datos.

Entradas del registro

Integration Services proporciona un conjunto de eventos de registro que están disponibles para todas las tareas. Integration Services también proporciona entradas del registro personalizadas para numerosas tareas. Para obtener más información, vea Implementar inicios de sesión en paquetes y Mensajes personalizados para registro. La tarea Flujo de datos incluye las siguientes entradas de registro personalizadas:

Entrada del registro

Descripción

BufferSizeTuning

Indica que la tarea Flujo de datos cambió el tamaño del búfer. En la entrada del registro se describen las razones del cambio de tamaño y se indica el nuevo tamaño temporal del búfer.

OnPipelinePostEndOfRowset

Indica que se ha dado la señal de fin del conjunto de filas a un componente, la cual se establece a través de la última llamada del método ProcessInput. Se escribe una entrada por cada componente del flujo de datos que procesa la entrada de datos. La entrada incluye el nombre del componente.

OnPipelinePostPrimeOutput

Indica que el componente ha completado su última llamada al método PrimeOutput. En función del flujo de datos, es posible que se escriban varias entradas. Si el componente es un origen, esta entrada del registro significa que el componente ha terminado de procesar filas.

OnPipelinePreEndOfRowset

Indica que un componente está a punto de recibir la señal de fin del conjunto de filas, la cual se establece a través de la última llamada del método ProcessInput. Se escribe una entrada por cada componente del flujo de datos que procesa la entrada de datos. La entrada incluye el nombre del componente.

OnPipelinePrePrimeOutput

Indica que el componente está a punto de recibir su última llamada del método PrimeOutput. En función del flujo de datos, es posible que se escriban varias entradas.

OnPipelineRowsSent

Informa del número de filas que se proporciona a una entrada de componentes a través de una llamada al método ProcessInput. La entrada del registro incluye el nombre del componente.

PipelineBufferLeak

Proporciona información sobre cualquier componente que mantuvo la conexión de los búferes después de que desapareciera el administrador de búferes. Si se mantiene la conexión de un búfer, no se liberan los recursos de los búferes y podrían ocasionarse pérdidas de memoria. La entrada del registro proporciona el nombre del componente y el Id. del búfer.

PipelineComponentTime

Notifica la cantidad de tiempo (en milisegundos) que el componente consumió en cada uno de sus cinco pasos de procesamiento principales, (PreExecute, PostExecute, ProcessInput y ProcessOutput.

PipelineExecutionPlan

Informa del plan de ejecución del flujo de datos. El plan de ejecución proporciona información sobre cómo se van a enviar los búferes a los componentes. Esta información, junto con la entrada del registro PipelineExecutionTrees, describe lo que ocurre en la tarea Flujo de datos.

PipelineExecutionTrees

Informa sobre los árboles de ejecución del diseño del flujo de datos. El programador del motor de flujo de datos utiliza los árboles para generar el plan de ejecución del flujo de datos.

PipelineInitialization

Proporciona información de inicialización sobre la tarea. Esta información incluye los directorios que se utilizan para el almacenamiento temporal de datos BLOB, el tamaño predeterminado del búfer y la cantidad de filas de un búfer. En función de la configuración de la tarea Flujo de datos, es posible que se escriban varias entradas.

Estas entradas de registro proporcionan gran cantidad de información acerca de la ejecución de la tarea Flujo de datos cada vez que ejecuta un paquete. Conforme ejecuta los paquetes repetidamente, puede recopilar información que, con el tiempo, proporciona datos históricos importantes acerca del procesamiento que realiza la tarea, problemas que pueden afectar al rendimiento y el volumen de datos que controla la tarea.

Para obtener más información sobre cómo utilizar estas entradas de registro para supervisar y mejorar el rendimiento del flujo de datos, vea uno de los temas siguientes:

Mensajes de ejemplo de una tarea Flujo de trabajo

En la tabla siguiente se muestran mensajes de ejemplo de entradas de registro de un paquete muy sencillo. El paquete utiliza un origen OLE DB para extraer datos de una tabla, una transformación Ordenar para ordenar los datos y un destino OLE DB para escribir los datos en una tabla diferente.

Entrada del registro

Mensajes

BufferSizeTuning

Las filas del tipo de búfer 0 harían que el tamaño de búfer superase el máximo configurado. Solo habrá 9.637 filas en búferes de este tipo.

Las filas del tipo de búfer 2 harían que el tamaño de búfer superase el máximo configurado. Solo habrá 9.497 filas en búferes de este tipo.

Las filas del tipo de búfer 3 harían que el tamaño de búfer superase el máximo configurado. Solo habrá 9.497 filas en búferes de este tipo.

OnPipelinePostEndOfRowset

Un componente recibirá la señal de fin de conjunto de filas. : 1180 : Ordenar : 1181 : Entrada de ordenación

Un componente recibirá la señal de fin de conjunto de filas. : 1291 : Destino de OLE DB : 1304 : Entrada de destino de OLE DB

OnPipelinePostPrimeOutput

Un componente ha vuelto de su llamada a PrimeOutput. : 1180 : Ordenar

Un componente ha vuelto de su llamada a PrimeOutput. : 1 : Origen de OLE DB

OnPipelinePreEndOfRowset

Un componente ha terminado de procesar todas sus filas. : 1180 : Ordenar : 1181 : Entrada de ordenación

Un componente ha terminado de procesar todas sus filas. : 1291 : Destino de OLE DB : 1304 : Entrada de destino de OLE DB

OnPipelinePrePrimeOutput

PrimeOutput se llamará en un componente. : 1180 : Ordenar

PrimeOutput se llamará en un componente. : 1 : Origen de OLE DB

OnPipelineRowsSent

Se proporcionaron filas como entrada de un componente de flujo de datos. : : 1185 : Salida de origen de OLE DB : 1180 : Ordenar : 1181 : Entrada de ordenación : 76

Se proporcionaron filas como entrada de un componente de flujo de datos. : : 1308 : Salida de ordenación : 1291 : Destino de OLE DB : 1304 : Entrada de destino de OLE DB : 76

PipelineComponentTime

El componente "Calculate LineItemTotalCost" (3522) empleó 356 milisegundos en ProcessInput.

El componente "Sum Quantity and LineItemTotalCost" (3619) empleó 79 milisegundos en ProcessInput.

El componente "Calculate Average Cost" (3662) empleó 16 milisegundos en ProcessInput.

El componente "Sort by ProductID" (3717) empleó 125 milisegundos en ProcessInput.

El componente "Load Data" (3773) empleó 0 milisegundos en ProcessInput.

El componente "Extract Data" (3869) empleó 688 milisegundos en el llenado de búferes de PrimeOutput en la salida "Salida de origen de OLE DB" (3879).

El componente "Sum Quantity and LineItemTotalCost" (3619) empleó 141 milisegundos en el llenado de búferes de PrimeOutput en la salida "Salida de agregado 1" (3621).

El componente "Sort by ProductID" (3717) empleó 16 milisegundos en el llenado de búferes de PrimeOutput en la salida "Salida de Ordenación" (3719).

PipelineExecutionPlan

SourceThread0

Unidades: 1

Influencias: 1180 1291

Lista de trabajos de salida

CreatePrimeBuffer del tipo 1 para el Id. de salida 11.

SetBufferListener: "WorkThread0" para el Id. de entrada 1181

CreatePrimeBuffer del tipo 3 para el Id. de salida 12.

CallPrimeOutput en el componente "OLE DB Source" (1)

Fin de lista de trabajos de salida

Fin de SourceThread0

WorkThread0

Unidades: 1180

Influencias: 1180 1291

Lista de trabajos de entrada, Id. de entrada 1181 (1 EOR esperados)

CallProcessInput en Id. de entrada 1181 en "Sort" (1180) para el tipo de vista 2

Fin de lista de trabajos de entrada para la entrada 1181

Lista de trabajos de salida

CreatePrimeBuffer del tipo 4 para el Id. de salida 1182.

SetBufferListener: "WorkThread1" para el Id. de entrada 1304

CallPrimeOutput en el componente "Sort" (1180)

Fin de lista de trabajos de salida

Fin de WorkThread0

WorkThread1

Unidades: 1291

Influencias: 1291

Lista de trabajos de entrada, Id. de entrada 1304 (1 EOR esperados)

CallProcessInput en Id. de entrada 1304 en "Destino de OLE DB" (1291) para el tipo de vista 5

Fin de lista de trabajos de entrada para la entrada 1304

Lista de trabajos de salida

Fin de lista de trabajos de salida

Fin de WorkThread1

PipelineExecutionTrees

inicio de árbol de ejecución 0

salida "Salida de origen de OLE DB" (11)

entrada "Entrada de ordenación" (1181)

fin de árbol de ejecución 0

inicio de árbol de ejecución 1

salida "Salida de error de origen de OLE DB" (12)

fin de árbol de ejecución 1

inicio de árbol de ejecución 2

salida "Salida de ordenación" (1182)

entrada "Entrada de destino de OLE DB" (1304)

salida "Salida de error de destino de OLE DB" (1305)

fin de árbol de ejecución 2

PipelineInitialization

No se proporcionó ninguna ubicación de almacenamiento de datos BLOB temporal. El administrador de búfer considerará los directorios de las variables de entorno TEMP y TMP.

El tamaño de búfer predeterminado es 10485760 bytes.

Los búferes tendrán 10000 filas de forma predeterminada

El flujo de datos no quitará los componentes no utilizados porque su propiedad RunInOptimizedMode está establecida en False.

Muchos eventos de registro escriben varias entradas, y los mensajes de un gran número de entradas del registro contienen datos complejos. Para facilitar la comprensión y comunicar el contenido de mensajes complejos, puede analizar el texto del mensaje. En función de la ubicación de los registros, puede usar instrucciones Transact-SQL o un componente de script para separar el texto complejo en columnas u otros formatos que considere más útiles.

Por ejemplo, la tabla siguiente contiene el mensaje "Se proporcionaron filas como entrada de un componente de flujo de datos. : : 1185 : Salida de origen de OLE DB : 1180 : Ordenar : 1181 : Entrada de ordenación : 76", analizado en columnas. El evento OnPipelineRowsSent escribió el mensaje cuando se enviaron filas del origen de OLE DB a la transformación Ordenar.

Columna

Descripción

Valor

PathID

Valor de la propiedad ID de la ruta entre el origen de OLE DB y la transformación Ordenar.

1185

PathName

Valor de la propiedad Name de la ruta.

Salida de origen de OLE DB

ComponentID

Valor de la propiedad ID de la transformación Ordenar.

1180

ComponentName

Valor de la propiedad Name de la transformación Ordenar.

Ordenar

InputID

Valor de la propiedad ID de la entrada de la transformación Ordenar.

1181

InputName

Valor de la propiedad Name de la entrada de la transformación Ordenar.

Entrada de ordenación

RowsSent

Número de filas enviadas a la entrada de la transformación Ordenar.

76

Orígenes

Los siguientes orígenes tienen propiedades que se pueden actualizar a través de expresiones de propiedad:

Para obtener más información, vea Propiedades personalizadas de origen.

Transformaciones

Destinos

Los siguientes destinos tienen propiedades que se pueden actualizar a través de expresiones de propiedad:

Para obtener más información, vea Propiedades personalizadas de los destinos.

Configurar la tarea Flujo de datos

Puede establecer propiedades en la ventana Propiedades o mediante programación.

Para obtener más información sobre cómo establecer estas propiedades en la ventana Propiedades, haga clic en el tema siguiente:

Configurar la tarea Flujo de datos mediante programación

Para obtener más información sobre cómo agregar una tarea Flujo de datos a un paquete y establecer las propiedades del flujo de datos mediante programación, haga clic en el tema siguiente:

Icono de Integration Services (pequeño) Manténgase al día con Integration Services

Para obtener las más recientes descargas, artículos, ejemplos y vídeos de Microsoft, así como soluciones seleccionadas de la comunidad, visite la página de Integration Services en MSDN o TechNet:

Para recibir notificaciones automáticas de estas actualizaciones, suscríbase a las fuentes RSS disponibles en la página.