Best Practices SSIS 2008 for Starters



Documentos relacionados
Manual Dashboard XD. (Versão 0.91 Beta)

CIÊNCIA E TECNOLOGIA DO RIO

EXEMPLOS DE COMANDOS NO SQL SERVER

Limpeza e transformação de dados (SSIS)

Curso: SQL Básico. Padrão de linguagem de consulta relacional aceito pelos comitês ANSI e ISO.

BANCO DE DADOS -INTRODUÇÃO AO SQL. Prof. Angelo Augusto Frozza, M.Sc.

ORACLE 11 G INTRODUÇÃO AO ORACLE, SQL,PL/SQL. Carga horária: 32 Horas

Consistem num conjunto de apontadores para instâncias especificas de cada relação.

Comandos de Manipulação

Bases de Dados 2005/2006. Aula 5

SQL TGD/JMB 1. Projecto de Bases de Dados. Linguagem SQL

Banco de Dados Oracle 10g: Introdução à Linguagem SQL

BD SQL Server. Licenciatura em Engenharia Informática e Computação. Bases de Dados 2003/04

Linguagem SQL Parte I

Linguagem SQL (Parte I)

PL/SQL. Profa. Dra. Cristina Dutra de Aguiar Ciferri. Laboratório de Bases de Dados PL/SQL

Tarefa Orientada 18 Procedimentos armazenados

SQL Procedural. Josino Rodrigues Neto

COMPETÊNCIAS ESPECÍFICAS Compreender e utilizar a linguagem SQL, na construção e manutenção de uma base de dados.

SQL CREATE DATABASE. MySQL, SQL Server, Access, Oracle, Sybase, DB2, e outras base de dados utilizam o SQL.

CREATE TABLE AUTOR ( cod_autor int not null primary key, nome_autor varchar (60) )

Introdução à linguagem SQL

Introdução à Banco de Dados. Nathalia Sautchuk Patrício

PROGRAMA. Aquisição dos conceitos teóricos mais importantes sobre bases de dados contextualizados à luz de exemplos da sua aplicação no mundo real.

Projeto de Banco de Dados: Empresa X

SQL (Structured Query Language)

1. Assinale as afirmações que são verdadeiras e as que são falsas, corrigindo-as:

Structured Query Language (SQL)

Prof. Carlos Majer Aplicações Corporativas UNICID

TECNOLOGIA EM SISTEMAS PARA INTERNET PROJETO DE BANCO DE DADOS

BD Oracle. Licenciatura em Engenharia Informática e Computação. Bases de Dados 2003/04

AULA 2 INTERAÇÃO COM O BANCO DE DADOS

Regras de Negócios é com o Elefante!

Roteiro 9 - SQL Básico: chave estrangeira, operadores de comparação e operadores booleanos

SQL Avançado Continuação. Renata Viegas

Banco de Dados. Maurício Edgar Stivanello

Tarefa Orientada 13 Agrupamento e sumário de dados

Treinamento PostgreSQL - Aula 03

Manter estatísticas atualizadas é uma das regras de ouro na busca por performance.

Oracle PL/SQL Overview

Programação SQL. Manipulação de Dados. DML Data Manipulation Language

Ex.: INSERT INTO tmpautor (CDAUTOR, NMAUTOR) VALUES (1, Renato Araújo )

Banco de Dados I Módulo V: Indexação em Banco de Dados. (Aulas 4) Clodis Boscarioli

Programação SQL. INTRODUÇÃO II parte

Bases de Dados 2007/2008. Aula 8

AULA 2 INTERAÇÃO COM O BANCO DE DADOS

Aplicabilidade: visão geral

Linguagem de Consulta Estruturada SQL- DML

Laboratório 1 SQL Server Integration Services

Ex.: INSERT INTO tmpautor (CDAUTOR, NMAUTOR) VALUES (1, Renato Araújo )

Pontifícia Universidade Católica do Rio Grande do Sul FACULDADE DE INFORMÁTICA PROGRAMA DE PÓS-GRADUAÇÃO EM CIÊNCIA DA COMPUTAÇÃO.

f. Vocês podem selecionar todos os campos indicando-os, ou seja, sem usar * (boa prática) g. Muito relevante na manutenção de BD e de aplicações.

Profº Aldo Rocha. Banco de Dados

Exercícios. Exercícios

ANÁLISE DE DADOS. Familiarização com o SPSS


O dono de uma livraria cuja base de dados é administrada por si pediu-lhe para efectuar as seguintes alterações ao preço dos livros:

DataBase Refactoring em FireBird

SCRIPTS. Definindo Novos Tipos de Dados. Adicionando. Removendo. Criando Tabelas

Programação SQL. Introdução

Tarefa Orientada 10 Obter informação a partir de uma tabela

10. Acessando o Banco de Dados através do Visual Basic

SQL. Prof. Márcio Bueno.

Programação WEB II. PHP e Banco de Dados. progweb2@thiagomiranda.net. Thiago Miranda dos Santos Souza

FUNCTION ) RETURNS INTEGER AS $$ DECLARE

Linguagem SQL. Comandos Básicos

Partitioning Partitioning table App. Partitioning SQL Server Partitioning Vantagens Partitioning Exemplo Passos a dar

Histórico de revisões

Tarefa Orientada 14 Subconsultas

IF685 Gerenciamento de Dados e Informação - Prof. Robson Fidalgo 1

Bases de Dados 1º semestre

Módulo Básico. Assando Sites. Relacionamentos, Validação, Consultas e Páginas Dinâmicas. Assando Sites

PL/pgSQL por Diversão e Lucro

Parte 5 LibreOffice Base

Administração e Optimização de BDs

SQL (Structured Querie Language) Escola Secundária de Emídio Navarro 2001/2002 Estruturas, Tratamento e Organização de Dados

SQL Linguagem de Manipulação de Dados. Banco de Dados Profa. Dra. Cristina Dutra de Aguiar Ciferri

Administração de Banco de Dados

SQL Linguagem de Definição de Dados. Laboratório de Bases de Dados Profa. Dra. Cristina Dutra de Aguiar Ciferri

Laboratório 4. Base de Dados II 2008/2009

Um objeto de estatística contém informações de distribuição de valores de uma ou mais colunas de uma tabela ou view indexada

PROGRAMA. Objectivos Gerais :

Linguagem SQL. ENG1518 Sistemas de Informação Gerenciais Prof. Marcos Villas

Apresentação Modelo e SQL. André Luiz Montevecchi

MySQL: Inserção e Seleção em Tabelas

Gerenciamento de um Sistema de

Tarefa Orientada 19 Triggers

Banco de Dados. Prof. Antonio

UFCD 787. Administração de base de dados. Elsa Marisa S. Almeida

BANCO DE DADOS. info 3º ano. Prof. Diemesleno Souza Carvalho

Structured Query Language (SQL) Ambiente Simplificado de um SGBD

Structured Query Language (SQL) Aula Prática

Banco de Dados. Marcio de Carvalho Victorino Exercícios SQL

Gabarito - Banco de Dados SQL - 30/07/2013 AULA 01

Banco de Dados I. Aula 12 - Prof. Bruno Moreno 04/10/2011

Sistema de Controle de Estoque

Projeto de Banco de Dados

Transcrição:

Best Practices SSIS 2008 for Starters A Fast Introduction By @Tiago Palhota tiago.palhota@gmail.com

Index Design - Anotações - Containers - Expressões - Mapping de colunas Performance - SELECT * / Table View - FastParse - Componentes Síncronos vs Componentes Assíncronos - Dicas adicionais Software adicional

Design - Anotações Perceber o contexto das tarefas a executar Ajuda a fazer debugging Relembrar o próprio criador do package do que foi feito

Design - Anotações ( Exemplo )

Design - Containers Containers podem ser definidos como um grupo de trabalho. Vantagens: Separação da execução de tasks Transacções - All or nothing

Design - Containers ( Exemplo )

Design - Expressões Úteis para tornar valores dinâmicos Uteis para criar queries dinâmicas Não usar na propriedade de Disable das taks. Usar em vez disso nas precedências ( Visibilidade )

Design - Mapping Columns Utilizar SEMPRE o mesmo nome dos campos estão nas Destinations

Performance - Select * Tamanho do Buffer Tamanho estimado por Linha = SUM(MAXSIZE(EachColumn)) Default BufferSize = 100MB Menos colunas = Mais Linhas por Buffer Menos Buffers = Maior Performance Solução? Usar apenas as colunas necessárias

FastParse Prevenir que dados incorrectos sejam passados pelo data Flow Default = False Usado nos tipos de dados NUMERIC / DATETIME Quebra de performance na ordem dos 15-35% Usar apenas quando os dados provém de origem fiável

FastParse

Performance - Componentes Síncronos vs Componentes Assíncronos

Performance - Componentes Síncronos vs Componentes Assíncronos Componentes Síncronos: Processamento linha a linha Podem criar novas colunas no buffer Não criam novas linhas ( 1:1 ) Reutilização de Buffer Exemplos : Derived Column / Multicast / Data Conversion

Performance - Componentes Síncronos vs Componentes Assíncronos Componentes Assíncronos: Divide-se em Blocagem Parcial - union all, merge, merge join,etc Blocagem total - sort, aggregate,etc Input <> Output 1:M Alocação de um buffer novo Todas as sources são assíncronas

Dicas adicionais Ordenar na Source ( ORDER BY + propriedade issorted = True) Agregações na Source Joins na Source Evitar casts desnecessários( Exemplo flat files c/ definição de dados na source ) Utilização de Transacções Escolha inteligente de dataypes de forma a reduzir a quantidade de memória necessária. Utilizar Ficheiros de Configuração

Software Adicional PoorSQL Formatter ( http://poorsql.com/ ) Bids Helper ( http://bidshelper.codeplex.com/ )

Grandes amigos! declare @data_inicio as datetime; declare @data_fim as datetime; set @data_inicio = datediff(mm, -1, getdate()); set @data_fim = getdate(); SELECT BD.id AS [Cod Teleperformance], S.sponsor_BD AS [TP DB], id_campanha as [ID Campanha], BD.dataload as [Dataload], CASE BD.STATUS WHEN 1 THEN CASE termination_status_desc WHEN 'Trunk line overflow' THEN 'Dados Errados' WHEN 'Handled' THEN CASE descricao_cu WHEN 'CU_NEG' THEN 'Não interessado' WHEN 'CU' THEN 'Interessado' ELSE CASE T.name WHEN '4' THEN 'Agendamento' WHEN '5' THEN 'Agendamento sem atendimento' WHEN '6' THEN 'Agendamento sem atendimento' WHEN 'M' THEN 'Agendamento' WHEN 'J' THEN 'Não interessado' WHEN 'Z' THEN 'Não interessado' WHEN 'S' THEN 'Inelegível invalidez' WHEN 'W' THEN 'Inelegível invalidez' WHEN 'Y' THEN 'Inelegível invalidez' WHEN 'T' THEN 'Indisponível no Horário da campanha' WHEN 'E' THEN 'Dados Errados' WHEN 'U' THEN 'Não quer responder' WHEN 'I' THEN 'Inelegível idade' WHEN 'Q' THEN 'Outras' ELSE isnull(resultado_desc, '') END END WHEN 'Nuisance' THEN 'Indisponível no Horário da campanha' WHEN 'Busy' THEN 'Indisponível no Horário da campanha' WHEN 'No Answer' THEN 'Indisponível no Horário da campanha' WHEN 'Invalid Number' THEN 'Dados Errados' WHEN 'Rejected' THEN 'Dados Errados' ELSE isnull(termination_status_desc, '') END WHEN 18 THEN 'Inelegível idade' WHEN 19 THEN 'Inelegível idade' WHEN 50 THEN 'Dados Errados' WHEN 13 THEN 'Outras' WHEN 17 THEN 'Outras' WHEN 10 THEN CASE [Tp_clientes_Metlife_Out].[dbo].GetRepeatBD(BD.id,BD.in_telefone,S.sponsor_BD) WHEN 0 THEN 'Repeated between Campaigns' ELSE 'Repeated Value' END WHEN 11 THEN CASE [Tp_clientes_Metlife_Out]. [dbo].getrepeatbd(bd.id,bd.in_telefone,s.sponsor_bd) WHEN 0 THEN 'Repeated between Campaigns' ELSE 'Repeated Value' END WHEN 16 THEN CASE [Tp_clientes_Metlife_Out]. [dbo].getrepeatbd(bd.id,bd.in_telefone,s.sponsor_bd) WHEN 0 THEN 'Repeated between Campaigns' ELSE 'Repeated Value' END ELSE isnull(bd.erro, '') END AS [Resultado], CASE descricao_cu WHEN 'CU_NEG' THEN resultado_desc END AS [Motivo n/ Interessado], T.[start_time] AS [Data de Contacto], BD.in_telefone AS [Telefone1], isnull(bd.in_telefone2, BD.in_telemovel) AS [Telefone2], [Tp_clientes_Metlife_Out]. [dbo].firstname(replace(upper(bd.in_nome), '"', '')) AS [Nome], [Tp_clientes_Metlife_Out]. [dbo].lastname(replace(upper(bd.in_nome), '"', ''), 100) AS [Apelido], BD.in_email AS [email], DATEDIFF(year, BD.in_data_nasc, @data_fim) - CASE WHEN DATEADD(yy, DATEDIFF(yy, BD.in_data_nasc, @data_fim), BD.in_data_nasc) > @data_fim THEN 1 ELSE 0 END as [Idade], BD.in_data_nasc AS [Data de Nascimento], BD.dataload AS [Data de chegada do registo], 'TLP' + RIGHT(REPLICATE('0', 10) + cast(t.easycode as varchar), 10) as [Lead Number], CASE T.STATUS WHEN 3 THEN isnull(t.moment, dateadd(second, T.duracao_seg, T.start_time)) END AS [Data de fecho da Lead], BD.in_passatempo as [URL Origem] FROM [Tp_clientes_Metlife_Out].[dbo].BD_mlife_coreg AS BD LEFT JOIN ( SELECT T.id_registo, T.[start_time], T.[usr_name], T.[termination_status], T.[easycode], T.[status], T.[moment], T.[name], T.[codigo_bd], cast(t.[duration] AS INT) / 10 AS duracao_seg, D.[descricao_aig_code] AS termination_status_desc, R.descricao_aig_code AS resultado_desc, descricao_cu FROM [Tp_clientes_Metlife_Out].[dbo]. [TMP_Diario_Tentativas] AS T INNER JOIN ( SELECT easycode, max(start_time) AS start_time FROM [Tp_clientes_Metlife_Out].[dbo].[TMP_Diario_Tentativas] WHERE start_time BETWEEN DATEADD(dd, DATEDIFF(dd, 0, @data_inicio), 0) AND DATEADD(ms, -3, DATEADD(day, DATEDIFF(day, 0, @data_fim), 1)) GROUP BY easycode ) TU ON T.easycode = TU.easycode AND T.start_time = TU.start_time LEFT JOIN [Tp_clientes_Metlife_Out].[dbo]. [PAR_StatusTerminationCallOutcomeCode] AS D ON T.termination_status = D.TP_code LEFT JOIN [Tp_clientes_Metlife_Out].[dbo].[PAR_StatusOutcomeCode] AS R ON T.NAME = R.TP_code ) AS T ON BD.id = T.id_registo AND BD.codigo_bd = T.codigo_bd INNER JOIN [Tp_clientes_Metlife_Out].[dbo].[PAR_BD_CARREGADA] C ON C.id = BD.codigo_bd INNER JOIN [Tp_clientes_Metlife_Out].[dbo].[PAR_SPONSOR_BD] S ON S.id = C.id_sponsor_bd WHERE ISNULL([start_time], BD.dataload) BETWEEN DATEADD(dd, DATEDIFF(dd, 0, @data_inicio), 0) AND DATEADD(ms, -3, DATEADD(day, DATEDIFF(day, 0, @data_fim), 1));

Friends Again! DECLARE @data_inicio AS DATETIME; DECLARE @data_fim AS DATETIME; SET @data_inicio = datediff(mm, - 1, getdate()); SET @data_fim = getdate(); SELECT BD.id AS [Cod Teleperformance], S.sponsor_BD AS [TP DB], id_campanha AS [ID Campanha], BD.dataload AS [Dataload], CASE BD.STATUS WHEN 1 THEN CASE termination_status_desc WHEN 'Trunk line overflow' THEN 'Dados Errados' WHEN 'Handled' THEN CASE descricao_cu WHEN 'CU_NEG' THEN 'Não interessado' WHEN 'CU' THEN 'Interessado' ELSE CASE T.NAME END AS [Idade], BD.in_data_nasc AS [Data de Nascimento], BD.dataload AS [Data de chegada do registo], 'TLP' + RIGHT(REPLICATE('0', 10) + cast(t.easycode AS VARCHAR), 10) AS [Lead Number], CASE T.STATUS WHEN 3 THEN isnull(t.moment, dateadd(second, T.duracao_seg, T.start_time)) END AS [Data de fecho da Lead], BD.in_passatempo AS [URL Origem] FROM [Tp_clientes_Metlife_Out].[dbo].BD_mlife_coreg AS BD L D.[descricao_aig_code] AS termination_status_desc, R.descricao_aig_code AS resultado_desc, descricao_cu GROUP BY easycode ) TU ON T.easycode = TU.easycode AND T.start_time = TU.start_time LEFT JOIN [Tp_clientes_Metlife_Out].[dbo].[PAR_StatusTerminationCallOutcomeCode] AS D ON T.termination_status = D.TP_code LEFT JOIN [Tp_clientes_Metlife_Out].[dbo].[PAR_StatusOutcomeCode] AS R ON T.NAME = R.TP_code ) AS T ON BD.id = T.id_registo (...)

Bids Helper

Dúvidas / Sugestões?

Best Practices SSIS 2008 for Starters Obrigado!