Baixe o app para aproveitar ainda mais
Prévia do material em texto
Manual de Treinamento de Introdução ao ECL (Parte 2) - ETL com ECL Equipe de Treinamento HPCC Manual de Treinamento de Introdução ao ECL (Parte 2) - ETL com ECL Manual de Treinamento de Introdução ao ECL (Parte 2) - ETL com ECL Equipe de Treinamento HPCC Copyright © 2020 HPCC Systems. All rights reserved Sua opinião e comentários sobre este documento são muito bem-vindos e podem ser enviados por e-mail para <docfeedback@hpccsystem- s.com> Inclua Feedback sobre a documentação no título do email e faça referência ao nome do documento, número de página e número da versão atual no texto da mensagem. LexisNexis e o logotipo Knowledge Burst são marcas comerciais registradas da Reed Elsevier Properties Inc., usadas sob licença. Os demais produtos, logotipos e serviços podem ser marcas comerciais ou registradas de suas respectivas empresas. Todos os nomes e dados de exemplo usados neste manual são fictícios. Qualquer semelhança com pessoas reais, vivas ou mortas, é mera coincidência. 1 de fevereiro de 2020 Versão 7.6.0 © 2020 HPCC Systems. All rights reserved 2 Manual de Treinamento de Introdução ao ECL (Parte 2) - ETL com ECL Visão Geral ........................................................................................................................................ 5 Introdução .................................................................................................................................. 5 Convenções de Documentação ...................................................................................................... 9 Definir e organizar seus dados ............................................................................................................. 10 Exercício 1: Organize suas definições de dados .............................................................................. 10 Relatórios de tabulação ....................................................................................................................... 12 TABLE .................................................................................................................................... 13 Relatórios Cross-Tab ................................................................................................................ 15 Exemplo de tabulação funcional ................................................................................................... 18 Exercício 2a ............................................................................................................................. 19 Exercício 2b ............................................................................................................................. 19 Mais relatórios de avaliação de dados ................................................................................................... 21 DISTRIBUTE "Randômico" ........................................................................................................ 22 HASH32 .................................................................................................................................. 25 Exercício 3a ............................................................................................................................. 26 Exercício 3b ............................................................................................................................. 27 Padrões dos Dados .................................................................................................................... 28 Visualização ............................................................................................................................. 32 Exercício 3c ............................................................................................................................. 37 Exercício 3d ............................................................................................................................. 38 Transformações simples ...................................................................................................................... 39 Estrutura TRANSFORM ............................................................................................................. 39 PROJECT ................................................................................................................................ 42 Exemplo funcional de PROJECT ................................................................................................. 46 ITERATE ................................................................................................................................. 48 Exemplo funcional ITERATE ...................................................................................................... 50 PERSIST .................................................................................................................................. 52 Estrutura SERVICE ................................................................................................................... 53 Node ....................................................................................................................................... 55 Nodes ...................................................................................................................................... 56 Exercício 4a ............................................................................................................................. 57 Exercício 4b ............................................................................................................................. 58 Padronização de dados ....................................................................................................................... 59 SIZEOF ................................................................................................................................... 60 Exercício 5a ............................................................................................................................. 62 Exercício 5b ............................................................................................................................. 63 Criando tabelas lookup ....................................................................................................................... 64 ROLLUP .................................................................................................................................. 65 Exemplo de ROLLUP funcional .................................................................................................. 69 Exercício 6a ............................................................................................................................. 71 Exercício 6b ............................................................................................................................. 71 Juntando arquivos .............................................................................................................................. 72 JOIN ....................................................................................................................................... 73 Exemplo de JOIN funcional ........................................................................................................ 82 INTFORMAT ........................................................................................................................... 85 Exercício 7a ............................................................................................................................. 86 Exercício 7b ............................................................................................................................. 87 Exercício 7c ............................................................................................................................. 88 Soluções para exercícios de laboratório .................................................................................................89 Exercício 1 ............................................................................................................................... 89 Exercício 1 (continuação) ........................................................................................................... 90 Exercício 2a ............................................................................................................................. 91 Exercício 2b ............................................................................................................................. 91 Exercício 3a ............................................................................................................................. 92 © 2020 HPCC Systems. All rights reserved 3 Manual de Treinamento de Introdução ao ECL (Parte 2) - ETL com ECL Exercício 3b ............................................................................................................................. 92 Exercício 3c ............................................................................................................................. 92 Exercício 3d ............................................................................................................................. 93 Exercício 4a ............................................................................................................................. 94 Exercício 4b ............................................................................................................................. 95 Exercício 5a ............................................................................................................................. 96 Exercício 5b ............................................................................................................................. 97 Exercício 6a ............................................................................................................................. 98 Exercício 6b ............................................................................................................................. 99 Exercício 7a ............................................................................................................................ 100 Exercício 7a (continuação) ........................................................................................................ 101 Exercício 7b ............................................................................................................................ 102 Exercício 7c ............................................................................................................................ 103 © 2020 HPCC Systems. All rights reserved 4 Manual de Treinamento de Introdução ao ECL (Parte 2) - ETL com ECL Visão Geral Visão Geral Introdução Bem-vindo ao curso de Introdução ao ECL (parte 2) - o processo de Extração, Transformação e Carregamento (ETL). Este curso contém um conjunto de exercícios práticos, usando os recursos avançados de manipulação de dados da ECL e do HPCC Systems (High Performance Computing Cluster) da LexisNexis, com foco específico na Refinaria de Dados (THOR). Esses exercícios são agrupados por áreas de tópicos avançados, focadas em funções ou recursos específicos da lin- guagem ECL. Uma revisão e discussão aprofundadas das funções ECL utilizadas precederão cada conjunto de exer- cícios. O que é THOR? Thor (o Cluster de Refinaria de Dados) é a parte do HPCC Systems responsável por consumir grandes quantidades de dados, transformar, vincular e indexá-los. Ele funciona como um sistema de arquivos distribuído com poder de processamento paralelo espalhado por vários nós. Um cluster pode escalar de um único nó para milhares de nós. O termo THOR refere-se ao mítico deus nórdico do trovão, com o grande martelo usado como simbolo para esmagar grandes quantidades de dados brutos em informações úteis. Esse processo de "martelar os dados" é mais conhecido como Processo de Extração, Transformação e Carregamento ou ETL (Extract, Transform and Load). Visão Geral do Processo ETL Nesse momento, você deve saber que a ECL (Enterprise Control Language) é uma linguagem centrada em dados pro- jetada e usada apenas com o HPCC Systems (High Performance Computer Cluster). Ele foi projetado especificamente para gerenciamento de dados e processamento de consultas. A linguagem é declarativa; você define quais dados pre- cisa por meio de uma variedade de definições e cria as ações de ECL executadas sobre elas. Tudo começa com sua fonte de dados, que é movida e armazenada no HPCC por meio da Refinaria de Dados THOR. Arquivos de dados e índices adicionais são produzidos e manipulados no processo ETL. Esse processo de ETL pode variar com base no conteúdo e tipo de construção necessário, e no número e tipos de fontes. A extração envolve a importação e a limpeza de dados brutos de várias fontes. O principal objetivo da fase de extração é converter os dados em formatos utilizáveis, adequados ao processamento de transformação de dados no HPCC. Outra parte da fase de extração envolve a análise dos dados extraídos para verificar se os dados atendem a um padrão ou estrutura esperado. Caso contrário, parte ou todos os dados podem ser rejeitados. A transformação envolve a combinação e a coleta de informações de várias fontes. • Mapeamento de campos de origem para layouts de registros comuns usados nos dados. • Divisão ou combinação de arquivos, registros ou campos de origem para corresponder ao layout necessário. • Padronização e limpeza de campos de pesquisa vitais, como nomes, endereços, datas, etc. • Avaliação dos prazos atuais e históricos de informações vitais para identificação cronológica e localização dos su- jeitos. © 2020 HPCC Systems. All rights reserved 5 Manual de Treinamento de Introdução ao ECL (Parte 2) - ETL com ECL Visão Geral • Análise estatística e outras análises diretas dos dados para determinar e manter a qualidade à medida que novas fontes e atualizações são incluídas. O processo de transformação geralmente requer várias etapas, incluindo, entre outras: 1. Mapear e converter dados do campo de origem em layouts de registros comuns, dependendo de sua finalidade. Alguns exemplos incluem: • Combinar vários registros em um único (desnormalizar) ou dividir registros únicos em vários registros filho rela- cionados (normalizar). • Traduzir códigos em descrições e/ou vice-versa. • Divisão de nomes conjuntivos. • Reformatação e validação de campos de data. • Identificar e anexar IDs internos a pessoas, empresas e outras entidades, para vinculá-los entre datasets. 2. Aplique regras de duplicação e combinação a cada dataset de origem e aos datasets de construção comuns, conforme necessário: • Dependendo do tipo de fonte, os datasets são processados. Todos os novos registros serão simplesmente adicionados, os registros existentes podem precisar ser atualizados ou os registros existentes podem ter que ser substituídos. • As duplicatas podem ter que ser identificadas e excluídas ou combinadas com os dados existentes, possivelmente expandindo o período válido dos dados. • Vincular registros entre si, se aplicável, fornecendo linhas de tempo de atividade ou status. Carregamento envolve a produção de índices para entrega de dados ao cliente (ou usuário final). O processo de carregamento envolve a construção de índices e a implantação de dados e consultas em um cluster ROXIE. • Criar um índice é principalmente uma operação de classificação, e é por isso que o THOR é usado para esse processo. • Os índices criados no THOR são geralmente usados em um cluster ROXIE para atender a consultas interativas e para acessar rapidamente um registro específico necessário para uma consulta individual. • Os índices criados no THOR também podem ser usados no THOR/ECL Agent. OBSERVAÇÃO: Nesta aula, focaremos inteiramente as fases de Extração e Transformação do ETL. O processo de carregamento é abordado nos cursos Roxie básico e avançado, mais adiante nestasérie. ECL em ETL - 4 Objetivos Principais Ao iniciar qualquer processo ETL, há quatro (4) objetivos principais pelos quais você deve sempre se esforçar. 1. Entenda (conheça) seus dados. Comece a conhecer seus dados, definindo-os primeiro após o spraying. Em seguida, use os relatórios de tabulação cruzada ("agrupados por" TABLE) para obter contagens de população de campos, determinar a cardinalidade (exclu- sividade) dos valores dos campos-chave (a função COUNT por valor exclusivo) para descobrir possíveis desvios, © 2020 HPCC Systems. All rights reserved 6 Manual de Treinamento de Introdução ao ECL (Parte 2) - ETL com ECL Visão Geral obtenha valores numéricos MAX e MIN para identificar valores reais, intervalos de valores de campo e valores fora do esperado, além de outros problemas possíveis com os dados. Use essas informações para desenvolver estratégias para distribuição uniforme em todos os nós, compactação de dados e arquitetura. 2. Opere apenas com os dados necessários. As seguintes técnicas garantirão esse segundo objetivo: • Atribua IDs de registro exclusivos a todos os dados de entrada Use PROJECT (dataset, COUNTER) ou a posição inicial do arquivo (FILEPOS) para criá-los. • Limpe e padronize os dados conforme apropriado Elementos comuns de padronização são nomes, endereços, datas, horas etc. • Use projeções verticais (“vertical slice” TABLE) Essa técnica permite trabalhar apenas com os campos que você realmente precisa. • Use projeções horizontais (filtros de registro) Essa técnica permite selecionar apenas os registros relevantes para o problema. A filtragem também permite excluir registros com valores NULL nos campos-chave e filtrar dados inválidos ou irrelevantes, a menos que possam ser limpos. 3. Transforme dados no menor formato de armazenamento • Em relação à representação numérica, o tipo UNSIGNED é o melhor. Use INTEGER apenas se forem necessários valores com sinais e, para todos os números, selecione o menor tamanho apropriado para o intervalo de valores. • Os valores de hash são uma ótima técnica para testar a unicidade de valores. O COUNT do DEDUP dos campos com hash deve ser igual ao COUNT dos valores de hash e sempre use um tamanho de hash apropriado: 32-bit (HASH, HASH32), 64-bit (HASH64), e 128-bit (HASHMD5). • Use tabelas de Lookup sempre que possível. Os valores "padrão" de STRING´s podem ser reduzidos para números inteiros representativos e recuperados na saída. 4. Use estratégias que otimizam seu processo ETL • Use o ECL Watch como um Profiler de execução para verificar as contagens de registros e a distribuição/viés de uma etapa para outra. Você também pode usá-lo para verificar o tempo dos subgrafos para identificar os "pontos de acesso" onde a eficiência da execução pode potencialmente ser melhorada. • Mantenha seus dados desduplicados durante todo o processo, especialmente após JOINs. Isso minimiza qualquer efeito de crescimento descontrolado de etapa para etapa que aumentará o tempo de processamento e poderá causar distribuição desigual. Use DEDUP, ALL [um hash dedup] ou SORT e DEDUP. • Mantenha suas distribuições entre nós, mesmo durante todo o processo. Se algum viés se desenvolver em uma etapa por causa da natureza dos dados, use DISTRIBUTE novamente para garantir a eficiência nas etapas subsequentes. • Use GROUP sempre que possível. Sequências complexas de operações (SORT, DEDUP, ITERATE, ROLLUP etc.) são mais eficientes quando todos os dados estão na memória. Use a opção GROUP ALL ou SORT nos dados antes do agrupamento. © 2020 HPCC Systems. All rights reserved 7 Manual de Treinamento de Introdução ao ECL (Parte 2) - ETL com ECL Visão Geral • Use operações do tipo LOCAL na maioria das vezes. LOCAL pode ser usado na maioria das operações, incluindo GROUP e TABLE • Use a opção LOOKUP ou ALL sempre que possível. As opções LOOKUP e ALL em um JOIN carregam todos os registros do arquivo de pesquisa em cada nó, portanto, é implicitamente uma operação LOCAL • Aplique PERSIST em etapas intermediárias/conjuntos de registros. Isso facilitará a depuração de um novo processo e minimizará o tempo de reexecução à medida que partes de um processo forem desenvolvidas, além de fornecer alguma capacidade de recuperação de falhas no sistema • Use OUTPUT(,NAMED) para os principais valores intermediários. Esses valores são armazenados na unidade de trabalho e podem ser analisados para identificar possíveis problemas. © 2020 HPCC Systems. All rights reserved 8 Manual de Treinamento de Introdução ao ECL (Parte 2) - ETL com ECL Visão Geral Convenções de Documentação Linguagem ECL Embora o ECL não faça distinção entre maiúsculas e minúsculas, as palavras-chave reservadas do ECL e as funções built-in deste documento são sempre exibidas com todos os caracteres EM CAIXA ALTA (ALL CAPS) para dar destaque e facilitar a identificação. Nomes Atributos e nomes de conjunto de registros são sempre exibidos no código de exemplo usando caracteres maiúsculos e minúsculos. Palavras fundidas podem ser usadas para identificar explicitamente a finalidade nos exemplos. Código de Exemplo Todos os códigos de exemplo neste documento aparecem com a seguinte fonte: MyDefinitionName := COUNT(People); // MyDefinitionName is a user-defined Definition // COUNT is a built-in ECL function // People is the name of a dataset Ações Nas seções do tutorial, haverá ações explícitas a serem executadas. Tudo isso é mostrado com um marcador para diferenciar as etapas da ação do texto explicativo, conforme mostrado aqui: • As ações do teclado e mouse são todas mostradas em caixa baixa, tais como: CLIQUE DUAS VEZES ou pressione a tecla ENTER . • Os itens na tela a serem selecionados são mostrados em negrito, como: pressione o botão OK para retornar Trechos da Linguagem ECL Este manual contém discussões sobre vários recursos específicos da ECL usados nos exercícios. Esta informação foi extraída do livro Referência a Linguagem ECL. No entanto, nem todas as informações contidas nesse documento foram colocadas neste. Isso significa que você ainda precisa ler o Referência a Linguagem ECL para obter uma discussão completa sobre qualquer recurso da ECL. No caso de qualquer conflito identficado entre este documento e a Referência a Linguagem ECL, agora ou em qualquer versão futura, a autoridade dominante é a Referência a Linguagem ECL. © 2020 HPCC Systems. All rights reserved 9 Manual de Treinamento de Introdução ao ECL (Parte 2) - ETL com ECL Definir e organizar seus dados Definir e organizar seus dados Exercício 1: Organize suas definições de dados Especificação do exercício: Neste primeiro exercício de laboratório, organizaremos as definições RECORD e DATASET em módulos comuns a serem usados no restante deste curso. Use o arquivo ECL das definições Persons e Accounts que criamos na aula Introdução ao ECL como ponto de partida. Requisitos: 1. Crie um novo arquivo de definição EXPORT chamado File_Persons. 2. Crie um novo arquivo de definição EXPORT chamado File_Accounts. 3. No arquivo de definição File_Persons, crie uma estrutura MODULE para conter as definições de RECORD e DATASET de Persons (Dica: você pode copiar seu trabalho do arquivo de definição Persons que você criou na classe Introdução ao ECL). • Crie as seguintes definições de EXPORTAÇÃO na estrutura do módulo para cada definição Persons, respectiva- mente: Layout - para a definição RECORD de Persons File - para a definição DATASET de Persons 4. No arquivo de definição File_Accounts, crie uma estrutura modular para conter as definições de RECORD e DATASET Accounts (Dica: você pode copiar seu trabalho do arquivo de definição Accounts que você criou no curso de Introdução ao ECL). • Crie as seguintes definições de EXPORTAÇÃO na estrutura módular para cada definição de Accounts, respectiva- mente: Layout - para a definição de registros de Accounts File - para a definição de dataset de Accounts Comparação do resultado Teste todas as suas novas definições EXPORTADas em uma nova janela do Buildere verifique se os resultados estão corretos e razoáveis. Correto e razoável significa que as consultas são executadas sem erros e os dados na janela ECL IDE Results parecem corretos. Exemplo: IMPORT TrainingYourName; TrainingYourName.File_Persons.File; TrainingYourName.File_Accounts.File; © 2020 HPCC Systems. All rights reserved 10 Manual de Treinamento de Introdução ao ECL (Parte 2) - ETL com ECL Definir e organizar seus dados Isso encerra o Exercício 1! © 2020 HPCC Systems. All rights reserved 11 Manual de Treinamento de Introdução ao ECL (Parte 2) - ETL com ECL Relatórios de tabulação Relatórios de tabulação © 2020 HPCC Systems. All rights reserved 12 Manual de Treinamento de Introdução ao ECL (Parte 2) - ETL com ECL Relatórios de tabulação TABLE TABLE(recordset, format [, expression [,FEW | MANY] [, UNSORTED]] [, LOCAL] [, KEYED ] [, MERGE ] [, SKEW(limit[, target] ) [, THRESHOLD(size) ] ] [, UNORDERED | ORDERED( bool ) ] [, STABLE | UNSTABLE ] [, PARALLEL [ ( numthreads ) ] ] [, ALGORITHM( name ) ] ) recordset O conjunto para processamento. Pode ser o nome de um dataset ou de um recordset derivado de algumas condições de filtro, ou qualquer expressão que resulte em um recordset derivado. format Uma definição de estrutura RECORD que define o tipo, o nome e a fonte de dados para cada campo. expression Opcional. Especifica uma cláusula "agrupar por". É possível ter mais de uma expressão separada por vírgula para criar uma cláusula de "agrupar por" lógica e única. Se a expressão for um campo do recordset, então há um registro de grupo único na tabela resultante para cada valor distinto da expressão. Do contrário, a expressão é uma expressão de tipo LEFT/RIGHT no modo de DEDUP. FEW Opcional. Indica que a expressão resultará em menos de 10.000 grupos distintos. Isso permite otimização para gerar um resultado significativamente mais rápido. MANY Opcional. Indica que a expressão resultará em vários grupos distintos. UNSORTED Opcional. Especifica que você não se importa com a ordem dos grupos. Isso permite otimização para gerar um resultado significativamente mais rápido. LOCAL Opcional. Especifica que a operação é realizada em cada nó de supercomputador de forma in- dependente, sem exigir interação com todos os outros nós para obter dados; a operação mantém a distribuição de qualquer operação DISTRIBUTE anterior. KEYED Opcional. Especifica que a atividade faz parte de uma operação de leitura de índice, a qual permite que o otimizador gere o código ideal para a operação. MERGE Opcional. Especifica que os resultados são agregados em cada nó e depois os intermediários agregados são novamente agregados globalmente. Esse é um método seguro de agregação que se destaca especialmente bem se os dados adjacentes tiverem sido distorcidos. Se souber que o número de grupos será baixo, então FEW será ainda mais rápido, evitando a classificação local dos dados subjacentes. SKEW Indica que você sabe que os dados não serão espalhados uniformemente entre os nós (serão distorcidos e você opta por substituir o padrão especificando seu próprio valor limite para per- mitir que a tarefa continue, apesar da distorção). limit Um valor entre zero (0) e um (1,0 = 100%) indicando a porcentagem máxima de distorção a ser permitida antes que a tarefa falhe (a distorção padrão é 1,0 / <número de escravos no cluster>). target Opcional. Um valor entre zero (0) e um (1,0 = 100%) indicando a porcentagem máxima de distorção desejada a ser permitida (a distorção padrão é 1,0 / <número de escravos no cluster>). THRESHOLD Indica o tamanho mínimo de uma única parte antes que o limite SKEW seja aplicado. size Um valor inteiro indicando o número mínimo de bytes para uma parte única. O padrão é 1. UNORDERED Opcional. Especifica que a ordem do registro de resultado não é importante. ORDERED Especifica a importância da ordem do registro de resultado. bool Quando for “False” (Falso), especifica que a ordem do registro de resultado não é importante. Quando for “True’ (Verdadeiro), especifica a ordem padrão do registro de resultado. STABLE Opcional. Especifica que a ordem do registro de entrada é importante. UNSTABLE Opcional. Especifica que a ordem do registro de entrada não é importante. © 2020 HPCC Systems. All rights reserved 13 Manual de Treinamento de Introdução ao ECL (Parte 2) - ETL com ECL Relatórios de tabulação PARALLEL Opcional. Tenta avaliar essa atividade em paralelo. numthreads Opcional. Tenta avaliar essa atividade usando os numthreads threads. ALGORITHM Opcional. Substitui o algoritmo usado para essa atividade. name O algoritmo a ser usado para essa atividade. Precisa fazer parte da lista de algoritmos com- patíveis com as opções STABLE e UNSTABLE da função SORT. Return: TABLE retorna uma nova tabela. A função TABLE é similar a OUTPUT, mas, em vez de gravar registros em um arquivo, ela salva esses registros em uma nova tabela (um novo dataset no supercomputador) na memória. A nova tabela é temporária e existe apenas enquanto a consulta específica que a invocou está em execução. A nova tabela herda a lógica implícita que o recordset possui (se aplicável), exceto caso a expressão opcional seja usada para realizar a agregação. Isso significa que o registro primário está disponível ao processar registros de tabela e que você também pode acessar o conjunto de registros secundários de cada registro de tabela. Há duas formas de usar TABLE: a forma de "fatia vertical" e a de "relatório de referência cruzada". Para a forma de "fatia vertical", não há um parâmetro de expressão especificado. O número de registros no recordset de entrada é igual ao número de registros produzidos. Para a forma de "relatório de referência cruzada", normalmente há um parâmetro de expressão e, o mais importante, a estrutura RECORD do formato de resultado contém, no mínimo, um campo que usa uma função agregada com a palavra-chave GROUP como seu primeiro parâmetro. O número de registros produzidos é igual ao número de valores distintos da expressão. Exemplo: //"vertical slice" form: MyFormat := RECORD STRING25 Lname := Person.per_last_name; Person.per_first_name; STRING5 NewField := ''; END; PersonTable := TABLE(Person,MyFormat); // adding a new field is one use of this form of TABLE //"CrossTab Report" form: rec := RECORD Person.per_st; StCnt := COUNT(GROUP); END Mytable := TABLE(Person,rec,per_st,FEW); // group persons by state in Mytable to produce a crosstab Ver também: OUTPUT, GROUP, DATASET, Estrutura RECORD © 2020 HPCC Systems. All rights reserved 14 Manual de Treinamento de Introdução ao ECL (Parte 2) - ETL com ECL Relatórios de tabulação Relatórios Cross-Tab Relatórios de cross-tab são uma maneira bastante útil de descobrir informações estatísticas sobre os dados com os quais você trabalha. Eles podem ser facilmente produzidos usando a função TABLE e as funções agregadas (COUNT, SUM, MIN, MAX, AVE, VARIANCE, COVARIANCE, CORRELATION). O recordset resultante contém um único registro para cada valor único dos campos "agrupar por" especificados na função TABLE, juntamente com as estatísticas geradas com as funções agregadas. Os parâmetros “agrupado por” da função TABLE são usados e duplicados como o primeiro conjunto de campos na estrutura RECORD, seguidos por qualquer número de acionamentos de função agregados, tudo isso usando a palavra- chave GROUP como substituto para o recordset exigido pelo primeiro parâmetro de cada uma das funções agregadas. A palavra-chave GROUP especifica a realização de uma operação agregada no grupo e é o segredo para criar um relatório de cross-tab. Isso cria uma tabela de resultados contendo uma linha única para cada valor único dos parâmetros "agrupar por". Uma CrossTab Simples O código de exemplo abaixo (contido no arquivo CrossTab..ECL) produz um resultado de State/CountAccts com con- tas do dataset secundário aninhado criado pelo código GenData.ECL (consulte o artigo Criando Dados de Exemplo ): IMPORT $; Person := $.DeclareData.PersonAccounts; CountAccts:= COUNT(Person.Accounts); MyReportFormat1 := RECORD State := Person.State; A1 := CountAccts; GroupCount := COUNT(GROUP); END; RepTable1 := TABLE(Person,MyReportFormat1,State,CountAccts ); OUTPUT(RepTable1); /* The result set would look something like this: State A1 GroupCount AK 1 7 AK 2 3 AL 1 42 AL 2 54 AR 1 103 AR 2 89 AR 3 2 */ Pequenas modificações permitirão a produção de algumas estatísticas mais sofisticadas, como: MyReportFormat2 := RECORD State{cardinality(56)} := Person.State; A1 := CountAccts; GroupCount := COUNT(GROUP); MaleCount := COUNT(GROUP,Person.Gender = 'M'); FemaleCount := COUNT(GROUP,Person.Gender = 'F'); END; RepTable2 := TABLE(Person,MyReportFormat2,State,CountAccts ); OUTPUT(RepTable2); © 2020 HPCC Systems. All rights reserved 15 Manual de Treinamento de Introdução ao ECL (Parte 2) - ETL com ECL Relatórios de tabulação Isso adiciona um detalhamento à contagem homens e mulheres em cada categoria, usando o segundo parâmetro op- cional para COUNT (disponível para uso apenas em estruturas RECORD onde seu primeiro parâmetro é a palavra- chave GROUP ). A adição de {cardinality(56)} à definição State é uma dica para o otimizador de que há exatamente 56 valores possíveis nesse campo, permitindo que ele selecione o melhor algoritmo para produzir o resultado da maneira mais rápida possível. As possibilidades são infinitas quanto ao tipo de estatísticas que podem ser geradas em relação a qualquer conjunto de dados. Um exemplo mais complexo Como um exemplo levemente mais complexo, o código a seguir produz uma tabela de resultado de uma cross-tab com o saldo médio de uma transação em um cartão bancário, média elevada do crédito em uma transação com cartão bancário e o saldo total médio em cartões bancários, tabulados por estado e sexo. Esse código demonstra o uso de atributos agregados separados como os parâmetros de valor para a função agregada na cross-tab. IsValidType(STRING1 PassedType) := PassedType IN ['O', 'R', 'I']; IsRevolv := Person.Accounts.AcctType = 'R' OR (~IsValidType(Person.Accounts.AcctType) AND Person.Accounts.Account[1] IN ['4', '5', '6']); SetBankIndCodes := ['BB', 'ON', 'FS', 'FC']; IsBank := Person.Accounts.IndustryCode IN SetBankIndCodes; IsBankCard := IsBank AND IsRevolv; AvgBal := AVE(Person.Accounts(isBankCard),Balance); TotBal := SUM(Person.Accounts(isBankCard),Balance); AvgHC := AVE(Person.Accounts(isBankCard),HighCredit); R1 := RECORD person.state; person.gender; Number := COUNT(GROUP); AverageBal := AVE(GROUP,AvgBal); AverageTotalBal := AVE(GROUP,TotBal); AverageHC := AVE(GROUP,AvgHC); END; T1 := TABLE(person, R1, state, gender); OUTPUT(T1); Um Exemplo Estatístico O exemplo a seguir demonstra as funções VARIANCE, COVARIANCE e CORRELATION para analisar pontos de grade. Ele também mostra a técnica de inserir a cross-tab em uma MACRO, acionando essa MACRO para gerar um resultado específico em um determinado dataset. pointRec := { REAL x, REAL y }; analyze( ds ) := MACRO #uniquename(rec) %rec% := RECORD © 2020 HPCC Systems. All rights reserved 16 Manual de Treinamento de Introdução ao ECL (Parte 2) - ETL com ECL Relatórios de tabulação c := COUNT(GROUP), sx := SUM(GROUP, ds.x), sy := SUM(GROUP, ds.y), sxx := SUM(GROUP, ds.x * ds.x), sxy := SUM(GROUP, ds.x * ds.y), syy := SUM(GROUP, ds.y * ds.y), varx := VARIANCE(GROUP, ds.x); vary := VARIANCE(GROUP, ds.y); varxy := COVARIANCE(GROUP, ds.x, ds.y); rc := CORRELATION(GROUP, ds.x, ds.y) ; END; #uniquename(stats) %stats% := TABLE(ds,%rec% ); OUTPUT(%stats%); OUTPUT(%stats%, { varx - (sxx-sx*sx/c)/c, vary - (syy-sy*sy/c)/c, varxy - (sxy-sx*sy/c)/c, rc - (varxy/SQRT(varx*vary)) }); OUTPUT(%stats%, { 'bestFit: y='+(STRING)((sy-sx*varxy/varx)/c)+' + '+(STRING)(varxy/varx)+'x' }); ENDMACRO; ds1 := DATASET([{1,1},{2,2},{3,3},{4,4},{5,5},{6,6}], pointRec); ds2 := DATASET([{1.93896e+009, 2.04482e+009}, {1.77971e+009, 8.54858e+008}, {2.96181e+009, 1.24848e+009}, {2.7744e+009, 1.26357e+009}, {1.14416e+009, 4.3429e+008}, {3.38728e+009, 1.30238e+009}, {3.19538e+009, 1.71177e+009} ], pointRec); ds3 := DATASET([{1, 1.00039}, {2, 2.07702}, {3, 2.86158}, {4, 3.87114}, {5, 5.12417}, {6, 6.20283} ], pointRec); analyze(ds1); analyze(ds2); analyze(ds3); © 2020 HPCC Systems. All rights reserved 17 Manual de Treinamento de Introdução ao ECL (Parte 2) - ETL com ECL Relatórios de tabulação Exemplo de tabulação funcional Relatórios de tabulação Abra BWR_Training_Examples.Crosstab_Example em uma janela ECL e envie esta consulta: MyRec := RECORD STRING1 Value1; STRING1 Value2; INTEGER1 Value3; END; SomeFile := DATASET([{'C','G',1}, {'C','C',2}, {'A','X',3}, {'B','G',4}, {'A','B',5}],MyRec); MyOutRec := RECORD SomeFile.Value1; GrpCount := COUNT(GROUP); GrpSum := SUM(GROUP,SomeFile.Value3); END; MyTable := TABLE(SomeFile,MyOutRec,Value1); OUTPUT(MyTable); /* MyTable result set is: Rec# Value1 GrpCount GrpSum 1 C 2 3 2 A 2 8 3 B 1 4 */ /* //Example 2: r := RECORD ThorFile.people_thor.lastname; ThorFile.people_thor.gender; GrpCnt := COUNT(GROUP); MaxLen := MAX(GROUP,LENGTH(TRIM(ThorFile.people_thor.firstname))); END; tbl := TABLE(ThorFile.people_thor,r,lastname,gender); output(tbl); /**/ © 2020 HPCC Systems. All rights reserved 18 Manual de Treinamento de Introdução ao ECL (Parte 2) - ETL com ECL Relatórios de tabulação Exercício 2a Especificação do exercício: Crie um relatório cross-tab que conte o número de valores distintos contidos no campo Gender do arquivo Persons. Requisitos: 1. O arquivo de definição EXPORT a ser criado para este exercício é: XTAB_Persons_Gender. 2. Use a qualificação IMPORT $ conforme descrito na documentação sobre IMPORTação no PDF Referência a Lin- guagem ECL . Melhores práticas O texto que antecede este exercício possui um bom código de exemplo semelhante ao que você precisará fazer. Comparação do resultado Use uma janela do Builder para executar uma consulta de saída simples e verifique se o resultado é: N 20508 M 384182 F 404988 U 31722 Exercício 2b Especificação do exercício: Crie um relatório cross-tab que determine os valores máximo e mínimo contidos no campo High Credit do arquivo Accounts. Requisitos: 1. O arquivo de definição EXPORT a ser criado para este exercício é: XTAB_Accounts_HighCredit_MaxMin 2. Use a qualificação IMPORT $ conforme descrito na documentação sobre IMPORTação no PDF Referência a Lin- guagem ECL. Melhores práticas Use o arquivo inteiro como a cláusula agrupar por. Comparação do resultado Use uma janela Builder para executar uma consulta OUTPUT simples e verifique se o resultado é: © 2020 HPCC Systems. All rights reserved 19 Manual de Treinamento de Introdução ao ECL (Parte 2) - ETL com ECL Relatórios de tabulação MIN Value MAX Value 0 9999999 © 2020 HPCC Systems. All rights reserved 20 Manual de Treinamento de Introdução ao ECL (Parte 2) - ETL com ECL Mais relatórios de avaliação de dados Mais relatórios de avaliação de dados © 2020 HPCC Systems. All rights reserved 21 Manual de Treinamento de Introdução ao ECL (Parte 2) - ETL com ECL Mais relatórios de avaliação de dados DISTRIBUTE "Randômico" DISTRIBUTE(recordset [, UNORDERED | ORDERED( bool ) ] [, STABLE | UNSTABLE ] [, PARALLEL [ ( numthreads ) ] ] [, ALGORITHM( name ) ] ) DISTRIBUTE(recordset, expression [, MERGE( sorts ) ] [, UNORDERED | ORDERED(bool ) ] [, STABLE | UNSTABLE ] [, PARALLEL [ ( numthreads ) ] ] [, ALGORITHM( name ) ] ) DISTRIBUTE(recordset, index [, joincondition ] [, UNORDERED | ORDERED( bool ) ] [, STABLE | UNSTABLE ] [, PARALLEL [ ( numthreads ) ] ] [, ALGORITHM( name ) ] ) DISTRIBUTE(recordset, SKEW( maxskew [, skewlimit ] ) [, UNORDERED | ORDERED( bool ) ] [, STABLE | UNSTABLE ] [, PARALLEL [ ( numthreads ) ] ] [, ALGORITHM( name ) ] ) recordset O conjunto de registros a ser distribuído. expression Uma expressão inteira que especifica como distribuir o conjunto de registros, geralmente usando uma das funções HASH para fins de eficiência. MERGE Especifica que os dados são redistribuídos, mantendo a ordem de classificação local em cada nó. sorts As expressões de classificação pelas quais os dados foram localmente classificados. index O nome da definição de um atributo INDEX , que fornece a distribuição adequada. joincondition Opcional. Uma expressão lógica que especifica como vincular os registros ao conjunto de reg- istros e índice. As palavras-chave LEFT e RIGHT podem ser usadas como qualificadores de dataset nos campos do recordset e do índice. SKEW Especifica os valores de distorção de dados permitidos. maxskew Um número de ponto flutuante no intervalo de zero (0,0) a um (1,0) especificando a distorção mínima a ser permitida (0,1=10%). skewlimit Opcional. Um número de ponto flutuante no intervalo de zero (0,0) a um (1,0) especificando a distorção máxima a ser permitida (0,1=10%). UNORDERED Opcional. Especifica que a ordem do registro de resultado não é importante. ORDERED Especifica a importância da ordem do registro de resultado. bool Quando for “False” (Falso), especifica que a ordem do registro de resultado não é importante. Quando for “True’ (Verdadeiro), especifica a ordem padrão do registro de resultado. STABLE Opcional. Especifica que a ordem do registro de entrada é importante. UNSTABLE Opcional. Especifica que a ordem do registro de entrada não é importante. PARALLEL Opcional. Tenta avaliar essa atividade em paralelo. numthreads Opcional. Tenta avaliar essa atividade usando os numthreads threads ALGORITHM Opcional. Substitui o algoritmo usado para essa atividade. name O algoritmo a ser usado para essa atividade. Precisa fazer parte da lista de algoritmos compatíveis com as opções STABLE e UNSTABLE da função SORT. Return: DISTRIBUTE retorna um conjunto de registros. A função DISTRIBUTE redistribui registros do recordset para todos os nós do cluster. “Random” DISTRIBUTE DISTRIBUTE(recordset ) © 2020 HPCC Systems. All rights reserved 22 Manual de Treinamento de Introdução ao ECL (Parte 2) - ETL com ECL Mais relatórios de avaliação de dados Esta forma redistribui o recordset "aleatoriamente" para que não haja distorção de dados entre os nós, porém sem as desvantagens que a função RANDOM() poderia introduzir. Isso é funcionalmente equivalente a distribuição do registro inteiro através de uma hash. Expressão DISTRIBUTE DISTRIBUTE(recordset, expression ) Esta forma redistribui o recordset com base na expressão especificada, normalmente uma das funções HASH . Somente os 32 bits inferiores do valor da expressão são usados; portanto, HASH ou HASH32 são a escolha ideal. Os registros para os quais a expressão apresenta o mesmo resultado que estão no mesmo nó. DISTRIBUTE executa implicitamente uma operação de módulo se o valor da expressão não estiver no intervalo do número de nós disponíveis. Se a opção MERGE for especificada, o recordset precisa ter sido classificado localmente pelas expressões sort . Isso evita uma reclassificação. DISTRIBUTE baseado em Index DISTRIBUTE(recordset, index [, joincondition ] ) Esta forma redistribui o recordset com base na distribuição existente do index especificado, onde a ligação entre os dois é determinada pela joincondition. Os registros para os quais a joincondition é true (verdadeira) terminarão no mesmo nó. DISTRIBUTE baseado em Skew DISTRIBUTE(recordset, SKEW( maxskew [, skewlimit ] ) ) Esta forma redistribui o recordset , mas apenas se for necessário. A finalidade desta forma é substituir o uso de DISTRIBUTE(recordset,RANDOM()) para apenas obter uma distribuição relativamente uniforme dos dados entre os nós. Esta forma sempre tentará minimizar a quantidade de dados redistribuídos entre os nós. A distorção de um dataset é calculada da seguinte forma: MAX(ABS(AvgPartSize-PartSize[node])/AvgPartSize) Se a distorção do recordset for menor do que a do maxskew , então DISTRIBUTE será não operacional. Se o limite de distorção for especificado e se a distorção em qualquer nó exceder esse limite, a tarefa falhará e exibirá uma mensagem de erro (especificando o número do primeiro nó que excedeu o limite); caso contrário, os dados são redistribuídos para garantir que os dados sejam distribuídos com menor distorção que maxskew. Exemplo: MySet1 := DISTRIBUTE(Person); //"random" distribution - no skew MySet2 := DISTRIBUTE(Person,HASH32(Person.per_ssn)); //all people with the same SSN end up on the same node //INDEX example: mainRecord := RECORD INTEGER8 sequence; STRING20 forename; STRING20 surname; UNSIGNED8 filepos{virtual(fileposition)}; END; mainTable := DATASET('~keyed.d00',mainRecord,THOR); nameKey := INDEX(mainTable, {surname,forename,filepos}, 'name.idx'); incTable := DATASET('~inc.d00',mainRecord,THOR); x := DISTRIBUTE(incTable, nameKey, © 2020 HPCC Systems. All rights reserved 23 Manual de Treinamento de Introdução ao ECL (Parte 2) - ETL com ECL Mais relatórios de avaliação de dados LEFT.surname = RIGHT.surname AND LEFT.forename = RIGHT.forename); OUTPUT(x); //SKEW example: Jds := JOIN(somedata,otherdata,LEFT.sysid=RIGHT.sysid); Jds_dist1 := DISTRIBUTE(Jds,SKEW(0.1)); //ensures skew is less than 10% Jds_dist2 := DISTRIBUTE(Jds,SKEW(0.1,0.5)); //ensures skew is less than 10% //and fails if skew exceeds 50% on any node Ver também: HASH32, DISTRIBUTED, INDEX © 2020 HPCC Systems. All rights reserved 24 Manual de Treinamento de Introdução ao ECL (Parte 2) - ETL com ECL Mais relatórios de avaliação de dados HASH32 HASH32(expressionlist) expressionlist Uma lista de valores delimitada por vírgula. Return: HASH32 retorna um único valor. A função HASH32 retorna um valor hash de 32 bits derivado de todos os valores da expressionlist. Ela usa um algoritmo hashing que é mais rápido e menos provável do que o HASH para retornar os mesmos valores a partir de dados diferentes. Espaços no final da string são removidos (ou UNICODE) antes de o valor ser calculado (a conversão para DATA impede isso). Exemplo: MySet := DISTRIBUTE(Person,HASH32(Person.per_ssn)); //people with the same SSN go to same Data Refinery node Ver também: DISTRIBUTE, HASH, HASH64, HASHCRC, HASHMD5 © 2020 HPCC Systems. All rights reserved 25 Manual de Treinamento de Introdução ao ECL (Parte 2) - ETL com ECL Mais relatórios de avaliação de dados Exercício 3a Especificação do exercício: Criar um código Builder Window Runnable (BWR) que determina a cardinalidade do campo Bureau Code do arquivo Persons. A cardinalidade do campo é definida como o número de valores únicos contidos no campo. O código BWR é definido como código ECL projetado para ser executado em uma janela do Builder, mas é armazenado no Repositório da mesma maneira que qualquer definição ECL. Isso implica várias coisas: * Deve conter pelo menos uma ação (explícita ou implícita). * Todos os atributos referenciados do Repositório devem ser totalmente qualificados (ou referenciados pelo IMPORT). * Não contém atributos EXPORT ou SHARED (significa que só pode ser aberta em uma janela do Builder e executado). Requisitos: O arquivo de definição a ser criado para este exercício é: BWR_Persons_BureauCode_Cardinality OBSERVAÇÃO: NÃO use um relatório CrossTab para concluir este exercício! Consulte a seção Melhores Práticas abaixo para obter mais detalhes. Melhores práticas 1. Use o formulário "vertical slice" de TABLE para limitar os dados. 2. Use a funçãoDISTRIBUTE para permitir o uso da opção LOCAL em operações subsequentes. Comparação do resultado Abra o código em uma janela do Builder e execute-o. Verifique se o resultado é 303. © 2020 HPCC Systems. All rights reserved 26 Manual de Treinamento de Introdução ao ECL (Parte 2) - ETL com ECL Mais relatórios de avaliação de dados Exercício 3b Especificação do exercício: Criar código Builder Window Runnable (BWR) que determina a população no campo Dependent Count do arquivo Persons. A população é definida como a porcentagem de registros que contêm valores diferentes de valores "nulos" (geralmente espaços em branco ou zeros). Requisitos: O arquivo de definição a ser criado para este exercício é: BWR_Persons_DependentCount_Population Melhores práticas 1. Use uma definição DATASET em linha para produzir a saída. Comparação do resultado Abra o código em uma janela do Builder e execute-o. Verifique se o resultado é: Total Records 841400 Recs=0 841400 Population Pct 0 © 2020 HPCC Systems. All rights reserved 27 Manual de Treinamento de Introdução ao ECL (Parte 2) - ETL com ECL Mais relatórios de avaliação de dados Padrões dos Dados A funcionalidade Padrão dos Dados (definido como DataPatterns) é um pacote ECL que fornece algumas ferramen- tas básicas de perfil e pesquisa de dados para um programador de ECL. Agora, esse pacote está integrado a todos os relatórios de informações de arquivos lógicos no ECL Watch. Clique na aba Data Patterns do arquivo e, em seguida, Analyze para iniciar a geração do relatório. Nota: seu arquivo lógico deve ter informações de ECL RECORD para iniciar o relatório. No entanto, com a instalação do pacote configurável, você pode executar sua própria análise a qualquer momento a partir de qualquer workunit ECL. OBSERVAÇÃO: A partir do HPCC Versão 7.6, as FUNC- TIONMACROs usadas no pacote DataPatterns agora estão integradas à Referência da Biblioteca Padrão (consulte STD.DataPatterns). Esta seção se concentrará apenas na instalação do pacote. Instalação DataPatterns é instalado como um pacote ECL. Instruções completas para gerenciar pacotes ECL podem ser encon- tradas na documentação em PDF ECL IDE e no HPCC ClientTools. Use a ferramenta de linha de comando ECL para instalar este pacote configurável: ecl bundle install https://github.com/hpcc-systems/DataPatterns.git Pode ser necessário navegar para o diretório bin das ferramentas do cliente antes de executar o comando ou usar o caminho completo para o executável ecl. Após a instalação, todo o código fica disponível aqui após a importação: IMPORT DataPatterns; Observe que é possível usar esse código sem instalá-lo como um pacote. Para fazer isso, basta disponibilizá-lo no seu IDE e ignorar o arquivo Bundle.ecl. Com o IDE do Windows, o diretório DataPatterns não deve ser um item de nível superior na sua lista de repositórios; ele precisa ser instalado um nível abaixo do nível superior, como, por exemplo, abaixo da pasta "Meus arquivos". A FunctionMacro Profile Profile() é um FUNCTIONMACRO para criar um perfil de todo ou parte de um dataset. A saída é um dataset que contém as seguintes informações para cada atributo com perfil: attribute O nome do atributo. given_attribute_type O tipo de ECL do atributo conforme definido no dataset de entrada best_attribute_type Um tipo de dados ECL que permite todos os valores no dataset de entrada e consome a menor quantidade de memória rec_count O número de registros analisados no dataset; isso pode ser menor que o número total de registros, se o argumento sampleSize opcional tiver sido fornecido com um valor menor que 10 fill_count O número de registros rec_count contendo valores diferentes de zero; um 'valor nulo' é uma string vazia, um zero numérico ou um SET vazio; observe que os atributos BOOLEAN são sempre contados como preenchidos, independentemente de seu val- or; Além disso, os atributos DATA de comprimento fixo (por exemplo, DATA10) também são contados como preenchidos, dada sua função típica de reter blobs de dados. fill_rate A porcentagem de registros rec_count contendo valores diferentes de zero; isso é basicamente fill_count / rec_count * 100 cardinality cardinality O número de valores únicos e diferentes de zero do atributo © 2020 HPCC Systems. All rights reserved 28 Manual de Treinamento de Introdução ao ECL (Parte 2) - ETL com ECL Mais relatórios de avaliação de dados cardinality_breakdown Para os atributos com um número baixo de valores únicos e não-nulos, mostre cada valor e o número de registros que contêm esse valor; o parâmetro lcbLimit controla o valor do "número baixo". modes Os valores mais comuns no atributo, depois de converter todos os valores para STRING, juntamente com o número de registros nos quais os valores foram encon- trados; se nenhum valor for repetido mais de uma vez, nenhum modo será mostrado; até cinco (5) modos serão mostrados; observe que valores de STRING maiores que o argumento maxPatternLen serão truncados min_length Para tipos de dados SET, o menor número de elementos encontrado no conjunto; para outros tipos de dados, o menor comprimento de um valor quando expresso como uma STRING; valores nulos são ignorados max_length Para tipos de dados SET, o maior número de elementos encontrados no conjunto; para outros tipos de dados, o maior comprimento de um valor quando expresso como uma STRING; valores nulos são ignorados ave_length Para tipos de dados SET, o número médio de elementos encontrados no conjunto; para outros tipos de dados, o comprimento médio de um valor quando expresso popular_patterns Os padrões mais comuns de valores (veja abaixo) rare_patterns Os padrões menos comuns de valores (veja abaixo). is_numeric. Booleano indicando se o atributo original era um número escalar ou se o valor best_attribute_type era um número escalar; se TRUE, os campos de saída numer- ic_xxxx serão preenchidos com valores reais; se esse valor for FALSE , todos os valores de saída numeric_xxxx devem ser ignorados numeric_min O menor valor não nulo encontrado no atributo como DECIMAL; esse valor é válido apenas se is_numeric for TRUE; se is_numeric for FALSE, zero será mostrado aqui numeric_max O maior valor não-nulo encontrado no atributo como DECIMAL; esse valor é válido apenas se is_numeric for TRUE; se is_numeric for FALSE, zero será mostrado aqui numeric_mean O menor valor não nulo encontrado no atributo como DECIMAL; esse valor é válido apenas se is_numeric for TRUE; se is_numeric for FALSE, zero será mostrado aqui numeric_std_dev O desvio padrão dos valores não nulos no atributo como DECIMAL; esse valor é válido apenas se is_numeric for TRUE; se is_numeric for FALSE, zero será mostra- do aqui numeric_lower_quartile O valor que separa o primeiro (inferior) e o segundo quartil de valores diferentes de zero no atributo como DECIMAL; esse valor é válido apenas se is_numeric for TRUE; se is_numeric for FALSE, zero será mostrado aqui numeric_median O valor mediano não nulo no atributo como DECIMAL; esse valor é válido apenas se is_numeric for TRUE; se is_numeric for FALSE, zero será mostrado aqui numeric_upper_quartile O valor que separa o terceiro e quarto (superior) quartil de valores não nulos dentro do atributo como DECIMAL; esse valor é válido apenas se is_numeric for TRUE; se is_numeric for FALSE, zero será mostrado aqui correlations Um dataset filho contendo valores de correlação comparando o atributo numérico atual com todos os outros atributos numéricos, listados em ordem decrescente do valor de correlação; o atributo deve ser um tipo de dado numérico da ECL; atributos não numéricos retornarão um conjunto de dados filho vazio; observe que essa pode ser uma operação demorada, dependendo do número de atributos numéricos no seu conjunto de dados e do número de linhas (se você tiver N atributos numéricos, serão executados N * (N - 1) / 2 cálculos, cada um verificando todas as linhas de dados) A maioria das saídas do profile() pode ser desativada (consulte as informações sobre os recursosabaixo). © 2020 HPCC Systems. All rights reserved 29 Manual de Treinamento de Introdução ao ECL (Parte 2) - ETL com ECL Mais relatórios de avaliação de dados Os padrões de dados podem fornecer uma ideia da aparência de seus dados quando expressos como uma string (legível por humanos). A função converte cada caractere da cadeia de caracteres em uma paleta de caracteres fixa para produzir um "data pattern" e, em seguida, conta o número de padrões exclusivos para esse atributo. Os padrões mais e menos populares dos dados serão mostrados na saída, juntamente com o número de vezes que o padrão aparece e de um exemplo (escolhido aleatoriamente a partir dos dados reais). A paleta de caracteres usada é: A - Qualquer letra maiúscula a - Qualquer letra maiúscula 9 - Qualquer dígito numérico B - Um valor booleano (verdadeiro ou falso) Todos os outros caracteres são deixados como estão no padrão. PROFILE(inFile, fieldListStr, maxPatterns, maxPatternLen, features, sampleSize, lcbLimit) Parâmetros da função: infile O conjunto de dados a ser processado; pode ser um dataset filho (por exemplo, inFile.childDS); REQUERIDO fieldListStr Uma string contendo uma lista delimitada por vírgula de nomes de atributos a serem processa- dos; observe que os atributos listados aqui devem ser tipos de dados escalares (não registros filhos ou dataset filhos); use uma string vazia para processar todos os atributos no inFile; OPCIONAL, o padrão é uma string vazia maxPatterns O número máximo de padrões (populares e raros) a serem retornados para cada atributo; OPCIONAL, o padrão é 100 maxPatternLen O comprimento máximo de um padrão; padrões mais longos são truncados na saída; esse valor também é usado para definir o comprimento máximo dos dados a serem considerados ao en- contrar os valores de cardinalidade e modo; deve ser 33 ou maior; OPCIONAL, o padrão é 100 features Uma cadeia de caracteres delimitada por vírgula, listando os elementos de criação de perfil a serem incluídos na saída; OPCIONAL, o padrão é uma sequência delimitada por vírgula que contém todas as palavras-chave disponíveis: KEYWORD -----------------AFFECTED KEYWORD fill_rate -----------------------fill_rate,fill_count cardinality -------------------cardinality cardinality_beakdown ----cardinality_breakdown best_ecl_types -------------best_attribute_type modes ------------------------modes lengths -----------------------min_length,max_length,ave_length patterns ----------------------popular_patterns,rare_patterns min_max ---------------------numeric_min,numeric_max mean -------------------------numeric_mean std_dev ----------------------numeric_std_dev quartiles ---------------------numeric_lower_quartile, numeric_median, numeric_upper_quartile correlations -----------------correlations Para omitir a saída associada a uma única palavra-chave, defina esse argumento como uma string delimitada por vírgula contendo todas as outras palavras-chave; observe que a saída © 2020 HPCC Systems. All rights reserved 30 Manual de Treinamento de Introdução ao ECL (Parte 2) - ETL com ECL Mais relatórios de avaliação de dados is_numeric aparecerá apenas se os recursos min_max, mean, std_dev, quartis ou correlations estiverem ativos; Observe também que a ativação do recurso cardinality_breakdown também ativará o recurso cardinalidade, mesmo se não estiver explicitamente ativado sampleSize Um número inteiro positivo representando uma porcentagem do inFile a ser examinado, que é útil ao analisar um dataset muito grande e apenas um perfil de dados estimado é suficiente; o intervalo válido para esse argumento é 1-100; valores fora desse intervalo serão fixados; OPCIONAL, o padrão é 100 (o que indica que todo o conjunto de dados será analisado) lcbLimit Um número inteiro positivo (menor ou igual a 500) indicando a cardinalidade máxima permiti- da para um atributo para emitir uma discriminação dos valores do atributo; este parâmetro será ignorado se cardinality_breakdown não estiver incluído no argumento de recursos; OPCION- AL, o padrão é 64 Aqui está um exemplo muito simples de executar o código completo de criação de perfil de dados: IMPORT DataPatterns; filePath := '~thor::my_sample_data'; ds := DATASET(filePath, RECORDOF(filePath, LOOKUP), FLAT); profileResults := DataPatterns.Profile(ds); OUTPUT(profileResults, ALL, NAMED('profileResults')); © 2020 HPCC Systems. All rights reserved 31 Manual de Treinamento de Introdução ao ECL (Parte 2) - ETL com ECL Mais relatórios de avaliação de dados Visualização O HPCC Systems fornece visualização integrada dos dados de saída em uma variedade de tabelas e gráficos. Você pode visualizar seus dados de três maneiras: • Usando a ferramenta Chart no ECL Playground • Acessando a aba Visualize em todas as ECL workunits • Usando a aba Resources em conjunto com o pacote ECL Visualizer O pacote de visualização é um complemento de código aberto para a plataforma HPCC para permitir que você crie visualizações a partir de consultas gravadas em ECL. As visualizações são um meio importante de transmitir informações de dados maciços (ou "grandes"). Uma boa rep- resentação visual pode ajudar a gerar uma análise acionável. Uma representação visualmente abrangente das infor- mações pode ajudar a tornar o obscuro em algo mais óbvio. Gráficos de pizza, linha, mapas, e outros gráficos nos ajudam a entender as respostas encontradas nas consultas de dados. O processamento de big data é apenas uma parte da solução; também é preciso compreender a complexidade dos dados. Os métodos de visualização dos dados simplificam aquilo que é complexo. O pacote Visualizer amplia a funcionalidade da plataforma HPCC, permitindo plotar seus dados em tabelas, gráficos e mapas para adicionar uma representação visual que pode ser facilmente entendida. Além disso, a estrutura de visualização subjacente suporta recursos avançados para permitir a combinação de gráficos para criar dashboards. Instalação Para instalar, use a interface da linha de comandos da ECL. 1. Faça o download: https://github.com/hpcc-systems/Visualizer/archive/master.zip 2. Descompacte na pasta “Visualizer”: …\Downloads\Visualizer-master.zip -> …\Downloads\Visualizer 3. Instale usando a interface da linha de comandos: ecl bundle install %USERPROFILE%\Downloads\Visualizer Como alternativa, você pode instalar diretamente do GitHub: ecl bundle install https://github.com/hpcc-systems/Visualizer.git Na instalação bem-sucedida, você verá a seguinte mensagem: Instalando o Pacote Visualizer versão 2.0.0 Visualizer 2.0.0 ECL Visualization Bundle Installation complete Observação: Você pode achar mais fácil definir o PATH manualmente para incluir as ferramentas do cliente ECL: set PATH=%PATH%;"c:\Program Files (x86)\HPCCSystems\7.4.0\clienttools\bin" Observação: Para usar o comando "ecl bundle install <git url>", o git deve estar instalado na sua máquina e acessível ao usuário (na variável PATH). © 2020 HPCC Systems. All rights reserved 32 Manual de Treinamento de Introdução ao ECL (Parte 2) - ETL com ECL Mais relatórios de avaliação de dados Categorias de visualização O pacote de visualização separa elementos visuais em 6 categorias. Cada função em sua categoria compartilha parâmet- ros comuns , na maioria dos casos, renderização visual semelhante. Cada categoria também possui uma função de Test integrada para ajudá-lo a obter uma visualização rápida dos elementos visuais visados. Funções de visualização global (helper) Cada um dos tipos de gráficos de visualização individuais conta com as duas (2) funções principais a seguir para auxiliar na execução: • Meta Cria um conjunto de registros de saída especial que contém as meta informações para uso na visualização de destino. Visualização dos resultados da meta-informação. • Grid Usado com a função Meta para renderizar dados na grade ou tabela de dados apropriada. Os mapeamentos podem ser usados para limitar e/ou renomear as colunas. Ambas as funções podem ser usadas fora da visualização para simplesmentemapear seus dados, conforme necessário. Uma função de teste localizada no Visualizer Any também é fornecida para visualizar seus resultados: IMPORT Visualizer; Visualizer.Any.__test; //View the results in the Workunit Resource Tab. Visualizações "ordinais" bidimensionais As visualizações nesta categoria são ideais para dados expressos com dois campos, um Label (string) e um Value (número). Todos os outros campos no dataset são ignorados. Existem cinco funções principais nessa categoria, localizadas na estrutura TwoD MODULE: • Bubble - uma série de círculos cujo tamanho é proporcional ao valor do campo • Pie - um único círculo dividido em fatias proporcionais • Summary - valores são exibidos em intervalos designados • RadialBar - basicamente um gráfico de barras plotado em coordenadas polares, em vez de um plano cartesiano. • WordCloud - uma representação visual de dados de texto, cujo tamanho é proporcional ao seu valor. Teste e visualize todas essas funções com a seguinte função de teste: IMPORT Visualizer; Visualizer.TwoD.__test; Visualizações "lineares" bidimensionais As visualizações nesta categoria usam os gráficos de valores X/Y padrão, também conhecidos como coordenadas cartesianas, e usam um ValueX (número) e um ValueY (número). Todos os outros campos no dataset são ignorados. © 2020 HPCC Systems. All rights reserved 33 Manual de Treinamento de Introdução ao ECL (Parte 2) - ETL com ECL Mais relatórios de avaliação de dados Existem três (3) funções principais nessa categoria, localizadas no TwoDLinear Estrutura MODULE: • Scatter - usa coordenadas cartesianas (X/Y) para exibir valores de ponto para dois campos numéricos em um dataset • HexBin - útil para representar 2 campos numéricos quando você possui muitos pontos de dados. Em vez de se sobrepor, a janela de plotagem é dividida em vários hexbins e o número de pontos por hexbin é contado. A cor indica esse número de pontos. • Contour - uma técnica gráfica que usa linhas de contorno. Uma linha de contorno de uma função de duas variáveis é uma curva ao longo da qual a função tem um valor constante, de modo que a curva une pontos de igual valor. Teste e visualize todas essas funções com a seguinte função de teste: IMPORT Visualizer; Visualizer.TwoDLinear.__test; Visualizações multidimensionais As visualizações nesta categoria são ideais para qualquer matriz numérica de valores, expressa com um Label (string), e umValue1 a ValueN (todos os números). Os dados são renderizados em um gráfico de eixo XY. Todos os outros campos no dataset são ignorados. Existem sete (7) funções principais nessa categoria, localizadas na estrutura MultiD MODULE : • Area - a legenda é plotada no eixo X, e os valores de cada etiqueta são plotados no eixo Y. Os campos comuns são unidos por linha e a área abaixo é sombreada. • Bar - a legenda é plotada no eixo Y e os valores para cada gráfico da barra no eixo X. • Column - semelhante ao Bar, mas o rótulo é plotado no eixo X e os valores associados são representados por barra no eixo Y. • Line - semelhante ao Area, mas nenhuma área sombreada é colorida (somente linhas) • Radar - semelhante ao Area , mas usa um ponto central em um círculo para as coordenadas zero dos eixos X e Y. Pense em um escopo de radar para esse tipo de gráfico. • Scatter - os pontos são marcados apenas neste tipo de gráfico • Step - usa linhas verticais e horizontais para conectar pontos de dados, semelhante a um tipo de exibição em degraus. Teste e visualize todas essas funções com a seguinte função de teste: IMPORT Visualizer; Visualizer.MultiD.__test; Método de Visualização Geoespacial Há um único tipo de gráfico nessa categoria que renderiza dados em um gráfico de relação de entidades. Os dados são mapeados a partir de duas tabelas. A primeira tabela controla os vértices (nós) e cada nó contém três campos; uma coluna de ID usando qualquer tipo de dados, uma string Label e uma string Icon. Esses vértices são conectados por arestas (ou links) e cada aresta contém no mínimo 2 campos que unem ou conectam os vértices. O primeiro campo é um Source ID e o segundo campo é um Target ID. Por exemplo, se eu tiver 3 vértices definidos; Casa - 1, Mulher - 2 e Homem -3, um registro de limite {1,2} vinculará Casa(1) a Mulher(2) e um registro de limite {1,3} vinculará Casa(1) a Homem (3). Um registro de limite {3,2} vincularia Homem(3) a Mulher(2) (consulte a função Test para obter uma ilustração disso). © 2020 HPCC Systems. All rights reserved 34 Manual de Treinamento de Introdução ao ECL (Parte 2) - ETL com ECL Mais relatórios de avaliação de dados Existe uma única função nesta categoria localizada na estrutura Relational MODULE: • Network - monta os vértices e arestas definidos em um gráfico de relação de entidades Teste e visualize este gráfico com a seguinte função de teste: IMPORT Visualizer; Visualizer.Relational.__test; Método de Visualização Geoespacial As visualizações geoespaciais são essencialmente gráficos de mapas, visualizando um valor com uma localização específica. Os dados geoespaciais são expressos com dois campos, o Field 1 é uma STRING que contém um Location Id (dependendo do tipo de gráfico) e um Value (número) que identifica ou colore um local. Todos os outros campos no dataset são ignorados. Os mapeamentos em cada função podem ser usados para associar os campos no dataset de destino aos campos do gráfico. Existem cinco funções principais nessa categoria, localizadas na estrutura MODULE Choropleth : • USStates - Um mapa de estados do EUA que mapeia um código de estado de duas letras com seu valor associado. • USCounties - Um mapa do estado do EUA que mapeia um código numérico do condado FIPS (Federal Information Processing Standard) com seu valor associado. • Euro - um gráfico de mapa base que permite selecionar qualquer país do continente europeu. Um código internacional de duas letras é necessário para a região. • EuroIE - Exemplo de função no pacote que usa a função Euro para mostrar o mapa da Irlanda. • EuroGB - Exemplo de função no pacote que usa a função Euro para mostrar o mapa da Grã-Bretanha. Teste e visualize todas essas funções com a seguinte função de teste: IMPORT Visualizer; Visualizer.Choropleth.__test; Início Rápido O uso do pacote de visualização é essencialmente um processo de três etapas. 1. Prepare seus dados. Muitos pontos podem tornar um gráfico ilegível, poucos pontos diminuem o benefício da análise. 2. Importe a pasta Visualizer. Se você usar o método "git", sua pasta será facilmente localizada. 3. OUTPUT do seus dados usando o atributo NAMED. 4. Chame seu Visualizador gráfico usando o atributo NAMED como sua fonte de gráfico Exemplo: IMPORT $, Visualizer; GenderDS := DATASET([{'Female', 404988}, {'Male', 384182}, {'Neutral', 20508}, {'Unknown', 70722}], {STRING Label,UNSIGNED4 Value}); © 2020 HPCC Systems. All rights reserved 35 Manual de Treinamento de Introdução ao ECL (Parte 2) - ETL com ECL Mais relatórios de avaliação de dados OUTPUT(GenderDS,NAMED('VizPie')); Visualizer.TwoD.Pie('Pie',,'VizPie'); © 2020 HPCC Systems. All rights reserved 36 Manual de Treinamento de Introdução ao ECL (Parte 2) - ETL com ECL Mais relatórios de avaliação de dados Exercício 3c Especificação do exercício: Execute uma análise detalhada do perfil do campo do dataset de treinamento Persons usando a função built-in Profile encontrada na Biblioteca Padrão. Requisitos: 1. O arquivo de definição a ser criado para este exercício é: BWR_Persons_DP 2. Chame a função STD.DataPatterns.Profile que passa o dataset Person EXPORTado como parâmetro. DICA: Você precisará IMPORTar uma referência da Biblioteca Padrão. 3. Gere a saída dos resultados e verifique se os resultados parecem razoáveis. 4. Extra: O que o BestRecordStructure diz sobre a estrutura RECORD que você está usando? Melhores práticas As funções Data Patterns Profile e BestRecordStructure são ferramentas valiosas que fornecemuma análise detal- hada de qualquer conjunto de dados. É possível analisar Data Patterns nas informações de arquivos lógicos no ECL Watch ou executar sua própria criação de perfil usando o pacote configurável ou a Biblioteca PadrãoDataPatterns . Comparação do resultado Envie os resultados do perfil no ECL IDE, no ECL Watch e analise com sua turma e instrutor. © 2020 HPCC Systems. All rights reserved 37 Manual de Treinamento de Introdução ao ECL (Parte 2) - ETL com ECL Mais relatórios de avaliação de dados Exercício 3d Especificação do exercício: Gere e exiba um Gráfico de Mapa de Coropletos do USStates que reflete a população por estado do dataset Persons. Use um arquivo BWR (Builder Window Runnable) para exibir o resultado. Requisitos: 1. O arquivo de definição a ser criado para este exercício é: BWR_StatePopulation 2. Crie um relatório de tabulação cruzada que produz COUNTs por estado. 3. Faça OUTPUT do seu relatório cross-tab e atribua ao resultado um atributo NAMED. 4. Consulte o Manual de Treinamento e instale o pacote do Visualizer usando a técnica git especificada (NOTA: Você também precisará do Git for Windows instalado em sua máquina). 5. Depois que o pacote Visualizer estiver instalado, chame o mapa cloroplético USStates da seguinte maneira: Visualizer.Choropleth.USStates('usStates',,'yourNAMEDattributeHere'); Melhores práticas A chave para uma ótima visualização é entender os dados com os quais você está trabalhando. Muitos pontos de dados podem distorcer e dificultar a leitura do gráfico, e poucos pontos podem diluir a análise. Use a opção Visualize na workunit do ECL Watch e experimente os diferentes estilos de gráfico disponíveis. Depois de encontrar o gráfico que você está procurando, chame a função Visualizer apropriada para renderizar o resultado na aba Resources. A URL na aba Resources pode ser distribuída ao seu usuário final. Comparação do resultado Veja seu resultado na aba ECL Watch Resources da sua workunit. Você deve ver um mapa dos Estados Unidos e a população por estado claramente marcada. © 2020 HPCC Systems. All rights reserved 38 Manual de Treinamento de Introdução ao ECL (Parte 2) - ETL com ECL Transformações simples Transformações simples Estrutura TRANSFORM resulttype funcname ( parameterlist ) := TRANSFORM [, SKIP( condition )] [ locals ] SELF.outfield := transformation; END; TRANSFORM( resulttype, assignments ) TRANSFORM( datarow ) resulttype O nome de um Atributo da estrutura RECORD que especifica o formato dos resulta- dos da função. Você pode usar TYPEOF aqui para especificar um dataset. Nenhuma relação implícita do dataset de entrada é herdada. funcname O nome da função definida pela estrutura TRANSFORM. parameterlist Uma lista separada por vírgulas dos tipos de valores e rótulos dos parâmetros a serem passados para a função TRANSFORM. Normalmente, são registros de dataset ou parâmetros de COUNTER, mas não estão limitados a isso. SKIP Opcional. Especifica a condition na qual a operação da função TRANSFORM é igno- rada. condition Uma expressão lógica que define em que circunstâncias a operação de TRANSFORM não ocorre. Pode usar dados de parameterlist da mesma forma que a expressão trans- formation . locals Opcional. Definições de Atributos locais, úteis dentro da função TRANSFORM. Po- dem ser definidos para receber parâmetros e podem usar qualquer parâmetro passado para TRANSFORM. SELF Especifica o conjunto de registros dos resultados gerados por TRANSFORM. outfield O nome de um campo na estrutura resulttype . transformation Uma expressão que especifica como produzir o valor de outfield. Isso pode incluir outras operações da função TRANSFORM (transformações aninhadas). assignments Uma lista delimitada por ponto e vírgula de definições SELF.outfield:= transformation . datarow Um único registro a transformar. Normalmente, a palavra-chave LEFT. A estrutura TRANSFORM possibilita operações que devem ser executadas em datasets inteiros (como um JOIN) e qualquer tipo iterativo de processamento de registros (PROJECT, ITERATE, etc.). Uma estrutura TRANSFORM define as operações específicas que devem ocorrer registro a registro. Ela define a função chamada a cada vez que a operação que usa TRANSFORM precisa processar registro(s). Uma função TRANSFORM pode ser definida em termos de outra, e elas podem ser aninhadas. A estrutura TRANSFORM especifica exatamente como cada campo do conjunto de resultados deve receber seu valor. O valor do resultado pode ser simplesmente o valor de um campo em um conjunto de registros de entrada ou pode ser o resultado de algum cálculo complexo ou avaliação de expressão condicional. © 2020 HPCC Systems. All rights reserved 39 Manual de Treinamento de Introdução ao ECL (Parte 2) - ETL com ECL Transformações simples A estrutura TRANSFORM em si é uma ferramenta genérica. Cada operação que usa uma função TRANSFORM define o que TRANSFORM precisa receber e qual funcionalidade básica deve fornecer. Portanto, o caminho correto para compreender estruturas TRANSFORM é entender como são usadas pela função que chama a estrutura. Cada função que usa um TRANSFORM documenta o tipo necessário para alcançar o objetivo, embora a própria TRANSFORM também possa fornecer funcionalidades adicionais e receber outros parâmetros além dos necessários para a operação. A opção SKIP especifica a condition que não gera resultados dessa iteração de TRANSFORM. No entanto, os valores COUNTER são incrementados mesmo quando SKIP elimina a criação do registro atual. Definições dos Atributos de Transformação As definições de atributos dentro da estrutura TRANSFORM são usadas para converter os dados passados como parâmetros para o formato resulttype nos resultados. Cada campo no layout do registro resulttype deve ser completa- mente definido no TRANSFORM. Você pode definir explicitamente cada campo usando a expressão SELF.outfield := transformation; , ou pode usar um destes atalhos: SELF := [ ]; limpa campos nos resultados de resulttype que não foram definidos previamente na função de transformação, ao passo que este formato: SELF.outfield := []; //the outfield names a child DATASET in // the resulttype RECORD Structure limpa apenas os campos secundários em outfield, e este formato: SELF := label; //the label names a RECORD structure parameter // in the parameterlist define os resultados de cada campo no formato de resultados de resulttype que não foi definido como oriundo do campo nomeado correspondente do parâmetro label. Você também pode definir atributos local dentro da estrutura TRANSFORM para organizar melhor o código. Esses atributos local podem receber parâmetros. Funções TRANSFORM Esse formato de TRANSFORM deve ser encerrado pela palavra-chave END. O resulttype deve ser especificado, e a própria função recebe parâmetros em parameterlist. Normalmente, esses parâmetros são estruturas RECORD, mas podem ser qualquer tipo de parâmetro, dependendo do tipo de função TRANSFORM esperado pela função que faz a chamada. O formato exato de uma função TRANSFORM está sempre associado diretamente à operação que usa essa função. Exemplo: Ages := RECORD AgedRecs.id; AgedRecs.id1; AgedRecs.id2; END; SequencedAges := RECORD Ages; INTEGER4 Sequence := 0; END; SequencedAges AddSequence(AgedRecs L, INTEGER C) := TRANSFORM, SKIP(C % 2 = 0) //skip even recs INTEGER1 rangex(UNSIGNED4 divisor) := (l.id DIV divisor) % 100; SELF.id1 := rangex(10000); © 2020 HPCC Systems. All rights reserved 40 Manual de Treinamento de Introdução ao ECL (Parte 2) - ETL com ECL Transformações simples SELF.id2 := rangex(100); SELF.Sequence := C; SELF := L; END; SequencedAgedRecs := PROJECT(AgedRecs, AddSequence(LEFT,COUNTER)); //Example of defining a TRANSFORM function in terms of another namesIdRecord assignId(namesRecord l, UNSIGNED value) := TRANSFORM SELF.id := value; SELF := l; END; assignId1(namesRecord l) := assignId(l, 1); //creates an assignId1 TRANSFORM that uses assignId assignId2(namesRecord
Compartilhar