Neste artigo, explicarei como podemos dividir e exportar dados de uma tabela de banco de dados Oracle em várias planilhas de um arquivo Excel com a ajuda do pacote de serviços de integração do SQL Server.
Muitas vezes, os DBAs solicitavam a geração de relatórios Ad-Hoc a partir de um banco de dados. Recentemente me pediram para gerar um relatório do banco de dados. Eles querem que eu forneça um relatório em várias planilhas de um arquivo do Excel. Existem diferentes maneiras de fazer isso, mas a consulta consumia muitos recursos. Por isso, quero extrair dados do banco de dados com uma execução e decidi usar o pacote de serviços de integração do SQL Server. As ferramentas de dados do SQL Server têm um componente chamado Transformação de divisão condicional que pode ser usado para realizar a tarefa.
Usando as ferramentas de dados do SQL Server, podemos recuperar dados de várias plataformas de banco de dados usando a conexão ODBC. A maioria das plataformas de banco de dados fornece seus drivers de conectividade que podem ser usados para configurar uma conexão entre o aplicativo e o banco de dados.
O que é transformação de divisão condicional
A transformação Divisão Condicional pode rotear linhas de dados para diferentes saídas, dependendo do conteúdo dos dados. A implementação da transformação Conditional Split é como uma estrutura de decisão CASE em uma linguagem de programação. Ele avalia expressões e, com base nos resultados, direciona a linha de dados para a saída especificada. Essa transformação também fornece uma saída padrão, de modo que, se uma linha não corresponder a nenhuma expressão, ela será direcionada para a saída padrão. (Referência MSDN :https://docs.microsoft.com/en-us/sql/integration-services/data-flow/transformations/conditional-split-transformation?view=sql-server-2017) .
Configuração de demonstração
Instalei o Oracle 11g express edition na minha máquina. Criei uma tabela chamada EMPLOYEESDATA no RH esquema do XE banco de dados e adicionou alguns registros fictícios do AdventureWorks2014 base de dados.
O código abaixo irá criar uma tabela:
CREATE TABLE "HR".."EMPLOYEE_DATA" ( "BusinessEntityID" NUMBER(*,0), "Title" NVARCHAR2(8), "FirstName" NVARCHAR2(50), "MiddleName" NVARCHAR2(50), "LastName" NVARCHAR2(50), "Suffix" NVARCHAR2(10), "JobTitle" NVARCHAR2(50), "PhoneNumber" NVARCHAR2(25), "PhoneNumberType" NVARCHAR2(50), "EmailAddress" NVARCHAR2(50), "EmailPromotion" NUMBER( *,0), "AddressLine1" NVARCHAR2(60), "AddressLine2" NVARCHAR2(60), "City" NVARCHAR2(30), "StateProvinceName" NVARCHAR2(50), "PostalCode" NVARCHAR2(15), "CountryRegionName" NVARCHAR2( 50)) Criação do segmento PCTFREE imediato 10 PCTUSTED 40 initRans 1 Maxtrans 255 Nocompression Armazenamento de registro (inicial 65536 Próximo 1048576 Minextents 1 MAXEXTENTS 2147483645 PCTINCREASE 0 Freleists 1 Grupos freleistas 1 Buffer_PoolFault Flash_Cache_Cache_CACHAULTSFAULTS INSOURESTROTHELTR_FAURSTELHOUST_FALDELHOUSTFACTACHAFACTATELAHATTELHOUSTFACTACHATELHAFACTATELATELAHATELHOUSTOL)
Para conectar o banco de dados Oracle usando SSDT, precisamos instalar o software cliente Oracle. As ferramentas de dados do SQL Server funcionam no modo de 32 bits, portanto, a versão de 32 bits dos drivers ODBC para Oracle deve ser instalada. Você pode baixar o Oracle Client aqui.
Criei um arquivo Excel chamado 'HRData.xls ' que tem duas planilhas chamadas Austrália e Canadá . Os dados serão divididos com base no valor de CountryRegionName coluna. Se o valor da coluna de CountryRegionName coluna é Canadá então ele será armazenado no Canadá planilha e se o valor da coluna de CountryRegionName é Austrália então ele será armazenado na Austrália planilha.
Como todos sabemos como criar um pacote SSIS, explicarei diretamente como criar uma tarefa de fluxo de dados.
Criar tarefa de fluxo de dados
Na tarefa Fluxo de dados, usaremos os três componentes a seguir:
- Origem ADO.NET para preencher dados do banco de dados Oracle.
- Divisão condicional para dividir dados em vários conjuntos.
- Destino do Excel com duas pastas de trabalho chamadas "Austrália" e "Canadá".
Configurar fonte ADO.NET
Arraste e solte Origem ADO.NET da Caixa de ferramentas do SSIS para o Fluxo de dados janelas e nomeie-o Dados do funcionário como mostrado na imagem a seguir:
Clique duas vezes em Dados do funcionário . O Editor de código-fonte ADO.NET caixa de diálogo será aberta. Aqui, ainda não criamos nenhuma conexão, por isso o gerenciador de conexões ADO.NET caixa suspensa está vazia. Vamos criar uma nova conexão. Para fazer isso, clique em Novo nessa caixa de diálogo. Depois disso, outra caixa de diálogo, Configure Connection Manager, será aberto como mostrado na imagem abaixo:
No Configurar o Gerenciador de Conexão ADO.NET caixa de diálogo, clique em Novo . Outra caixa de diálogo, Gerenciador de conexões , vai abrir.
Por padrão, .Net Providers\SQLClient Data Provider será selecionado no Provedor caixa suspensa. Como estamos preenchendo os dados do banco de dados Oracle, selecionaremos OracleClient Data Provider .
Em Nome do servidor caixa de texto, digite o nome ou endereço IP do servidor no qual o Oracle 11g está instalado. Nome de usuário e senha serão usados para conectar o banco de dados Oracle. Eu instalei o Oracle na minha VM local, portanto, o nome do servidor será localhost . Vou conectar o banco de dados usando o HR usuário, portanto, o nome de usuário será RH . Forneça a senha apropriada e clique em OK . Veja a seguinte imagem:
Quando a configuração estiver concluída, clique em Testar conexão para verificar a conectividade com o banco de dados e clique em OK.
Configuramos o gerenciador de conexões ADO.NET, portanto, o gerenciador de conexões padrão será selecionado automaticamente no Gerenciador de conexões ADO.NET caixa de listagem suspensa. Vamos recuperar dados da tabela, portanto, selecione Tabela ou Visualização na caixa suspensa do modo de acesso a dados. Já criei o EMPLOYEESDATA tabela no RH Esquema do banco de dados Oracle, portanto, selecione HR.EmployeesData no nome da tabela ou visualização caixa suspensa como mostrado na imagem abaixo:
Configurar divisão condicional
Agora, para exportar dados em diferentes planilhas do Excel com base em uma condição, usaremos a transformação de divisão condicional. Arraste o componente de divisão condicional do SSIS caixa de ferramentas para o fluxo de dados janela conforme a imagem abaixo.
Mencionei anteriormente, a saída de dados do HR.EmployeeData tabela será exportada em várias planilhas com base na condição definida na Divisão Condicional componente.
Primeiro, conectaremos a origem ADO.Net à transformação de divisão condicional. Para fazer isso, clique na seta azul no caminho do fluxo de dados na parte inferior dos Dados dos funcionários componente e arraste-o para a transformação de divisão condicional conforme mostrado na imagem abaixo.
Agora vamos configurar a transformação de divisão condicional. Como mencionei anteriormente, dividiremos os dados da tabela HR.EmployeesData com base no valor do CountryRegionName coluna e armazená-los em planilhas diferentes.
Para fazer isso, clique duas vezes em Editor de transformação de divisão condicional . O Editor de transformação de divisão condicional caixa de diálogo será aberta conforme mostrado na imagem a seguir:
Como você pode ver na imagem acima, o editor de transformação de divisão condicional possui três seções que determinam como os dados serão roteados para os próximos componentes.
Seção A :nesta seção, nas Colunas lista de pastas das colunas de saída, derivada do componente de origem ADO.Net, que pode ser usada para definir condições para dividir os dados.
Seção B :Nesta seção, várias funções serão listadas que podem ser usadas para converter a saída em diferentes formatos e usadas para definir condições para dividir dados.
Seção C :nesta seção, você pode criar uma condição que pode dividir a saída da fonte ADO.Net em vários conjuntos de resultados.
Vamos adicionar a condição na Seção-C. Então, primeiro expanda o nó da coluna e arraste o CountryRegionName coluna (Seção A) e solte-a na grade (Seção C) conforme mostrado na imagem a seguir:
Para este exemplo, definiremos nossa condição com base no CountryRegionName coluna. A lista de funcionários do “Canadá” será armazenada na planilha do Excel chamada Canadá e uma lista de funcionários da Austrália será armazenada na Austrália planilha. Com base na condição, usaremos igual a (==) operador. A equação ficará da seguinte forma:
[CountryRegionName]=="Austrália"[CountryRegionName]=="Canadá"
Uma vez definidas as condições, clique em OK para salvar e fechar a caixa de diálogo.
Configurando o destino do Excel
Agora que dividimos o fluxo de dados em vários caminhos, adicionaremos um destino para cada caminho. Como vamos exportar os dados da tabela em diferentes planilhas do Excel, precisamos criar dois destinos do Excel. Para fazer isso, arraste e solte a conexão do Excel da SSIS Toolbox, como mostra a imagem abaixo:
Para configurar o destino do Excel, clique duas vezes em Destino do Excel. O gerenciador de conexões do Excel caixa de diálogo será aberta. Nessa caixa de diálogo, clique em Novo como mostrado na imagem a seguir:
Outra caixa de diálogo chamada Excel Connection Manager vai abrir. Nesta caixa de diálogo, forneceremos um caminho onde o arquivo do Excel está localizado. Criei os Dados do funcionário arquivo na minha área de trabalho. Percorreremos o sistema de arquivos, selecionaremos o arquivo e clicaremos em OK como mostrado na imagem abaixo:
Agora, no modo de acesso a dados caixa suspensa, selecione Tabela ou visualização e no Nome da planilha do Excel caixa suspensa, selecione Austrália$, como mostra a imagem abaixo:
Agora vou configurar o caminho de dados. Para fazer isso, arraste a seta azul do caminho de dados da transformação de divisão condicional para osFuncionários da Austrália componente de destino do excel. Quando você conecta o caminho de dados ao destino do Excel, uma caixa de diálogo aparecerá para escolher a saída que queremos direcionar para o destino selecionado. A caixa de diálogo terá a seguinte aparência:
A caixa de diálogo inclui todas as saídas na lista suspensa, que está disponível na transformação de divisão condicional. Nesse caso, a lista suspensa incluirá duas opções.
- Austrália
- Canadá
- Saída padrão
Clique duas vezes no componente de destino do Excel para mapear as colunas da tabela com as colunas do Excel. Para fazer isso, clique duas vezes no componente de destino do Excel e no Editor de destino do Excel caixa de diálogo, selecione o Mapeamento opção localizada no painel esquerdo da caixa de diálogo, conforme mostrado na imagem abaixo:
Na imagem acima,Coluna de entrada é o nome da coluna da tabela Oracle e Coluna de Destino será o nome da coluna da planilha do Excel. Nesta demonstração, o nome da coluna da tabela e o arquivo do Excel são os mesmos. Portanto, Editor de destino do Excel mapeará automaticamente as colunas de entrada e saída.
Da mesma forma, repetirei o processo de configuração do fluxo de dados para o Canadá caminho de dados.
- Precisamos selecionar Canadá na Seleção de entrada e saída caixa de diálogo, como mostra a imagem abaixo.
- Em Edição de destino do Excel r, selecione Canadá$ no Nome da planilha do Excel caixa suspensa como mostrado na imagem abaixo.
Depois que todas as configurações forem concluídas, toda a tarefa de fluxo de dados terá a seguinte aparência:
Teste do pacote SSIS
Agora vamos executar o pacote e ver como ele funcionou. Para fazer isso, clique no botão Iniciar botão na barra de menus. Se o pacote concluir a execução com êxito, ele deverá ter a seguinte aparência:
Como a imagem acima indica, o pacote inseriu 1 registro na Região da Austrália planilha e 2 registros na Região do Canadá planilha.
Resumo
Neste artigo, criamos um pacote SSIS com um único fluxo de dados. Adicionamos uma transformação de Divisão Condicional ao fluxo de dados para dividir os dados em vários caminhos. Em seguida, direcionamos cada um desses caminhos de dados para diferentes planilhas do Excel.
Referências :
Exporte dados SQL para várias pastas de trabalho de um arquivo do Excel.
Ferramentas úteis:
Componentes de fluxo de dados Devart SSIS – permitem que você integre dados de banco de dados e nuvem por meio do SQL Server Integration Services.
Drivers ODBC Devart – fornecem soluções de conectividade de alto desempenho e ricas em recursos para aplicativos baseados em ODBC.