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.
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.
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
Las siguientes transformaciones tienen propiedades que se pueden actualizar a través de expresiones de propiedad:
Para obtener más información, vea Propiedades personalizadas de transformación.
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:
|