SAD: 4º Projecto DW Limpeza e transformação de dados (SSIS) Suponha a operação de junção aproximada, e que pretende utilizar esta operação para detectar registos aproximadamente duplicados de Clientes..A relação Clientes tem o seguinte esquema: Clientes(clId, nome) A chave clid não pode ser utilizada para detectar duplicados aproximados. Consideram-se duplicados aproximados aqueles registos de Clientes cuja distância de edição entre os seus nomes é inferior ou igual a 2. Considere uma função de distância de edição editdist(s1, s2) que aceita como entradas duas cadeias de caracteres s1, s2 e devolve um número inteiro que representa a distância de edição entre as duas cadeias. a) Qual a instrução SQL que devolve os pares de identificadores de Clientes que correspondem a clientes aproximadamente duplicados. b) A transformação LookUp, utilizada no tutorial do SSIS seria útil para especificar a semântica da instrução SQL de a) no SSIS? Justifique. Se não fôr útil, consegue sugerir uma alternativa? Se sim, explique como funcionaria. Nota: Pesquise informação sobre as Integration Services Transformations dentro dos Data Flow Elements no SQL Server 2008 Books Online. c) Experimente a alternativa da alínea b) (se fôr necessária) no projecto de Integration Services que criou na lição 1 do tutorial Creating a Simple ETL Package, substituindo a transformação LookUp na tabela DimCurrency pela nova transformação. Como parameterizaria a nova transformação e qual o significado? 1
a) Select c1.clid clid1, c2.clid clid2 from Clientes c1, Clientes c2 where editdist(c1.nome, c2.nome) <= 2 and c1.nome!= c2.nome b) O operador Lookup não serviria, pois executa um equi-join entre uma tabela de entrada e outro de referência. A alternativa seria: - operador FuzzyLookup ou FuzzyGrouping 2
Significado do Fuzzy Lookup: Join aproximado entre uma tabela e outra de referência. Primeiro, procura os matches exactos c) Parameterização do FuzzyLookup (faz parte da alínea c)) Tab Reference Table : OLE DB Connection Manager: AdventureWorksDW Generate a New index para quê? Reference Table name: DimCurrency Tab Columns : Arrastar CurrencyKey para CurrencyAlternateKey Seleccionar a checkbox de CurrencyKey Available Lookup columns: os campos que queremos usar para detectar os duplicados CurrencyID? CurrencyKey? Tab Advanced : Maximum nb of matches to output per lookup: 1 Similarity threshold: 0.99, por exemplo. Significado do FuzzyGrouping: detecta semelhanças entre os tuplos da tabela de entrada, determinando quais os aproximadamente duplicados através dos valores de cadeias de caracteres. Como funciona? Acrescenta duas colunas à tabela de entrada: _key_in e _key_out À medida que os tuplos de entrada são processados, o Fuzzy Grouping atribui um ID a cada um deles, que é o _key_in. Quando o Fuzzy Grouping agrupa um cjto de linhas como sendo duplicadas, determina qual deve ser a representante. Então, atribui à coluna _Key_out de todas as linhas no grupo o valor do _key_in do representante. Se só quisermos escrever na saída as linhas representantes, podemos filtrar a saída deste operador, seleccionando só as linhas em que _key_in é igual a _key_out 3
c) O fluxo de dados é composto por: OLE DB Source -> FuzzyGrouping -> OLE DB Destination Parameterização do OLE DB Source: Table: DimCurrency Columns: CurrencyKey, CurrencyAlternateKey, CurrencyName Parameterização do FuzzyGrouping: Tab Columns : CurrencyName Similarity Threshold: 0.9 por exemplo Mostrar os resultados para a tabela DimCurrency: Ex: Russian Ruble ~ Russian Ruble(old) ETL(SSIS) Suponha a seguinte tabela com informação sobre os amigos de um determinado utilizador: username friend1 friend 2 ------------------------------------------------------------------------------ Ana Bernardo Maria Bernardo João Manuel Rodrigo Maria Francisco e a transformação destes dados na tabela que se segue: username friend ---------------------------------------------- Ana Bernardo Ana Maria Bernardo Joao Bernardo Manuel Rodrigo Maria Rodrigo Francisco Em que a coluna Friend foi obtida a partir das colunas Friend1 e Friend2. Note-se que são gerados tantos tuplos por Username, quantas as colunas de Friendi na primeira tabela (que são duas neste exemplo). a) Diga se consegue especificar esta operação em SQL. Se a resposta fôr afirmativa, apresente a instrução SQL correspondente. b) Indique se conseguiria especificar esta transformação no SSIS. Em caso afirmativo, indique que transformação de dados do SSIS usaria. Nota: Pesquise informação sobre as Integration Services Transformations dentro dos Data Flow Elements no SQL Server 2008 Books Online. 4
a) Select username, friend1 as friend from friends union select username, friend2 as friend from friends O Resultado podia ou não estar ordenado por username. b) Unpivot: transforma valores de múltiplas colunas para um único registo em múltiplos registos com uma única coluna. Utilização: data flow: OLE DB Source -> Unpivot -> OLE DB Destination parameterização: input column : friend1, friend2 destination column : friend pivot key values : friend1, friend2 5
Ou UnionAll para implementar no SSIS a mesma semântica da alínea a). 1) Dois OLE DBSource, fazendo a projecção username, Friendi 2) UnionAll dos resultados de 1) 3) OLE DBdestination para inserir os resultados numa tabela de saída com esquema username, Friend. 6