En este artículo, explicaré cómo podemos dividir y exportar datos de una tabla de base de datos de Oracle en varias hojas de trabajo de un archivo de Excel con la ayuda del paquete de servicios de integración de SQL Server.
A menudo, los DBA solicitan generar informes Ad-Hoc a partir de una base de datos. Recientemente me han pedido que genere un informe a partir de la base de datos. Quieren que proporcione un informe en varias hojas de trabajo de un archivo de Excel. Hay diferentes formas de hacerlo, pero la consulta requería muchos recursos. Por lo tanto, quiero extraer datos de la base de datos con una ejecución y decidí usar el paquete de servicios de integración de SQL Server. Las herramientas de datos de SQL Server tienen un componente llamado Transformación dividida condicional que se puede utilizar para lograr la tarea.
Con las herramientas de datos de SQL Server, podemos recuperar datos de varias plataformas de bases de datos mediante la conexión ODBC. La mayoría de las plataformas de bases de datos proporcionan sus controladores de conectividad que se pueden usar para configurar una conexión entre la aplicación y la base de datos.
¿Qué es la transformación dividida condicional?
La transformación División condicional puede enrutar filas de datos a diferentes salidas según el contenido de los datos. La implementación de la transformación de división condicional es como una estructura de decisión CASE en un lenguaje de programación. Evalúa expresiones y, en función de los resultados, dirige la fila de datos a la salida especificada. Esta transformación también proporciona una salida predeterminada, de modo que si una fila no coincide con ninguna expresión, se dirige a la salida predeterminada. (Referencia de MSDN :https://docs.microsoft.com/en-us/sql/integration-services/data-flow/transformations/conditional-split-transformation?view=sql-server-2017).
Configuración de demostración
He instalado Oracle 11g express edition en mi máquina. He creado una tabla llamada EMPLEYEESDATA en el RRHH esquema del XE base de datos y agregó algunos registros ficticios de AdventureWorks2014 base de datos.
El siguiente código creará una tabla:
CREAR TABLA "HR"."EMPLOYEE_DATA" ( "BusinessEntityID" NÚMERO(*,0), "Título" NVARCHAR2(8), "Nombre" NVARCHAR2(50), "Nombre medio" NVARCHAR2(50), "Apellido" NVARCHAR2(50), "Sufijo" NVARCHAR2(10), "Título del trabajo" NVARCHAR2(50), "Número de teléfono" NVARCHAR2(25), "Tipo de número de teléfono" NVARCHAR2(50), "Dirección de correo electrónico" NVARCHAR2(50), "Promoción de correo electrónico" NUMBER( *,0), "AddressLine1" NVARCHAR2(60), "AddressLine2" NVARCHAR2(60), "City" NVARCHAR2(30), "StateProvinceName" NVARCHAR2(50), "PostalCode" NVARCHAR2(15), "CountryRegionName" NVARCHAR2( 50)) Creación del segmento PCTFREE 10 PCTUSED 40 INITRANS 1 MAXTRANS 255 NOCOMPRESS ALMACENAMIENTO DE REGISTRO (Inicial 65536 SIGUIENTE 1048576 MINEXTENTES MINEXTENTES 1 MAXEXTENTS 2147483645 PCTINCREACE 0 Freelists 1 Freelist Group 1 Buffer_Pool Flash_Cache Cell_Flash_Cache) "Usuarios");Para conectar la base de datos de Oracle usando SSDT, necesitamos instalar el software de cliente de Oracle. Las herramientas de datos de SQL Server funcionan en el modo de 32 bits, por lo que se debe instalar la versión de 32 bits de los controladores ODBC para Oracle. Puede descargar Oracle Client desde aquí.
He creado un archivo de Excel llamado 'HRData.xls ’ que tiene dos hojas de trabajo llamadas Australia y Canadá . Los datos se dividirán según el valor de CountryRegionName columna. Si el valor de la columna de CountryRegionName la columna es Canadá luego se almacenará en Canadá hoja de trabajo y si el valor de la columna de CountryRegionName es Australia luego se almacenará en Australia hoja de trabajo.
Como todos sabemos cómo crear un paquete SSIS, explicaré directamente cómo crear una tarea de flujo de datos.
Crear tarea de flujo de datos
En la tarea de flujo de datos, vamos a utilizar los siguientes tres componentes:
- Fuente de ADO.NET para completar datos de la base de datos de Oracle.
- División condicional para dividir los datos en varios conjuntos.
- Destino de Excel con dos libros de trabajo llamados "Australia" y "Canadá".
Configurar fuente ADO.NET
Arrastra y suelta Fuente ADO.NET de Caja de herramientas de SSIS al Flujo de datos ventanas y asígnele el nombre Datos de empleados como se muestra en la siguiente imagen:
Haga doble clic en Datos de empleados . El Editor de código fuente de ADO.NET se abrirá el cuadro de diálogo. Aquí, todavía no creamos ninguna conexión, por lo tanto, el administrador de conexión ADO.NET el cuadro desplegable está vacío. Crearemos una nueva conexión. Para hacerlo, haga clic en Nuevo en ese cuadro de diálogo. Después de esto, otro cuadro de diálogo, Configurar administrador de conexión, se abrirá como se muestra en la siguiente imagen:
En Configurar el administrador de conexiones ADO.NET cuadro de diálogo, haga clic en Nuevo . Otro cuadro de diálogo, Administrador de conexión , se abrirá.
De forma predeterminada, .Net Providers\SQLClient Data Provider se seleccionará en el Proveedor caja desplegable. A medida que llenemos los datos de la base de datos de Oracle, seleccionaremos OracleClient Data Provider .
En Nombre del servidor cuadro de texto, ingrese el nombre o la dirección IP del servidor en el que está instalado Oracle 11g. El nombre de usuario y la contraseña se utilizarán para conectarse a la base de datos de Oracle. Instalé Oracle en mi VM local, por lo que el nombre del servidor será localhost . Voy a conectar la base de datos usando HR usuario, por lo tanto, el nombre de usuario será HR . Proporcione la contraseña adecuada y haga clic en Aceptar . Ver la siguiente imagen:
Una vez completada la configuración, haga clic en Probar conexión para verificar la conectividad con la base de datos y haga clic en Aceptar.
Hemos configurado el administrador de conexión ADO.NET, por lo tanto, el administrador de conexión predeterminado se seleccionará automáticamente en el Administrador de conexión ADO.NET cuadro de lista desplegable. Vamos a recuperar datos de la tabla, por lo tanto, seleccione Tabla o Ver en el cuadro desplegable del modo de acceso a datos. Ya he creado los EMPLOYEESDATA tabla en el HR Esquema de la base de datos de Oracle, por lo tanto, seleccione HR.EmployeesData en el Nombre de la tabla o de la vista cuadro desplegable como se muestra en la siguiente imagen:
Configurar división condicional
Ahora, para exportar datos en diferentes hojas de cálculo de Excel en función de una condición, utilizaremos la transformación de división condicional. Arrastre el componente de división condicional desde el SSIS caja de herramientas para el flujo de datos ventana como se muestra en la imagen de abajo.
Mencioné anteriormente, la salida de datos de HR.EmployeeData la tabla se exportará en varias hojas de trabajo en función de la condición definida en la División condicional componente.
Primero, conectaremos la fuente ADO.Net a la transformación de división condicional. Para hacerlo, haga clic en la flecha azul en la ruta del flujo de datos en la parte inferior de los Datos de los empleados. componente y arrástrelo a la transformación de división condicional como se muestra en la imagen a continuación.
Ahora configuraremos la transformación de división condicional. Como mencioné anteriormente, dividiremos los datos de la tabla HR.EmployeesData según el valor de CountryRegionName columna y almacenarlos en diferentes hojas de trabajo.
Para hacer esto, haga doble clic en Editor de transformación de división condicional . El editor de transformación de división condicional se abrirá un cuadro de diálogo como se muestra en la siguiente imagen:
Como puede ver en la imagen de arriba, el editor de transformación de división condicional tiene tres secciones que determinan cómo se enrutarán los datos a los siguientes componentes.
Sección A :En esta sección, bajo las Columnas Se enumerará la lista de carpetas de las columnas de salida, derivadas del componente fuente ADO.Net, que se puede usar para definir las condiciones para dividir los datos.
Sección B :En esta sección, se enumerarán varias funciones que se pueden usar para convertir la salida en diferentes formatos y para definir condiciones para dividir datos.
Sección C :En esta sección, puede crear una condición que pueda dividir la salida de la fuente ADO.Net en múltiples conjuntos de resultados.
Agregaremos la condición en la Sección-C. Así que primero expanda el nodo de la columna y arrastre el CountryRegionName columna (Sección A) y colóquelo en la cuadrícula (Sección C) como se muestra en la siguiente imagen:
Para este ejemplo, definiremos nuestra condición según el CountryRegionName columna. La lista de empleados de "Canadá" se almacenará en la hoja de cálculo de Excel denominada Canadá y una lista de empleados de Australia se almacenará en Australia hoja de cálculo. Según la condición, vamos a utilizar igual a (==) operador. La ecuación será la siguiente:
[CountryRegionName]=="Australia"[CountryRegionName]=="Canadá"
Una vez definidas las condiciones, haga clic en Aceptar para guardar y cerrar el cuadro de diálogo.
Configuración del destino de Excel
Ahora que hemos dividido el flujo de datos en varias rutas, agregaremos un destino para cada ruta. Como vamos a exportar datos de tablas en diferentes hojas de cálculo de Excel, necesitamos crear dos destinos de Excel. Para hacerlo, arrastre y suelte la conexión de Excel desde SSIS Toolbox, como se muestra en la siguiente imagen:
Para configurar el destino de Excel, haga doble clic en Destino de Excel. El administrador de conexiones de Excel se abrirá el cuadro de diálogo. En ese cuadro de diálogo, haga clic en Nuevo como se muestra en la siguiente imagen:
Otro cuadro de diálogo llamado Administrador de conexión de Excel abrirá. En este cuadro de diálogo, proporcionaremos una ruta donde se encuentra el archivo de Excel. He creado los Datos del empleado archivo en mi escritorio. Recorreremos el sistema de archivos, seleccionaremos el archivo y haremos clic en Aceptar. como se muestra en la imagen de abajo:
Ahora, en el modo de acceso a datos cuadro desplegable, seleccione Tabla o vista y en el Nombre de la hoja de Excel cuadro desplegable, seleccione Australia$, como se muestra en la siguiente imagen:
Ahora voy a configurar la ruta de datos. Para hacerlo, arrastre la flecha azul de la ruta de datos desde la transformación de división condicional hasta Empleados de Australia. componente de destino de Excel. Cuando conecte la ruta de datos al destino de Excel, aparecerá un cuadro de diálogo para elegir la salida que queremos dirigir hacia el destino seleccionado. El cuadro de diálogo tendrá el siguiente aspecto:
El cuadro de diálogo incluye todas las salidas en la lista desplegable, que está disponible desde la transformación de división condicional. En este caso, la lista desplegable incluirá dos opciones.
- Australia
- Canadá
- Salida predeterminada
Haga doble clic en el componente de destino de Excel para asignar las columnas de la tabla con las columnas de Excel. Para hacerlo, haga doble clic en el componente de destino de Excel y en el Editor de destino de Excel cuadro de diálogo, seleccione Mapeo opción ubicada en el panel izquierdo del cuadro de diálogo, como se muestra en la imagen a continuación:
En la imagen de arriba, Columna de entrada es el nombre de la columna de la tabla de Oracle y columna de destino será el nombre de la columna de la hoja de Excel. En esta demostración, el nombre de la columna de la tabla y el archivo de Excel son los mismos. Así que Editor de destino de Excel mapeará automáticamente las columnas de entrada y salida.
De la misma manera repetiré el proceso de configuración del flujo de datos para el Canadá ruta de datos.
- Necesitamos seleccionar Canadá en la Selección de entrada y salida cuadro de diálogo, como se muestra en la imagen a continuación.
- En Editar destino de Excel r, seleccione Canadá$ en el Nombre de la hoja de Excel cuadro desplegable como se muestra en la imagen a continuación.
Una vez que se completen todas las configuraciones, toda la tarea de flujo de datos tendrá el siguiente aspecto:
Prueba del paquete SSIS
Ahora ejecutemos el paquete y veamos cómo funcionó. Para hacerlo, haga clic en Inicio botón en la barra de menú. Si el paquete completa la ejecución con éxito, debería tener el siguiente aspecto:
Como indica la imagen de arriba, el paquete insertó 1 registro en la región de Australia hoja de cálculo y 2 registros en la región de Canadá hoja de trabajo.
Resumen
En este artículo, creamos un paquete SSIS con un solo flujo de datos. Agregamos una transformación de división condicional al flujo de datos para dividir los datos en varias rutas. Luego dirigimos cada una de esas rutas de datos a diferentes hojas de cálculo de Excel.
Referencias :
Exporte datos SQL a varios libros de trabajo de un archivo de Excel.
Herramientas útiles:
Componentes de flujo de datos de Devart SSIS:le permiten integrar bases de datos y datos en la nube a través de SQL Server Integration Services.
Controladores ODBC de Devart:brindan soluciones de conectividad ricas en funciones y de alto rendimiento para aplicaciones basadas en ODBC.