BR112021006722A2 - carregamento incremental correlacionado de múltiplos conjuntos de dados para um aplicativo de preparação de dados interativo - Google Patents

carregamento incremental correlacionado de múltiplos conjuntos de dados para um aplicativo de preparação de dados interativo Download PDF

Info

Publication number
BR112021006722A2
BR112021006722A2 BR112021006722-1A BR112021006722A BR112021006722A2 BR 112021006722 A2 BR112021006722 A2 BR 112021006722A2 BR 112021006722 A BR112021006722 A BR 112021006722A BR 112021006722 A2 BR112021006722 A2 BR 112021006722A2
Authority
BR
Brazil
Prior art keywords
data
user
rows
implementations
data source
Prior art date
Application number
BR112021006722-1A
Other languages
English (en)
Inventor
William Pugh
Mengxi Chen
Isaac Kunen
Original Assignee
Tableau Software, Inc.
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Priority claimed from US16/155,818 external-priority patent/US10885057B2/en
Application filed by Tableau Software, Inc. filed Critical Tableau Software, Inc.
Publication of BR112021006722A2 publication Critical patent/BR112021006722A2/pt

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/20Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
    • G06F16/25Integrating or interfacing systems involving database management systems
    • G06F16/252Integrating or interfacing systems involving database management systems between a Database Management System and a front-end application
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/20Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
    • G06F16/26Visual data mining; Browsing structured data

Landscapes

  • Engineering & Computer Science (AREA)
  • Databases & Information Systems (AREA)
  • Theoretical Computer Science (AREA)
  • Data Mining & Analysis (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • User Interface Of Digital Computer (AREA)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)

Abstract

SISTEMA DE COMPUTADOR E MÉTODO PARA PREPARAR DADOS PARA ANÁLISE SUBSEQUENTE, E MEIO DE ARMAZENAMENTO LEGÍVEL POR COMPUTADOR NÃO TRANSITÓRIO. Trata-se de uma interface do usuário que inclui um painel de fluxo de dados e um painel de perfis. O painel de fluxo de dados exibe um fluxograma que identifica uma fonte de dados. Para cada uma das várias consultas à fonte de dados, o processo emite a consulta à fonte de dados assincronamente com um tamanho de bloco inicial. Quando da recuperação do conjunto de linhas inicial, o processo repete a consulta assincronamente com um tamanho de bloco atualizado até que todas as linhas sejam recuperadas. Periodicamente, o processo determina uma marca de preamar para as linhas advindas da fonte de dados que foram recuperadas para todas as consultas. Quando a marca de preamar muda, o processo atualiza o painel de perfis para exibir histogramas de valores de dados para vários campos de dados na fonte de dados. Cada barra em cada histograma de valores de dados conta as linhas abaixo da marca de preamar que possuem um único valor de dados específico ou uma faixa de valores de dados.

Description

"SISTEMA DE COMPUTADOR E MÉTODO PARA PREPARAR DADOS PARA ANÁLISE SUBSEQUENTE, E MEIO DE ARMAZENAMENTO LEGÍVEL POR COMPUTADOR NÃO TRANSITÓRIO" CAMPO TÉCNICO
[001]As implementações reveladas referem-se, em geral, à visualização de dados e, mais especificamente, a sistemas, métodos e interfaces do usuário para preparar e curar dados para uso por um aplicativo de visualização de dados.
FUNDAMENTOS DA INVENÇÃO
[002]Os aplicativos de visualização de dados permitem ao usuário entender um conjunto de dados visualmente, incluindo a distribuição, tendências, valores discrepantes e outros fatores que são importantes para tomar decisões de negócios. Alguns conjuntos de dados são muito grandes ou complexos e incluem muitos campos de dados. Várias ferramentas podem ser usadas para ajudar a entender e analisar os dados, inclusive painéis com múltiplas visualizações de dados. No entanto, frequentemente os dados precisam ser manipulados ou massageados para colocá-los em um formato que possa ser facilmente usado por aplicativos de visualização de dados. Por vezes, várias ferramentas de ETL (Extração / Transformação / Carregamento) são usadas para construir fontes de dados úteis.
[003]Há dois modelos dominantes no setor da ETL e preparação de dados hoje. Sistemas no estilo fluxo de dados focam o usuário nas operações e fluxo dos dados através do sistema, o que ajuda a dar claridade sobre a estrutura geral do trabalho e facilita o controle dessas etapas por parte do usuário. Esses sistemas, contudo, geralmente fazem um péssimo trabalho em exibir ao usuário seus dados reais, o que dificulta que eles realmente entendam o que foi feito e o que precisa ser feito com seus dados. Esses sistemas também podem sofrer com a explosão de nós. Quando cada pequena operação tem seu próprio nó em um diagrama, até mesmo um fluxo moderadamente complexo pode tornar-se uma confusão de nós e bordas.
[004]Por outro lado, os sistemas no estilo roda de oleiro apresentam ao usuário uma interface muito concreta no estilo planilha para seus dados reais e permitem ao usuário esculpi-los através de ações diretas. Embora os usuários estejam na verdade criando um fluxo de dados nesses sistemas, tal fluxo geralmente é obscurecido, dificultando que o usuário entenda e controle a estrutura geral de seu trabalho.
[005]No caso de grandes conjuntos dados, algumas ferramentas de preparação de dados carregam os dados com muita lentidão. Por exemplo, pode haver muitas consultas acontecendo sincronamente, de modo que o usuário precisa aguardar que todos os dados carreguem. Alguns sistemas tentam reduzir a percepção de lentidão rodando as consultas assincronamente para carregar os dados. No entanto, o carregamento assíncrono continua impedindo a interação do usuário com os dados e a interface pode exibir dados inconsistentes na medida em que exibe dados para cada uma das diferentes consultas assíncronas independentemente.
SUMÁRIO
[006]As implementações reveladas tratam os problemas com as ferramentas de preparação de dados existentes de várias maneiras. A execução de várias consultas assíncronas reduz o tempo para carregar os dados, e os dados das várias consultas são coordenados para que a interface do usuário sempre exiba dados consistentes. Além disso, enquanto os dados carregam, o usuário pode interagir imediatamente com eles para fazer as mudanças desejadas. As mudanças são aplicadas aos dados que já estão sendo exibidos, e, à medida que novos dados da consulta chegam, as mesmas mudanças também são aplicadas às novas linhas de dados.
[007]De acordo com algumas implementações, um sistema de computador para preparar dados para uma análise subsequente possui um ou mais processadores e memória.
A memória armazena um ou mais programas configurados para execução pelos um ou mais processadores.
Os um ou mais programas compreendem instruções executáveis.
O sistema exibe uma interface do usuário que inclui um painel de fluxo de dados, um painel de perfis e um painel de dados.
O painel de fluxo de dados exibe um fluxograma de nós/ligações que identifica uma fonte de dados.
Para cada uma das várias consultas à fonte de dados, o sistema emite a consulta à fonte de dados assincronamente com um tamanho de bloco inicial que especifica um número de linhas.
Quando um conjunto inicial de linhas é recuperado da fonte de dados, o qual satisfaz a respectiva consulta, o sistema repete a consulta assincronamente com um tamanho de bloco atualizado até que tenham-se recuperado todas as linhas que satisfaçam a consulta.
O sistema armazena as linhas recuperadas que satisfazem a respectiva consulta em um cache local.
Periodicamente (por exemplo, com base em um temporizador ou no recebimento de resultados de consulta de uma das consultas), o sistema determina um identificador exclusivo que identifica linhas advindas da fonte de dados que foram recuperadas e armazenadas no cache local para todas as consultas.
Esse identificador exclusivo é por vezes chamado de marca de preamar.
Quando o identificador exclusivo muda, o sistema atualiza o painel de perfis para que exiba histogramas de valores de dados para vários campos de dados na fonte de dados.
Cada barra em cada histograma de valores de dados indica uma contagem de linhas advinda da fonte de dados que (i) são especificadas pelo identificador exclusivo e (ii) têm um único valor de dados específico ou uma faixa de valores de dados para um respectivo campo de dados.
Dessa forma, o sistema propõe uma visualização de dados consistente no painel de perfis enquanto várias consultas independentes rodam assincronamente.
[008]Em algumas implementações, cada repetição de uma respectiva consulta à fonte de dados especifica um tamanho de bloco que é maior do que o tamanho de bloco anterior para a respectiva consulta. Em algumas implementações, cada repetição de uma respectiva consulta à fonte de dados especifica um tamanho de bloco que é duas vezes maior do que o tamanho de bloco anterior para a respectiva consulta.
[009]Em algumas implementações, a determinação periódica do identificador exclusivo é sufocada para que ocorra não mais do que uma vez a cada segundo.
[010]Em algumas implementações, quando o identificador exclusivo muda, o sistema atualiza as linhas de dados advindas da fonte de dados exibidas no painel de dados de acordo com o identificador exclusivo.
[011]Em alguns casos, um primeiro nó no fluxograma é inicialmente selecionado, e os histogramas de valores de dados exibidos no painel de perfis correspondem a um conjunto de dados computados para o primeiro nó. Em alguns casos, um usuário seleciona, enquanto as consultas assíncronas ocorrem, um segundo nó no fluxograma. Em resposta à seleção do usuário, o sistema atualiza o painel de perfis para que exiba novos histogramas de valores de dados para uma pluralidade de campos de dados de um conjunto de resultados no segundo nó. Cada barra em cada histograma de valores de dados indica uma contagem de linhas do conjunto de resultados que possuem um único valor de dados específico ou uma faixa de valores de dados para um respectivo campo de dados.
[012]Em algumas implementações, o identificador exclusivo é um valor de chave primária de um campo de chave primária para a fonte de dados, e uma linha da fonte de dados é especificada pelo identificador exclusivo quando um valor chave correspondente à linha é menor do que o valor de chave primária. Em algumas implementações, o identificador exclusivo é um número de linha de preamar, e uma linha da fonte de dados é especificada pelo identificador exclusivo quando um número de linha correspondente à linha é menor ou igual ao número de linha de preamar. Em algumas implementações, cada uma das consultas possui uma mesma ordem de classificação.
[013]Em algumas modalidades, enquanto uma ou mais das consultas assíncronas estão acontecendo, um usuário modifica dados exibidos no painel de perfis. Em resposta à entrada do usuário, o sistema traduz a entrada do usuário em uma operação aplicada às linhas recuperadas da fonte de dados e armazena uma definição da operação. A atualização do painel de perfis quando o identificador exclusivo muda compreende aplicar a operação definida a linhas recuperadas pelas consultas.
[014]Um usuário pode fazer uma variedade de mudanças aos dados no painel de perfis. Em alguns casos, a entrada do usuário é a seleção de uma única barra para um histograma de valores de dados correspondente a um primeiro compartimento de valores de dados para um primeiro campo de dados, filtrando assim os dados exibidos no painel de perfis a linhas da fonte de dados cujos valores de dados para o primeiro campo correspondem ao primeiro compartimento de valores de dados. A operação armazenada aplica um filtro que filtra os dados exibidos no painel de perfis em linhas da fonte de dados cujos valores de dados para o primeiro campo correspondem ao primeiro compartimento de valores de dados.
[015]Em alguns casos, a entrada do usuário remove um histograma de valores de dados, correspondente a um primeiro campo de dados, do painel de perfis. A atualização do painel de perfis quando o identificador exclusivo muda compreende omitir do painel de dados o primeiro campo de dados.
[016]Em alguns casos, a entrada do usuário adiciona uma coluna computada ao painel de perfis com um histograma de valores de dados correspondente, computado em função de uma ou mais outras colunas recuperadas pelas consultas. A atualização do painel de perfis quando o identificador exclusivo muda compreende atualizar o histograma de valores de dados para a coluna computada de acordo com a função e de acordo com as linhas adicionais recuperadas da fonte de dados.
[017]Em alguns casos, a entrada do usuário renomeia uma primeira coluna de dados no painel de perfis com um novo nome. A atualização do painel de perfis quando o identificador exclusivo muda compreende manter o novo nome para a primeira coluna de dados.
[018]Em alguns casos, a entrada do usuário converte um tipo de dados para uma primeira coluna de dados no painel de perfis em um novo tipo de dados de acordo com uma função de conversão. A atualização do painel de perfis quando o identificador exclusivo muda compreende aplicar a função de conversão à primeira coluna de dados para as linhas adicionais recuperadas da fonte de dados.
[019]Em alguns casos, a entrada do usuário remove uma barra de histograma correspondente a um compartimento para uma primeira coluna de dados no painel de perfis. A atualização do painel de perfis quando o identificador exclusivo muda compreende remover quaisquer das linhas adicionais recuperadas quando elas tiverem um valor de dados para a primeira coluna de dados coincidente com o compartimento. Em algumas implementações, cada compartimento corresponde a um valor de dados individual ou a uma faixa de valores de dados contínua.
[020]De acordo com algumas implementações, um processo refatora um fluxograma. O processo é realizado em um sistema de computador com uma tela, um ou mais processadores e memória para armazenar um ou mais programas configurados para execução pelos um ou mais processadores. O processo inclui exibir uma interface do usuário que inclui vários painéis, inclusive um painel de fluxo de dados e um painel de paleta. O painel de fluxo de dados inclui um fluxograma com vários nós existentes, cada nó especificando uma respectiva operação para recuperar dados de uma respectiva fonte de dados, especificando uma respectiva operação para transformar dados, ou especificando uma respectiva operação para criar um respectivo conjunto de dados de saída. Além disso, o painel de paleta inclui vários modelos de elemento de fluxo. O processo inclui ainda receber uma primeira entrada do usuário para selecionar um nó existente no fluxograma ou um modelo de elemento de fluxo no painel de paleta e, em resposta à primeira entrada do usuário: (i) exibir um ícone móvel representando um novo nó para colocação no fluxograma, onde o novo nó especifica uma operação de fluxo de dados correspondente ao nó existente selecionado ou ao modelo de elemento de fluxo selecionado, e (ii) exibir um ou mais alvos de soltura no fluxograma de acordo com dependências entre a operação de fluxo de dados do novo nó e operações dos vários nós existentes. O processo inclui ainda receber uma segunda entrada do usuário para posicionar o ícone móvel sobre um primeiro alvo de soltura dentre os alvos de soltura e cessar de detectar a segunda entrada do usuário. Em resposta a cessar de detectar a segunda entrada do usuário, o processo insere o novo nó no fluxograma no primeiro alvo de soltura. O novo nó executa a operação de fluxo de dados especificada.
[021]De acordo com algumas implementações, cada um dos nós existentes possui um respectivo conjunto de dados intermediário computado de acordo com a respectiva operação especificada, e introduzir o novo nó no fluxograma no primeiro alvo de soltura inclui computar um conjunto de dados intermediário para o novo nó de acordo com a operação de fluxo de dados especificada.
[022]De acordo com algumas implementações, o novo nó é colocado no fluxograma após um primeiro nó existente com um primeiro conjunto de dados intermediário, e computar o conjunto de dados intermediário para o novo nó inclui aplicar a operação de fluxo de dados ao primeiro conjunto de dados intermediário.
[023]De acordo com algumas implementações, o novo nó não possui precedente no fluxograma, e computar o conjunto de dados intermediário para o novo nó inclui recuperar dados de uma fonte de dados para formar o conjunto de dados intermediário.
[024]De acordo com algumas implementações, o processo inclui ainda, em resposta a cessar de detectar a segunda entrada do usuário, exibir uma amostragem de dados do conjunto de dados intermediário em um painel de dados da interface do usuário. O painel de dados é um dos vários painéis.
[025]De acordo com algumas implementações, a operação de fluxo de dados filtra linhas de dados com base nos valores de um primeiro campo de dados, e exibir os um ou mais alvos de soltura inclui exibir um ou mais alvos de soltura seguindo imediatamente os nós existentes cujos conjuntos de dados intermediários incluem o primeiro campo de dados.
[026]De acordo com algumas implementações, a primeira entrada do usuário seleciona um nó existente no fluxograma, e introduzir o novo nó existente no fluxograma no primeiro alvo de soltura cria uma cópia do nó existente.
[027]De acordo com algumas implementações, introduzir o novo nó no fluxograma no primeiro alvo de soltura inclui ainda remover o nó existente do fluxograma.
[028]De acordo com algumas implementações, a operação de fluxo de dados inclui várias operações que são executadas em uma sequência especificada.
[029]Em algumas modalidades, um meio de armazenamento legível por computador não transitório armazena um ou mais programas configurados para execução por um sistema de computador com um ou mais processadores, memória e uma tela. Os um ou mais programas incluem instruções para implementar um sistema que refatora um fluxograma conforme descrito neste documento.
[030]De acordo com algumas implementações, um sistema de computador prepara dados para análise. O sistema de computador inclui um ou mais processadores, memória e um ou mais programas armazenados na memória. Os programas são configurados para execução pelos um ou mais processadores. Os programas exibem uma interface do usuário para um aplicativo de preparação de dados. A interface do usuário inclui um painel de fluxo de dados, um painel de ferramentas, um painel de perfis e um painel de dados. O painel de fluxo de dados exibe um fluxograma de nós/ligações que identifica fontes de dados, operações e conjuntos de dados de saída. O painel de ferramentas inclui um seletor de fonte de dados que permite aos usuários adicionar fontes de dados ao fluxograma, inclui uma paleta de operações que permite aos usuários introduzir nós no fluxograma para executar operações de transformação específicas, e uma paleta de outros fluxogramas que o usuário pode incorporar ao fluxograma. O painel de perfis exibe esquemas correspondentes a nós selecionados no fluxograma, incluindo informações acerca de campos de dados e informações estatísticas acerca de valores de dados para os campos de dados, e permite aos usuários modificar o fluxograma pela interação com elementos de dados individuais. O painel de dados exibe linhas de dados correspondentes a nós selecionados no fluxograma, e permite aos usuários modificar o fluxograma pela interação com valores de dados individuais.
[031]Em algumas implementações, as informações acerca de campos de dados exibidas no painel de perfis incluem faixas de dados para um primeiro campo de dados.
[032]Em algumas implementações, em resposta a uma primeira ação do usuário sobre uma primeira faixa de dados para o primeiro campo de dados no painel de perfis, adiciona-se ao fluxograma um novo nó que filtra dados para a primeira faixa de dados.
[033]Em algumas implementações, o painel de perfis permite aos usuários mapear as faixas de dados para o primeiro campo de dados a valores especificados, adicionando assim ao fluxograma um novo nó que executa um mapeamento específico ao usuário.
[034]Em algumas implementações, em resposta a uma primeira interação do usuário com um primeiro valor de dados no painel de dados, adiciona-se ao fluxograma um nó que filtra os dados para o primeiro valor de dados.
[035]Em algumas implementações, em resposta a uma modificação pelo usuário de um primeiro valor de dados de um primeiro campo de dados no painel de dados, adiciona-se ao fluxograma um novo nó que executa a modificação a cada linha de dados cujo valor de dados para o primeiro campo de dados é igual ao primeiro valor de dados.
[036]Em algumas implementações, em resposta a uma primeira ação do usuário sobre um primeiro campo de dados no painel de dados, adiciona-se ao fluxograma um nó que divide o primeiro campo de dados em dois ou mais campos de dados distintos.
[037]Em algumas implementações, em resposta a uma primeira ação do usuário no painel de fluxos de dados para arrastar um primeiro nó ao painel de ferramentas, adiciona-se à paleta de operações uma nova operação, a qual corresponde ao primeiro nó.
[038]Em algumas implementações, o painel de perfis e painel de dados são configurados para atualizar assincronamente na medida em que fazem-se seleções no painel de fluxo de dados.
[039]Em algumas implementações, as informações acerca dos campos de dados exibidas no painel de perfis incluem um ou mais histogramas que exibem distribuições de valores de dados para os campos de dados.
[040]De acordo com algumas implementações, um método é executado em um dispositivo eletrônico com uma tela. Por exemplo, o dispositivo eletrônico pode ser um smartphone, um tablet, um computador notebook ou um computador desktop. O método é implementado em qualquer um dos sistemas de computador descritos neste documento.
[041]Em algumas modalidades, um meio de armazenamento legível por computador não transitório armazena um ou mais programas configurados para execução por um sistema de computador com um ou mais processadores, memória e uma tela. Os um ou mais programas incluem instruções para implementar um sistema que prepara dados para análise conforme descrito neste documento.
[042]Sendo assim, são revelados métodos, sistemas e interfaces gráficas do usuário que permitem aos usuários analisar, preparar e curar dados, bem como refatorar fluxos de dados existentes.
BREVE DESCRIÇÃO DOS DESENHOS
[043]Para uma melhor compreensão dos sistemas, métodos e interfaces gráficas do usuário supramencionados, além de sistemas, métodos e interfaces gráficas do usuário adicionais que propiciem visualização analítica de dados e preparação de dados, deve-se referir-se à Descrição de Implementações abaixo, em combinação com os desenhos a seguir, nos quais números de referência iguais referem-se a partes correspondentes ao longo de todas as figuras.
[044]A Figura 1 ilustra uma interface gráfica do usuário usada em algumas implementações.
[045]A Figura 2 é um diagrama em blocos de um dispositivo de computação de acordo com algumas implementações.
[046]As Figuras 3A e 3B ilustram interfaces do usuário para um aplicativo de preparação de dados de acordo com algumas implementações.
[047]A Figura 3C descreve alguns recursos das interfaces do usuário ilustradas nas Figuras 3A e 3B.
[048]A Figura 3D ilustra um fluxograma de amostras de acordo com algumas implementações.
[049]A Figura 3E ilustra um par de fluxos que trabalham em conjunto mas rodam a frequências diferentes de acordo com algumas implementações.
[050]As Figuras de 4A a 4V ilustram o uso de um aplicativo de preparação de dados para construir uma junção de acordo com algumas implementações.
[051]A Figura 5A ilustra uma parte de um arquivo de log de acordo com algumas implementações.
[052]A Figura 5B ilustra uma parte de uma tabela de pesquisa de acordo com algumas implementações.
[053]As Figuras de 6A a 6C ilustram algumas operações, entradas e saída para um fluxo, de acordo com algumas implementações.
[054]As Figuras 7A e 7B ilustram alguns componentes de um sistema de preparação de dados, de acordo com algumas implementações.
[055]A Figura 7C ilustra a avaliação de um fluxo, ou para análise ou para execução, de acordo com algumas implementações.
[056]A Figura 7D representa esquematicamente um subsistema assíncrono usado em algumas implementações de preparação de dados.
[057]A Figura 8A ilustra uma sequência de operações de fluxo de acordo com algumas implementações.
[058]A Figura 8B ilustra três aspectos de um sistema de tipos de acordo com algumas implementações.
[059]A Figura 8C ilustra propriedades de um ambiente de tipo de acordo com algumas implementações.
[060]As Figuras 8D ilustra uma verificação de tipo simples baseada em um fluxo com todos os tipos de dados conhecidos, de acordo com algumas implementações.
[061]A Figura 8E ilustra uma falha de tipo simples com tipos totalmente conhecidos, de acordo com algumas implementações.
[062]A Figura 8F ilustra cálculos de ambiente de tipo simples para um fluxo parcial, de acordo com algumas implementações.
[063]A Figura 8G ilustra tipos de um nó recipiente empacotado, de acordo com algumas implementações.
[064]A Figura 8H ilustra um cenário de ambiente de tipo mais complexo, de acordo com algumas implementações.
[065]A Figura 8I ilustra a reutilização de um cenário de ambiente de tipo mais complexo, de acordo com algumas implementações.
[066]As Figuras 8J-1, 8J-2 e 8J-3 indicam as propriedades para muitos dos operadores mais comumente usados, de acordo com algumas implementações.
[067]As Figuras 8K e 8L ilustram um fluxo e processo de execução correspondente, de acordo com algumas implementações.
[068]A Figura 8M ilustra que a execução de um fluxo inteiro começa com modelos físicos implícitos nos nós de entrada e saída, de acordo com algumas implementações.
[069]A Figura 8N ilustra que a execução de um fluxo parcial materializa um modelo físico com os resultados, de acordo com algumas implementações.
[070]A Figura 8O ilustra a execução de parte de um fluxo com base em resultados anteriores, de acordo com algumas implementações.
[071]As Figuras 8P e 8Q ilustram a avaliação de um fluxo com um nó fixado 860, de acordo com algumas implementações.
[072]A Figura 9 ilustra uma parte de um fluxograma de acordo com algumas implementações.
[073]A Figura 10 ilustra um processo para estabelecer uma marca de preamar para conjuntos de resultados recuperados de diversas consultas assíncronas, de acordo com algumas implementações.
[074]A Figura 11 ilustra como uma interface do usuário de preparação de dados atualiza enquanto os dados são carregados de uma fonte de dados, de acordo com algumas implementações.
[075]A Figura 12 ilustra interações do usuário com dados parcialmente carregados em uma interface do usuário de preparação de dados e atualizações subsequentes à interface do usuário na medida em que dados adicionais chegam assincronamente, de acordo com algumas implementações.
[076]A Figura 13 é um exemplo de um painel de perfis para uma interface do usuário de preparação de dados, de acordo com algumas implementações.
[077]Doravante, far-se-á referência a implementações, exemplos das quais são ilustrados nos desenhos anexos. Na descrição a seguir, estabelecem-se diversos detalhes específicos a fim de propiciar uma compreensão por inteiro da presente invenção. No entanto, transparecerá aos versados na técnica que é possível praticar a presente invenção sem necessidade desses detalhes específicos.
DESCRIÇÃO DE IMPLEMENTAÇÕES
[078]A Figura 1 ilustra uma interface gráfica do usuário 100 para a análise interativa dos dados. A interface do usuário 100 inclui uma aba Dados 114 e uma aba Analítica 116 de acordo com algumas implementações. Quando a aba Dados 114 é selecionada, a interface do usuário 100 exibe uma região de informações de esquema 110, que também é chamada de painel de dados. A região de informações de esquema 110 oferece elementos de dados nomeados (por exemplo, nomes de campos) que podem ser selecionados e usados para construir uma visualização de dados. Em algumas implementações, a lista de nomes de campos é separada em um grupo de dimensões (por exemplo, dados categóricos) e um grupo de medidas (por exemplo, quantidades numéricas). Algumas implementações também incluem uma lista de parâmetros. Quando a aba Analítica 116 é selecionada, a interface do usuário exibe uma lista de funções analíticas em vez dos elementos de dados (não ilustrado).
[079]A interface gráfica do usuário 100 também inclui uma região de visualização de dados 112. A região de visualização de dados 112 inclui várias regiões de prateleira, tais como uma região de prateleira de colunas 120 e uma região de prateleira de linhas 122. Essas também são chamadas de prateleira de colunas 120 e prateleira de linhas 122. Como ilustrado aqui, a região de visualização de dados 112 também possui um grande espaço para exibir um gráfico visual. Como nenhum elemento de dados foi selecionado ainda, o espaço inicialmente não possui gráfico visual. Em algumas implementações, a região de visualização de dados 112 possui várias camadas que são chamadas de folhas.
[080]A Figura 2 é um diagrama em blocos que ilustra um dispositivo de computação 200 capaz de exibir a interface gráfica do usuário 100 de acordo com algumas implementações. O dispositivo de computação também pode ser usado por um aplicativo de preparação de dados ("prep de dados") 250. Vários exemplos do dispositivo de computação 200 incluem um computador desktop, um computador laptop, um computador tablet e outros dispositivos de computação que tenham uma tela e um processador capaz de rodar um aplicativo de visualização de dados 222. O dispositivo de computação 200 tipicamente inclui uma ou mais unidades/núcleos de processamento (CPUs) 202 para executar módulos, programas e/ou instruções armazenadas na memória 214 e, assim, executar operações de processamento; uma ou mais interfaces de rede ou outras interfaces de comunicação 204; memória 214; e um ou mais barramentos de comunicação 212 para interconectar esses componentes. Os barramentos de comunicação 212 podem incluir sistemas de circuitos que interconectam e controlam a comunicação entre componentes do sistema.
[081]O dispositivo de computação 200 inclui uma interface do usuário 206 que compreende um dispositivo de exibição 208 e um ou mais dispositivos ou mecanismos de entrada 210. Em algumas implementações, o dispositivo/mecanismo de entrada inclui um teclado. Em algumas implementações, o dispositivo/mecanismo de entrada inclui um teclado "soft", que é exibido conforme necessário no dispositivo de exibição 208, permitindo que o usuário "pressione as teclas" que aparecem na tela 208. Em algumas implementações, a tela 208 e dispositivo/mecanismo de entrada 210 compreendem uma tela de toque (também chamada de tecla sensível ao toque).
[082]Em algumas implementações, a memória 214 inclui memória de acesso aleatório de alta velocidade, tal como DRAM, SRAM, DDR RAM ou outros dispositivos de memória de estado sólido de acesso aleatório. Em algumas implementações, a memória 214 inclui memória não volátil, tal como um ou mais dispositivos de armazenamento em disco magnético, dispositivos de armazenamento em disco óptico, dispositivos de memória flash ou outros dispositivos de armazenamento de estado sólido não voláteis. Em algumas implementações, a memória 214 inclui um ou mais dispositivos de armazenamento localizados remotamente à(s) CPU(s) 202. A memória 214, ou, como alternativa, o(s) dispositivo(s) de memória não volátil dentro da memória 214, compreende um meio de armazenamento legível por computador não transitório. Em algumas implementações, a memória 214, ou o meio de armazenamento legível por computador da memória 214, armazena os programas, módulos e estruturas de dados a seguir, ou um subconjunto dos mesmos: • um sistema operacional 216, que inclui procedimentos para conduzir vários serviços de sistema básicos e para executar tarefas dependentes de hardware; • um módulo de comunicação 218, que é usado para conectar o dispositivo de computação 200 a outros computadores e dispositivos através das uma ou mais interfaces de rede de comunicação 204 (com fio ou sem fio) e uma ou mais redes de comunicação, tais como a Internet, outras redes de longa distância, redes de área local, redes de área metropolitana, e assim por diante;
• um navegador web 220 (ou outro aplicativo capaz de exibir páginas web), que permite ao usuário comunicar-se através de uma rede com computadores ou dispositivos remotos; • um aplicativo de visualização de dados 222, que oferece uma interface gráfica do usuário 100 para que o usuário construa gráficos visuais. Por exemplo, o usuário seleciona uma ou mais fontes de dados 240 (que podem ser armazenadas no dispositivo de computação 200 ou armazenadas remotamente), seleciona campos de dados da(s) fonte(s) de dados e utiliza os campos selecionados para definir um gráfico visual. Em algumas implementações, as informações que o usuário oferece são armazenadas como uma especificação visual 228. O aplicativo de visualização de dados 222 inclui um módulo de geração de visualização de dados 226, que pega a entrada do usuário (por exemplo, a especificação visual 228) e gera um gráfico visual correspondente (também chamado de "visualização de dados" ou "viz de dados"). O aplicativo de visualização de dados 222, então, exibe o gráfico visual gerado na interface do usuário 100. Em algumas implementações, o aplicativo de visualização de dados 222 executa um aplicativo independente (por exemplo, um aplicativo de desktop). Em algumas implementações, o aplicativo de visualização de dados 222 roda dentro do navegador web 220 ou de outro aplicativo usando páginas web oferecidas por um servidor web; e • zero ou mais bases de dados ou fontes de dados 240 (por exemplo, uma primeira fonte de dados 240-1 e uma segunda fonte de dados 240-2), que são usadas pelo aplicativo de visualização de dados 222. Em algumas implementações, as fontes de dados são armazenadas como arquivos de planilha, arquivos CSV, arquivos XML ou arquivos planos, ou armazenadas em uma base de dados relacional.
[083]Em alguns casos, o dispositivo de computação 200 armazena um aplicativo de prep de dados 250, que pode ser usado para analisar e massagear dados para análise subsequente (por exemplo, por um aplicativo de visualização de dados 222). A Figura 3B ilustra um exemplo de uma interface do usuário 251 usada por um aplicativo de prep de dados 250. O aplicativo de prep de dados 250 permite ao usuário construir fluxos 323, conforme descrito em mais detalhes abaixo.
[084]Cada um dos módulos, aplicativos ou conjuntos de procedimentos executáveis identificados acima pode ser armazenado em um ou mais dos dispositivos de memória previamente mencionados e corresponde a um conjunto de instruções para executar uma função descrita acima. Os módulos ou programas (isto é, conjuntos de instruções) identificados acima não precisam ser implementados como programas, procedimentos ou módulos de software distintos, e, portanto, vários subconjuntos desses módulos podem ser combinados ou reorganizados de alguma outra forma em várias implementações. Em algumas implementações, a memória 214 armazena um subconjunto dos módulos e estruturas de dados identificados acima. Além disso, a memória 214 pode armazenar módulos ou estruturas de dados adicionais não descritos acima.
[085]Embora a Figura 2 ilustre um dispositivo de computação 200, ela foi concebida mais como uma descrição funcional dos vários recursos que podem se fazer presentes em vez de como um esquema estrutural das implementações descritas neste documento. Na prática, e como reconhecerão os versados na técnica, os itens ilustrados em separado poderiam ser combinados e alguns itens poderiam ser separados.
[086]As Figuras 3A e 3B ilustram uma interface do usuário para preparar dados de acordo com algumas implementações. Nessas implementações, há ao menos cinco regiões, que têm funcionalidades distintas. A Figura 3A ilustra isso conceitualmente como uma região de barra de menu 301, um painel esquerdo 302, um painel de fluxo 303, um painel de perfis 304 e um painel de dados 305. Em algumas implementações, o painel de perfis 304 também é chamado de painel de esquemas. Em algumas implementações, a funcionalidade do "painel esquerdo" 302 encontra-se em uma localização alternativa, tal como abaixo do painel de menu 301 ou abaixo do painel de dados 305.
[087]Essa interface oferece ao usuário várias visualizações agilizadas e coordenadas que ajudam-no a visualizar e entender o que precisa fazer. Essa nova interface do usuário apresenta aos usuários várias visualizações de seu fluxo e de seus dados para ajudá-los não só a realizar ações mas também a descobrir quais ações deseja realizar. O fluxograma no painel de fluxo 303 combina e sintetiza ações, tornando o fluxo mais legível, e é combinado a visualizações de dados reais no painel de perfis 304 e no painel de dados 305. O painel de dados 305 oferece amostras representativas de dados em cada ponto no fluxo lógico, e o painel de perfis oferece histogramas dos domínios dos dados.
[088]Em algumas implementações, a Barra de Menu 301 possui um menu Arquivo com opções para criar novas especificações de fluxo de dados, salvar especificações de fluxo de dados e carregar especificações de fluxo de dados previamente criadas. Em alguns casos, uma especificação de fluxo é chamada de fluxo. Uma especificação de fluxo descreve como manipular dados de entrada advindos de uma ou mais fontes de dados para criar um conjunto de dados alvo. Os conjuntos de dados alvo são tipicamente usados em uma análise de dados subsequente usando um aplicativo de visualização de dados.
[089]Em algumas implementações, o Painel Esquerdo 302 inclui uma lista de conexões com fontes de dados recentes, além de um botão para conectar-se a uma nova fonte de dados.
[090]Em algumas implementações, o Painel de Fluxo 303 inclui uma representação visual (fluxograma ou fluxo) da especificação de fluxo. Em algumas implementações, o fluxo é um digrama de nós/ligações que exibe as fontes de dados, as operações que são realizadas e saídas alvo do fluxo.
[091]Algumas implementações permitem a execução flexível de um fluxo ao tratar partes do fluxo como consultas declarativas. Ou seja, em vez de o usuário especificar cada detalhe computacional, o usuário especifica o objetivo (por exemplo, entrada e saída). O processo que executa o fluxo otimiza planos para escolher estratégias de execução que melhorem o desempenho. Algumas implementações também permitem que os usuários inibam seletivamente esse comportamento para controlar a execução.
[092]Em algumas implementações, o Painel de Perfis 304 exibe os esquemas e estatísticas e/ou visualizações relevantes para os nós selecionados no Painel de Fluxo 303. Algumas implementações suportam a seleção de vários nós simultaneamente, mas outras suportam a seleção de apenas um nó por vez.
[093]Em algumas implementações, o Painel de Dados 305 exibe dados no nível de linha para os nós selecionados no Painel de Fluxo 303.
[094]Em algumas implementações, um usuário cria um novo fluxo usando uma opção "Arquivo > Novo fluxo" na Barra de Menu. Os usuários também podem adicionar fontes de dados a um fluxo. Em alguns casos, uma fonte de dados é uma base de dados relacional. Em alguns casos, uma ou mais fontes de dados são baseadas em arquivo, tal como em arquivos CSV ou arquivos de planilha. Em algumas implementações, o usuário adiciona uma fonte baseada em arquivo ao fluxo usando uma proposta de conexão com arquivo no painel esquerdo 302. Isso abre um caixa de diálogo de arquivos que solicita ao usuário que escolha um arquivo. Em algumas implementações, o painel esquerdo 302 também inclui uma proposta de conexão com base de dados, que permite ao usuário conectar-se a uma base de dados (por exemplo, uma base de dados SQL).
[095]Quando o usuário seleciona um nó (por exemplo, uma tabela) no Painel de Fluxo 303, os esquemas para o nó são exibidos no Painel de Perfis 304. Em algumas implementações, o painel de perfis 304 inclui estatísticas ou visualizações,
tais como distribuições de valores de dados para os campos (por exemplo, na forma de histogramas ou gráficos de setores). Em implementações que permitem a seleção de vários nós no painel de fluxo 303, esquemas para cada um dos nós selecionados são exibidos no painel de perfis 304.
[096]Além disso, quando um nó é selecionado no Painel de Fluxo 303, os dados para o nó são exibidos no Painel de Dados 305. O painel de dados 305 tipicamente exibe os dados na forma de linhas e colunas.
[097]Algumas implementações facilitam a edição do fluxo usando o painel de fluxo 303, o painel de perfis 304 ou o painel de dados 305. Por exemplo, algumas implementações permitem clicar com o botão direito sobre um nó/tabela de qualquer um desses três painéis e adicionar uma nova coluna baseada em um cálculo escalar sobre colunas existentes nessa tabela. Por exemplo, a operação escalar poderia ser uma operação matemática para computar a soma de três colunas numéricas, uma operação de cadeia para concatenar dados de cadeia de duas colunas que são cadeias de caracteres, ou uma operação de conversão para converter uma coluna de cadeia de caracteres em uma coluna de data (quando uma data foi codificada como uma cadeia de caracteres na fonte de dados). Em algumas implementações, um menu de clique com o botão direito (acessado a partir de uma tabela/nó no Painel de Fluxo 303, Painel de Perfis 304 ou Painel de Dados 305) oferece uma opção para "Criar campo calculado...". A seleção dessa opção abre um caixa de diálogo para criar um cálculo. Em algumas implementações, os cálculos limitam-se a computações escalares (por exemplo, excluindo agregações, cálculos personalizados de Nível de Detalhe e cálculos de tabela). Quando uma coluna é criada, a interface do usuário adiciona um nó calculado ao Painel de Fluxo 303, conecta o novo nó a seu antecessor e seleciona esse novo nó. Em algumas implementações, à medida que o número de nós no fluxograma aumenta, o painel de fluxo 303 adiciona caixas de rolagem. Em algumas implementações, os nós no fluxograma podem ser agrupados e rotulados, o que é exibido hierarquicamente (por exemplo, exibindo um fluxo de alto nível inicialmente, com expansão para ver os detalhes dos nós selecionados).
[098]Um usuário também pode remover uma coluna por interação com o Painel de Fluxo 303, o Painel de Perfis 304 ou o Painel de Dados 305 (por exemplo, clicando com o botão direito na coluna e escolhendo a opção "Remover coluna"). A remoção de uma coluna resulta na adição de um nó ao Painel de Fluxo 303, na conexão apropriada do novo nó e na seleção do novo nó.
[099]No Painel de Fluxo 303, o usuário pode selecionar um nó e escolher "Saída como" para criar um novo conjunto de dados de saída. Em algumas implementações, isso se dá com um clique com o botão direito. Isso abre um caixa de diálogo de arquivos que permite ao usuário selecionar um nome de arquivo e pasta alvo (ou uma base de dados e nome de tabela). Com isso, adiciona-se um novo nó ao Painel de Fluxo 303, mas não os conjuntos de dados alvo não são criados de fato. Em algumas implementações, um conjunto de dados alvo possui dois componentes, incluindo um primeiro arquivo (um Extrato de Dados do Tableau ou TDE) que contém os dados e um índice ou entrada apontadora correspondente (uma Fonte de Dados do Tableau ou TDS) que aponta para o arquivo de dados.
[0100]Os arquivos de dados de saída reais são criados quando o fluxo é executado. Em algumas implementações, um usuário executa um fluxo ao escolher "Arquivo > Executar fluxo" na Barra de Menu 301. Observe-se que um único fluxo pode produzir vários arquivos de dados de saída. Em algumas implementações, o fluxograma oferece feedback visual na medida em que é executado.
[0101]Em algumas implementações, a Barra de Menu 301 inclui uma opção no menu "Arquivo" para "Salvar" ou "Salvar como", que permite ao usuário salvar o fluxo. Em algumas implementações, o fluxo é salvo como um arquivo ".loom". Esse arquivo contém tudo que é necessário para recriar o fluxo em carga. Quando um fluxo é salvo, ele pode ser recarregado mais tarde usando uma opção de menu para "Abrir" no menu "Arquivo". Isso abre uma caixa de diálogo seletora de arquivos para permitir que o usuário carregue um fluxo anterior.
[0102]A Figura 3B ilustra uma interface do usuário para a preparação de dados, ilustrando elementos da interface do usuário em cada um dos painéis. A barra de menu 311 inclui um ou mais menus, tais como um menu Arquivo e um menu Editar. Embora o menu editar faça-se disponível, mais mudanças ao fluxo são realizadas interagindo com o painel de fluxo 313, com o painel de perfis 314 ou com o painel de dados 315.
[0103]Em algumas implementações, o painel esquerdo 312 inclui uma paleta/seletor de fonte de dados, que inclui propostas para localizar e conectar-se a dados. O conjunto de conectores inclui conectores somente para extração, incluindo cubos. Algumas implementações podem emitir expressões SQL personalizadas a qualquer fonte de dados que as suporte.
[0104]O painel esquerdo 312 também inclui uma paleta de operações, que exibe operações que podem ser introduzidas no fluxo. Isso inclui junções arbitrárias (do tipo arbitrário e com vários predicados), união, pivô, coluna de renomeação e restrição, projeção de cálculos escalares, filtro, agregação, conversão de tipo de dados, análise de dados, aglutinação, fusão, divisão, agregação, substituição de valores e amostragem. Algumas implementações também suportam operadores para criar conjuntos (por exemplo, particionar os valores de dados para um campo de dados em conjuntos), binning (por exemplo, agrupar valores de dados numéricos para um campo de dados em um conjunto de faixas) e cálculos de tabela (por exemplo, calcular valores de dados (por exemplo, porcentagem do total) para cada linha que dependem não só dos valores de dados na linha mas também de outros valores de dados na tabela).
[0105]O painel esquerdo 312 também inclui uma paleta de outros fluxos que podem ser incorporados por inteiro ou em parte ao fluxo atual. Isso permite ao usuário reutilizar componentes de um fluxo para criar novos fluxos. Por exemplo, se cria-se uma parte de um fluxo que depura certo tipo de entrada usando uma combinação de 10 etapas, essa parte de fluxo de 10 etapas pode ser salva e reutilizada, seja no mesmo fluxo seja em fluxos totalmente distintos.
[0106]O painel de fluxo 313 exibe uma representação visual (por exemplo, fluxograma de nós/ligações) 323 para o fluxo atual. O Painel de Fluxo 313 oferece uma visão geral do fluxo, que serve para documentar o processo. Em muitos produtos existentes, o fluxo é complexo demais, o que impede a compreensão. As implementações reveladas facilitam o entendimento ao aglutinar nós, mantendo o fluxo geral mais simples e mais conciso. Como mencionado acima, à medida que o número de nós aumenta, as implementações tipicamente adicionam caixas de rolagem. A necessidade por barras de rolagem é reduzida ao aglutinar vários nós relacionados em supernós, que também são chamados de nós recipientes. Isso permite ao usuário visualizar o fluxo inteiro mais conceitualmente, e permite ao usuário aprofundar-se nos detalhes somente quando necessário. Em algumas implementações, quando um "supernó" é expandido, o painel de fluxo 313 só exibe os nós dentro do supernó, e o painel de fluxo 313 possui um cabeçalho que identifica qual parte do fluxo está sendo exibida. As implementações tipicamente permitem vários níveis hierárquicos. Um fluxo complexo tende a incluir vários níveis de aninhamento dos nós.
[0107]Conforme descrito acima, o painel de perfis 314 inclui informações de esquema acerca dos dados no nó (ou nós) atualmente selecionado no painel de fluxo 313. Como ilustrado aqui, as informações de esquema oferecem informações estatísticas acerca dos dados, tais como um histograma 324 da distribuição de dados para cada um dos campos. Um usuário pode interagir diretamente com o painel de perfis para modificar o fluxo 323 (por exemplo, ao selecionar um campo de dados para filtrar as linhas de dados com base nos valores desse campo de dados). O painel de perfis 314 também oferece aos usuários dados relevantes acerca do nó (ou nós) atualmente selecionado e visualizações que guiam o trabalho do usuário. Por exemplo, os histogramas 324 ilustram as distribuições dos domínios de cada coluna. Algumas implementações utilizam de escovação para exibir como esses domínios interagem uns com os outros.
[0108]Um exemplo aqui ilustra como o processo difere de implementações típicas ao permitir que o usuário manipule diretamente os dados em um fluxo. Considerem-se duas formas alternativas de filtrar linhas de dados específicas. Nesse caso, o usuário deseja excluir Califórnia de consideração. Usando uma ferramenta típica, o usuário seleciona um nó "filtro", introduz o filtro no fluxo em certa localização, em seguida abre uma caixa de diálogo para introduzir a fórmula de cálculo, tal como "nome_de_estado <> 'CA'". Em implementações aqui reveladas, o usuário pode visualizar o valor de dados no painel de perfis 314 (por exemplo, exibindo o valor de campo 'CA' e quantas linhas têm esse valor de campo) e no painel de dados 315 (por exemplo, linhas individuais com 'CA' como o valor para nome de estado). Em algumas implementações, o usuário pode clicar com o botão direito em "CA" na lista de nomes de estado no Painel de Perfis 314 (ou no Painel de Dados 315) e escolher "Excluir" na lista suspensa. O usuário interage com os próprios dados, e não com um elemento de fluxo que interage com os dados. As implementações oferecem funcionalidade semelhante para cálculos, junções, uniões, agregados e assim por diante. Outro benefício da abordagem é que os resultados são imediatos. Quando "CA" é filtrado, o filtro é aplicado imediatamente. Se a operação leva algum tempo para concluir, ela é realizada assincronamente, e o usuário pode continuar trabalhando enquanto a tarefa opera em segundo plano.
[0109]O painel de dados 315 exibe as linhas de dados correspondentes ao nó ou nós selecionados no painel de fluxo 313. Cada uma das colunas 315 corresponde a um dos campos de dados. O usuário pode interagir diretamente com os dados no painel de dados para modificar o fluxo 323 no painel de fluxo 313. O usuário também pode interagir diretamente com o painel de dados para modificar valores de campo individuais. Em algumas implementações, quando o usuário faz uma mudança em um valor de campo, a interface do usuário aplica a mesma mudança a todos os demais valores na mesma coluna cujos valores (ou padrão) coincidem com o valor que o usuário acabou de mudar. Por exemplo, se um usuário mudou "WA" para "Washington" para um valor de campo em uma coluna de dados Estado, algumas implementações atualizam todos os demais valores "WA" para "Washington" na mesma coluna. Algumas implementações vão além de atualizar a coluna e substituem quaisquer abreviações de estado na coluna pelos nomes completos dos estados (por exemplo, substituindo "OR" por "Oregon"). Em algumas implementações, solicita-se ao usuário que confirme antes de aplicar uma mudança global a toda uma coluna. Em algumas implementações, uma mudança a um valor em uma coluna também pode ser aplicada (automática ou pseudoautomaticamente) a outras colunas. Por exemplo, uma fonte de dados pode incluir tanto um estado para residência quanto um estado para cobrança. Uma mudança na formação para os estados pode ser então aplicada a ambos.
[0110]A amostragem de dados no painel de dados 315 é selecionada para oferecer informações de valor ao usuário. Por exemplo, algumas implementações selecionam linhas que exibem a faixa total de valores para um campo de dados (incluindo valores discrepantes) . Em outro exemplo, quando um usuário seleciona nós que têm duas ou mais tabelas de dados, algumas implementações selecionam linhas para ajudar a juntar as duas tabelas. As linhas exibidas no painel de dados 315 são selecionadas para exibir tanto linhas que coincidem entre as duas tabelas quanto linhas que não coincidem. Isso pode ser de grande auxílio para determinar quais campos utilizar na junção e/ou para determinar qual tipo de junção usar (por exemplo, interna, externa esquerda, externa direita ou externa completa).
[0111]A Figura 3C ilustra alguns dos recursos ilustrados na interface do usuário, e o que é exibido pelos recursos. Conforme ilustrado acima na Figura 3B, o fluxograma 323 é sempre exibido no painel de fluxo 313. O painel de fluxo 314 e o painel de dados 315 também são sempre exibidos, mas o conteúdo desses painéis muda com base em qual nó ou nós são selecionados no painel de fluxo 313. Em alguns casos, a seleção de um nó no painel de fluxo 313 abre um ou mais painéis específico ao nó (não ilustrado na Figura 3A ou Figura 3B). Quando exibido, um painel específico ao nó é exibido em aditamento aos demais painéis. Em algumas implementações, painéis específicos ao nó são exibidos como janelas suspensas, que podem ser movimentados. Em algumas implementações, painéis específicos ao nó são exibidos em localizações fixas dentro da interface do usuário. Como mencionado acima, o painel esquerdo 312 inclui uma paleta/seletor de fonte de dados para selecionar ou abrir fontes de dados, bem como uma paleta de operações para selecionar operações que podem ser aplicadas ao fluxograma 323. Algumas implementações também incluem "outra paleta de fluxo", que permite ao usuário importar todo ou parte de outro fluxo ao fluxo atual 323.
[0112]Diferentes nós dentro do fluxograma 323 executam diferentes tarefas, e, portanto, as informações internas dos nós diferem. Além disso, algumas implementações exibem diferentes informações dependendo de se um nó é selecionado ou não. Por exemplo, um nó não selecionado inclui uma descrição ou rótulo simples, ao passo que um nó selecionado exibe informações mais detalhadas. Algumas implementações também exibem o status de operações. Por exemplo, algumas implementações exibem os nós dentro do fluxograma 323 de maneiras diferentes dependendo de se as operações do nó foram executadas ou não. Além disso, dentro da paleta de operações, algumas implementações exibem as operações de maneiras diferentes dependendo de se elas encontram-se disponíveis para o usuário com o nó atualmente selecionado ou não.
[0113]Um fluxograma 323 oferece uma maneira fácil e visual de entender como os dados estão sendo processados, e mantém o processo organizado de uma maneira que é lógica para o usuário. Embora o usuário possa editar um fluxograma 323 diretamente no painel de fluxo 313, as mudanças às operações tipicamente são realizadas de uma maneira mais imediata operando diretamente sobre os dados ou esquemas no painel de perfis 314 ou no painel de dados 315 (por exemplo, clicando com o botão direito nas estatísticas para um campo de dados no painel de perfis a fim de adicionar ou remover uma coluna ao/do fluxo).
[0114]Em vez de exibir um nó para cada pequena operação, os usuários podem agrupar operações em um número menor de nós mais significativos. Por exemplo, uma junção seguida pela remoção de duas colunas pode ser implementada em um nó em vez de três nós distintos.
[0115]Dentro do painel de fluxo 313, o usuário pode executar várias tarefas, inclusive: • Mudar a seleção do nó. Isso define quais dados são exibidos no restante da interface do usuário. • Fixar operações de fluxo. Isso permite que o usuário especifique que alguma parte do fluxo deve acontecer primeiramente e não pode ser reordenada. • Dividir e combinar operações. Os usuários podem facilmente reorganizar uma operação para satisfazer um modelo lógico do que está acontecendo. Por exemplo, um usuário pode querer criar um nó chamado "Normalizar códigos de hospital", que contém muitas operações e casos especiais. O usuário pode criar, inicialmente, operações individuais, em seguida aglutinar os nós que representam essas operações individuais no supernó "Normalizar códigos de hospital". De modo oposto, tendo criado um nó que contém muitas operações individuais, o usuário pode optar por dividir uma ou mais das operações (por exemplo, para criar um nó que pode ser reutilizado mais genericamente).
[0116]O painel de perfis 314 oferece uma maneira rápida para os usuários descobrirem se os resultados das transformadas são mesmo o que esperavam. Valores discrepantes e valores incorretos tipicamente saltam aos olhos com base em comparações a ambos os outros valores no nó ou com base em comparações a valores em outros nós. O painel de perfis ajuda os usuários a pôr a luz problemas de dados, independentemente de se os problemas são causados por transformadas incorretas ou por dados sujos. Além de ajudar os usuários a descobrir dados ruins, o painel de perfis também permite interações diretas para consertar os problemas descobertos. Em algumas implementações, o painel de perfis 314 atualiza assincronamente. Quando um nó é selecionado no painel de fluxo, a interface do usuário começa a popular valores parciais (por exemplo, histogramas de distribuição de valores de dados) que melhoram com o tempo. Em algumas implementações, o painel de perfis inclui um indicador para alertar o usuário se ele foi concluído ou não. Com conjuntos de dados muito grandes, algumas implementações constroem um perfil baseado somente em dados de amostra.
[0117]Dentro do painel de perfis 314, o usuário pode executar várias tarefas, inclusive: • Investigar faixas de dados e correlações. Os usuários podem usar o painel de perfis 314 para focar em certas relações de dados ou colunas usando navegação direta. • Filtrar dados ou faixas de dados. Os usuários podem adicionar operações de filtro ao fluxo 323 através de interações diretas. Isso resulta na criação de novos nós no painel de fluxo 313.
• Transformar dados. Os usuários podem interagir diretamente com o painel de perfis 314 a fim de mapear valores de uma faixa para outro valor. Isso cria novos nós no painel de fluxo 313.
[0118]O painel de dados 315 oferece uma maneira para os usuários verem e modificarem linhas que resultam dos fluxos. Tipicamente, o painel de dados seleciona uma amostragem de linhas correspondentes ao nó selecionado (por exemplo, uma amostra de 10, 50 ou 100 linhas em vez de um milhão de linhas). Em algumas implementações, as linhas são amostradas a fim de exibir uma variedade de recursos. Em algumas implementações, as linhas são amostradas estatisticamente, tal como cada nª linha.
[0119]O painel de dados 315 é tipicamente onde um usuário arruma os dados (por exemplo, quando a fonte de dados não é arrumada). Assim como o painel de perfis, o painel de dados atualiza assincronamente. Quando um nó é selecionado pela primeira vez, as linhas no painel de dados 315 começam a surgir, e a amostragem melhora à medida que o tempo passa. A maioria dos conjuntos de dados só terá um subconjunto dos dados disponível aqui (a não ser que o conjunto de dados seja pequeno).
[0120]Dentro do painel de dados 315, um usuário pode executar várias tarefas, inclusive: • Organizar para navegação. Um usuário pode organizar os dados no painel de dados com base em uma coluna, o que não exerce efeito sobre o fluxo. A finalidade consiste em ajudar a navegar os dados no painel de dados. • Filtrar para navegação. O usuário pode filtrar os dados que estão em visualização, o que não adiciona um filtro ao fluxo. • Adicionar um filtro ao fluxo. Um usuário também criar um filtro que é aplicado ao fluxo. Por exemplo, o usuário pode selecionar um valor de dados individual para um campo de dados específico, em seguida tomar uma medida para filtrar os dados de acordo com esse valor (por exemplo, excluir esse valor ou incluir somente esse valor). Nesse caso, a interação do usuário cria um novo nó no fluxo de dados 323. Algumas implementações permitem ao usuário selecionar vários valores de dados em uma única coluna e, em seguida, construir um filtro com base no conjunto de valores selecionados (por exemplo, excluir o conjunto ou limitar a somente aquele conjunto). • Modificar os dados em uma linha. O usuário pode modificar diretamente uma linha. Por exemplo, mudar um valor de dados para um campo específico em uma linha específica de 3 para 4. • Mapear um valor a outro. O usuário pode modificar um valor de dados para uma coluna específica e propagar essa mudança para todas as linhas que tenham esse valor para a coluna específica. Por exemplo, substituir "N.Y" por "NY" em toda uma coluna que representa estados. • Dividir colunas. Por exemplo, se o usuário percebe que as datas foram formatadas como "14-Nov-2015", ele pode dividir esse campo em três campos distintos para dia, mês e ano. • Fundir colunas. O usuário pode fundir duas ou mais colunas para criar uma única coluna combinada.
[0121]Um painel específico ao nó exibe informações que são particulares a um nó selecionado no fluxo. Como um painel específico ao nó não é necessário durante a maior parte do tempo, a interface do usuário tipicamente não designa uma região com a interface do usuário que sirva exclusivamente para esse fim. Em vez disso, um painel específico ao nó é exibido de acordo com o necessário, tipicamente por uma janela suspensa que flutua sobre outras regiões da interface do usuário. Por exemplo, algumas implementações utilizam um painel específico ao nó para exibir interfaces do usuário específicas para junções, uniões, pivotamentos,
despivotamentos, execuções de scripts Python, análise de arquivos de log ou transformação de objetos JSON em forma tabular.
[0122]A Paleta/Seletor de Fonte de Dados permite ao usuário trazer dados de várias fontes de dados. Em algumas implementações, a paleta/seletor de fonte de dados encontra-se no painel esquerdo 312. O usuário pode executar várias tarefas com a paleta/seletor de fonte de dados, inclusive: • Estabelecer conexão com uma fonte de dado. Isso permite ao usuário trazer dados de uma fonte de dados, que pode ser uma base de dados SQL, um arquivo de dados, tal como um CSV ou planilha, uma base de dados não relacional, um serviço web ou outra fonte de dados. • Definir propriedades de conexão. O usuário pode especificar credenciais e outras propriedades necessárias para conectar-se a fontes de dados. Para algumas fontes de dados, as propriedades incluem a seleção de dados específicos (por exemplo, uma tabela específica em uma base de dados ou uma folha específica de um arquivo de pasta de trabalho).
[0123]Em muitos casos, os usuários invocam operações sobre nós no fluxo com base em interações do usuário com o painel de perfis 314 e o painel de dados 315, conforme ilustrado acima. Além disso, o painel esquerdo 312 oferece uma paleta de operações, que permite ao usuário invocar certas operações. Por exemplo, algumas implementações incluem uma opção para "Invocar um script Python" na paleta de operações. Além disso, quando os usuários criam nós que desejam reutilizar, eles podem salvá-los como operações disponíveis na paleta de operações. A paleta de operações oferece uma lista de operações conhecidas (incluindo operações definidas pelo usuário) e permite ao usuário incorporar as operações ao fluxo usando gestos da interface do usuário (por exemplo, arrastar e soltar).
[0124]Algumas implementações oferecem Outra Paleta/Seletor de Fluxo, que permite aos usuários que reutilizem facilmente fluxos que construíram ou fluxos que outras pessoas construíram. A outra paleta de fluxo oferece uma lista de outros fluxos dos quais o usuário pode começar, ou que pode incorporar. Algumas implementações suportam selecionar partes de outros fluxos além de selecionar fluxos inteiros. O usuário pode incorporar outros fluxos usando gestos da interface do usuário, tais como arrastar e soltar.
[0125]Os intervalos de nó especificam exatamente quais operações estão acontecendo em um nó. Há informações suficientes para permitir que o usuário "refatore" um fluxo ou entenda um fluxo em mais detalhes. O usuário pode visualizar exatamente o que está no nó (por exemplo, quais operações são realizadas) e pode remover as operações do nó para outro nó.
[0126]Algumas implementações incluem um modelo de projeto, que permite ao usuário agrupar vários fluxos em um "projeto" ou "pasta de trabalho". No caso de fluxos complexos, o usuário pode dividir o fluxo geral em componentes mais inteligíveis.
[0127]Em algumas implementações, o status das operações é exibido no painel esquerdo 312. Como muitas operações são executadas assincronamente em segundo plano, a região de status das operações indica ao usuário quais operações estão em andamento, bem como o status do andamento (por exemplo, 1% concluída, 50% concluída ou 100% concluída). O status das operações demonstra quais operações estão acontecendo em segundo plano, permite ao usuário cancelar operações, permite ao usuário atualizar os dados, e permite ao usuário obter resultados parciais para a conclusão.
[0128]Um fluxo, tal como o fluxo 323 na Figura 3B, representa um curso de linhas que fluem das fontes de dados originais aos conjuntos de dados alvo, passando por transformações. Por exemplo, a Figura 3D ilustra um fluxo de exemplo simples 338. Esse fluxo baseia-se em acidentes de trânsito envolvendo veículos. Os dados relevantes são armazenados em uma base de dados SQL em uma tabela de acidentes e uma tabela de veículos. Nesse fluxo, um primeiro nó 340 lê os dados da tabela de acidentes, e um segundo nó 344 lê os dados da tabela de veículos. Nesse exemplo, a tabela de acidentes é normalizada (342) e um ou mais campos chave são identificados (342). À semelhança, um ou mais campos chave são identificados (346) para os dados de veículo. As duas tabelas são juntadas (348) usando uma chave compartilhada, e os resultados são gravados (350) em um conjunto de dados alvo. Se a tabela de acidentes e a tabela de veículos estiverem ambas na mesma base de dados SQL, uma alternativa consiste em criar um nó simples que leia os dados das duas tabelas em uma consulta. A consulta pode especificar quais campos de dados selecionar e se os dados devem ser limitados por um ou mais filtros (por exemplo, condições ONDE). Em alguns casos, os dados são recuperados e juntados localmente, conforme indicado no fluxo 338, porque os dados usados para juntar as tabelas precisam ser modificados. Por exemplo, a chave primária da tabela de veículos pode ter um tipo de dados de número inteiro, ao passo que a tabela de acidentes pode especificar os veículos envolvidos usando um campo de caracteres com zero à esquerda.
[0129]Uma abstração de fluxo como a ilustrada na Figura 3D é comum à maioria dos produtos de ETL e produtos de preparação de dados. Esse modelo de fluxo dá aos usuários controle lógico sobre suas transformações. Esse fluxo é interpretado geralmente como um programa imperativo e executado com pouca ou nenhuma modificação por parte da plataforma. Ou seja, o usuário proveu os detalhes específicos para definir o controle físico sobre a execução. Por exemplo, um típico sistema de ETL trabalhando sobre esse fluxo abrirá as duas tabelas a partir da base de dados exatamente como especificado, moldará os dados como especificado, juntará as tabelas no motor de ETL e então gravará o resultado para o conjunto de dados alvo. O controle total sobre o plano físico pode ser útil, mas obstrui a capacidade do sistema de modificar ou otimizar o plano para melhorar o desempenho (por exemplo, executar o fluxo precedente no servidor SQL). A maioria dos clientes não necessita de controle sobre os detalhes de execução, logo as implementações aqui permitem que as operações sejam expressas declarativamente.
[0130]Algumas implementações aqui expandem a faixa de consultas totalmente declarativas para programas imperativos. Algumas implementações utilizam uma linguagem de consulta analítica (AQL) interna e um Avaliador Federado. Por padrão, um fluxo é interpretado como uma simples especificação de consulta declarativa sempre que possível. Essa consulta declarativa é convertida em AQL e repassada a um Avaliador de Consultas, que, em última análise, reparte os operadores, distribui-os e executa-os. No exemplo acima na Figura 3D, o fluxo total pode ser lançado como uma única consulta. Se ambas as tabelas vierem do mesmo servidor, toda essa operação provavelmente seria empurrada para a base de dados remota, obtendo assim um benefício de desempenho significativo. A flexibilidade não só permite a otimização e distribuição da execução do fluxo, mas também permite a execução de consultas a fontes de dados vivas (por exemplo, uma base de dados transacional, e não só de um armazém de dados).
[0131]Quando um usuário deseja controlar a ordem de execução real do fluxo (por exemplo, por motivos de desempenho), ele pode fixar uma operação. A fixação diz ao módulo de execução de fluxo para não mover as operações além daquele ponto no plano. Em alguns casos, um usuário pode desejar exercer controle extremo sobre a ordem temporariamente (por exemplo, durante a criação ou depuração do fluxo). Nesse caso, todos os operadores podem ser fixados, e o fluxo é executado exatamente na ordem que o usuário especificou.
[0132]Observe-se que nem todos os fluxos são decomponíveis em uma única consulta AQL, conforme ilustra a Figura 3E. Nesse fluxo, há uma soltura de hora em hora (352) que ocorre de hora em hora (362), e os dados são normalizados
(354) antes de acrescentá-los (356) a uma base de dados temporária. Em seguida, diariamente (364), os dados da base de dados temporária são agregados (358) e gravados (360) como um conjunto de dados alvo. Nesse caso, o cronograma de hora em hora e o cronograma diário têm que permanecer como peças separadas.
[0133]As Figuras de 4A a 4V ilustram alguns aspectos de adicionar uma junção a um fluxo de acordo com algumas implementações. Conforme ilustra a Figura 4A, a interface do usuário incluiu um painel esquerdo 312, uma área de fluxo 313, uma área de perfis 314 e uma grade de dados 315. No exemplo das Figuras de 4A a 4V, o usuário primeiramente conecta-se a uma base de dados SQL usando a paleta de conexão no painel esquerdo 312. Nesse caso, a base de dados inclui dados do Sistema de Relatórios de Análise de Fatalidades (FARS) fornecidos pela Administração de Segurança no Trânsito das Rodovias Nacionais. Conforme ilustra a Figura 4B, o usuário seleciona a tabela "Acidentes" 404 na lista 402 de tabelas disponíveis. Na Figura 4C, o usuário arrasta o ícone de tabela Acidentes 406 para a área de fluxo 313. Uma vez que o ícone de tabela 406 é solto dentro da área de fluxo 313, um nó 408 é criado para representar a tabela, conforme ilustra a Figura 4D. Nessa altura, os dados para a tabela Acidentes são carregados, e as informações de perfil para a tabela de acidentes são exibidas no painel de perfis
314.
[0134]O painel de perfis 314 exibe dados de distribuição para cada uma das colunas, inclusive a coluna de estados 410, conforme ilustra a Figura 4E. Em algumas implementações, cada coluna de dados no painel de perfis exibe um histograma para demonstrar a distribuição de dados. Por exemplo, Califórnia, Flórida e Geórgia têm um grande número de acidentes, ao passo que Delaware possui um número de acidentes baixo. O painel de perfis facilita identificar colunas que sejam chaves ou chaves parciais usando ícones de chave 412 no topo de cada uma. Conforme ilustra a Figura 4F, algumas implementações utilizam três ícones diferentes para especificar se uma coluna é uma chave de base de dados, uma chave de sistema 414 ou "quase" uma chave de sistema 416. Em algumas implementações, uma coluna é quase uma chave de sistema quando a coluna, junto com uma ou mais outras colunas, é uma chave de sistema. Em algumas implementações, uma coluna é quase uma chave de sistema se a coluna fosse uma chave de sistema caso as linhas com valor nulo fossem excluídas. Nesse exemplo, tanto "Caso ST" quanto "Número de Caso" são quase chaves de sistema.
[0135]Na Figura 4G, o usuário selecionou a tabela "Pessoas" 418 no painel esquerdo 312. Na Figura 4H, o usuário arrasta a tabela pessoas 418 para a área de fluxo 313, que é exibida como um ícone móvel 419 enquanto é arrastada. Depois de soltar o ícone de tabela Pessoas 419 dentro da área de fluxo 313, um nó Pessoas 422 é criado na área de fluxo, conforme ilustra a Figura 4I. Nesse estágio, não há conexão entre o nó Acidentes 408 e o nó Pessoas 422. Nesse exemplo, ambos os nós são selecionados, de modo que o painel de perfis 314 divide-se em duas partes: a primeira parte 420 exibe as informações de perfil para o nó Acidentes 408, e a segunda parte 421 exibe as informações de perfil para o nó Pessoas 422.
[0136]A Figura 4J traz uma vista ampliada do painel de fluxo 313 e do painel de perfis 314. O painel de perfis 314 inclui uma opção 424 para exibir candidatos a junção em coluna (isto é, possibilidades para juntar os dados dos dois nós). Depois de selecionar essa opção, os campos de dados que são candidatos a junção são exibidos no painel de perfis 314, conforme ilustra a Figura 4K. Como os candidatos a junção agora são exibidos, o painel de perfis 314 exibe uma opção 426 para ocultar os candidatos a junção em coluna. Nesse exemplo, o painel de perfis 314 indica (430) que a coluna caso ST na tabela Pessoas pode ser juntada ao campo caso ST na tabela Acidentes. O painel de perfis também indica (428) que há três candidatos a junção adicionais na tabela Acidentes e indica (432) que há dois candidatos a junção adicionais na tabela Pessoas. Na Figura 4L, o usuário clica (433) no ícone dica, e, em resposta, o painel de perfis posiciona as duas colunas candidatas em adjacência uma à outra conforme ilustra a Figura 4M. O cabeçalho 434 para a coluna Caso ST da tabela Acidentes agora indica que ela pode ser juntada à coluna caso ST da tabela Pessoas.
[0137]A Figura 4N ilustra um método alternativo para juntar os dados para vários nós. Nesse exemplo, o usuário carregou os dados da tabela Acidentes 408 e os dados da tabela Populações 441 na área de fluxo 313. Ao simplesmente arrastar o nó Populações 441 para cima do nó Acidentes 408, cria-se automaticamente uma junção e exibe-se um painel Experiência de Junção 442 que permite ao usuário revisar e/ou modificar a junção. Em algumas implementações, a Experiência de Junção é posicionada no painel de perfis 314; em outras, a Experiência de Junção substitui temporariamente o painel de perfis 314. Quando a junção é criada, adiciona-se um novo nó 440 ao fluxo, o qual exibe graficamente a criação de uma conexão entre os dois nós 408 e 441.
[0138]A Experiência de Junção 442 inclui uma área de barra de ferramentas 448 com vários ícones, conforme ilustra a Figura 4O. Quando o ícone de candidato a junção 450 é selecionado, a interface identifica quais campos em cada tabela são candidatos a junção. Algumas implementações incluem um ícone favoritos 452, que exibe campos de dados "favoritos" em destaque (por exemplo, ou previamente selecionados pelo usuário, ou previamente identificados como importantes pelo usuário, ou previamente selecionados por usuários em geral). Em algumas implementações, o ícone favorito 452 é usado para designar certos campos de dados como favoritos. Como há espaço limitado para exibir colunas no painel de perfis 314 e no painel de dados 315, algumas implementações utilizam as informações nos campos de dados favoritos para selecionar quais colunas são exibidas por padrão.
[0139]Em algumas implementações, a seleção do ícone "exibir chaves" 454 faz com que a interface identifique quais colunas de dados são chaves ou partes de uma chave que consiste em vários campos de dados. Algumas implementações incluem um ícone de alternância dados/metadados 456, que alterna entre exibir informações acerca dos dados e exibir informações acerca dos metadados. Em algumas implementações, os dados são sempre exibidos, e o ícone metadados 456 alterna entre exibir e não exibir os metadados além dos dados. Algumas implementações incluem um ícone grade de dados 458, que alterna entre exibir e não exibir a grade de dados 315. Na Figura 4O, a grade de dados está sendo exibida, logo a seleção do ícone grade de dados 458 faria com que a grade de dados desaparecesse. Algumas implementações tipicamente também incluem um ícone de busca 460, que abre uma janela de busca. Por padrão, uma busca aplica- se tanto aos dados quanto aos metadados (por exemplo, tanto aos nomes dos arquivos de dados quanto aos valores de dados nos campos). Algumas implementações incluem a opção por uma busca avançada para especificar mais precisamente o que está sendo procurado.
[0140]À esquerda na experiência de junção 442 encontra-se um conjunto de controles de junção, incluindo uma especificação do tipo de junção 464. Como é de conhecimento na técnica, uma junção é tipicamente uma junção externa esquerda, uma junção interna, uma junção externa direita ou uma junção externa completa. Essas são representadas graficamente pelos ícones de junção 464. O tipo de junção atual é destacado, mas o usuário pode mudar o tipo de junção ao selecionar um ícone diferente.
[0141]Algumas implementações oferecem uma visão geral da condição de junção 466, que exibe tanto os nomes dos campos em ambos os lados da junção quanto os histogramas de valores de dados para os campos de dados em ambos os lados da junção. Quando há vários campos de dados na junção, algumas implementações exibem todos os campos de dados relevantes; outras incluem um controle da interface do usuário (não ilustrado) para rolar através dos campos de dados na junção. Algumas implementações também incluem um controle de visão geral 468, que demonstra quantas linhas de cada uma das tabelas são juntadas com base no tipo de condição de junção. A seleção de partes dentro desse controle determina o que é exibido no painel de perfis 314 e na grade de dados 315.
[0142]As Figuras 4P, 4Q e 4R ilustram interfaces do usuário alternativas no que diz respeito à área de controle de junção 462. Em cada caso, o tipo de junção aparece no topo. Em cada caso, há uma representação visual dos campos de dados incluídos na junção. Aqui, há dois campos de dados na junção, que são caso ST e Ano. Em cada uma dessas alternativas, também há uma seção que ilustra graficamente as frações de linhas de cada tabela que são juntadas. A parte superior da Figura 4Q aparece na Figura 4U abaixo.
[0143]A Figura 4R inclui uma parte inferior que ilustra como as duas tabelas são relacionadas. A barra de divisão 472 representa as linhas na tabela Acidentes, e a barra de divisão 474 representa a tabela Populações. A barra grande 477 no meio representa as linhas que são conectadas por uma junção interna entre as duas tabelas. Como o tipo de junção atualmente selecionado é junção externa esquerda, o conjunto de resultados de junção 467 também inclui uma parte 478 que representa linhas da tabela Acidentes que não se ligam a nenhuma linha da tabela Populações. Ao fundo encontra-se outro retângulo 480, que representa linhas das tabelas Populações que não se ligam a nenhuma linha da tabela Acidentes. Como o tipo de junção atual é uma junção externa esquerda, a parte 480 não é incluída no conjunto de resultados 476 (as linhas no retângulo inferior 480 seriam incluídas em uma junção externa direita ou uma junção externa completa). O usuário pode selecionar qualquer parte desse diagrama, e a parte selecionada é exibida no painel de perfis e no painel de dados. Por exemplo, o usuário pode selecionar o retângulo "parte externa esquerda" 478 e então dar uma olhada nas linhas no painel de dados para ver se essas linhas são relevantes para a análise do usuário.
[0144]A Figura 4S ilustra uma Experiência de Junção usando os elementos da interface de controle de junção ilustrados na Figura 4R, inclusive o seletor de controle de junção 464. Aqui, o ícone de junção externa esquerda 482 é destacado, conforme ilustra mais claramente a visão ampliada da Figura 4T. Nesse exemplo, a primeira tabela é a tabela Acidentes, e a segunda tabela é a tabela Fator. Conforme ilustra a Figura 4U, a interface exibe tanto o número de linhas que são juntadas 486 quanto o número de linhas que não são juntadas 488. Esse exemplo possui um grande número de linhas que não são juntadas. O usuário pode selecionar a barra não juntadas 488 para abrir a tela na Figura 4V. Através de escovação no perfil e filtragem na grade de dados, o usuário é capaz de observar que os nulos são o resultado de uma junção externa esquerda e de valores não coincidentes porque a tabela Fator não possui entradas anteriores a 2010
[0145]As implementações reveladas suportam muitos recursos que ajudam em uma variedade de cenários. Muitos dos recursos foram descritos acima, mas alguns dos cenários a seguir ajudam a ilustrá-los. Cenário 1: Coleta de logs de eventos
[0146]Alex trabalha com TI e uma de suas funções consiste em coletar e preparar logs de máquinas em sua infraestrutura para produzir um conjunto de dados compartilhados que é usado para várias depurações e análises na organização de TI.
[0147]As máquinas rodam Windows, e Alex precisa coletar os logs de Aplicativos. Já existe um agente que roda toda noite e despeja exportações CSV dos logs em uma pasta compartilhada; os dados de cada dia são salvos em uma pasta diferente, e são salvos com um formato que indica o nome da máquina. Um fragmento do log de Aplicativos é ilustrado na Figura 5A.
[0148]Ele tem algumas características interessantes: • A linha 1 contém informações de cabeçalho. Esse pode ou não ser o caso em geral. • Cada linha de dados possui seis colunas, mas o cabeçalho tem cinco. • O deliminador aqui é claramente ",". • A coluna final pode ter usado cadeias multilinha entre aspas. Observe-se que as linhas de 3 a 9 aqui são todas parte de uma linha. Observe-se também que esse campo utiliza aspas dobradas para indicar aspas que devem ser interpretadas literalmente.
[0149]Alex cria um fluxo que lê em todos os arquivos CSV em dada pasta e executa uma união irregular neles (por exemplo, criar um campo de dados se ele existir em ao menos um dos arquivos CSV, mas, quando o mesmo campo de dados existir em dois ou mais dos arquivos CSV, criar só uma instância desse campo de dados). A rotina de entrada CSV faz um trabalho satisfatório lendo em cinco colunas, mas engasga nas aspas na sexta coluna, lendo-as como se fossem várias colunas.
[0150]Alex então: • Seleciona as colunas no painel de dados e funde-as novamente. • Adiciona o nome da máquina de onde vieram, tirado do nome do arquivo. Ele faz isso ao selecionar o nome da máquina em um exemplo dos dados e escolher "Extrair como nova coluna". O sistema deduz um padrão com base nessa ação • Gera um identificador exclusivo para cada linha clicando com o botão direito e escolhendo "adicionar identificador". • Edita os nomes e tipos de coluna no painel de dados.
[0151]Tudo isso é consumado por ação direta sobre os dados no painel de dados 315, mas resulta em lógica que é inserida no fluxo no painel de fluxo 313.
[0152]Alex então arrasta seu repositório de dados alvo para o painel de fluxo e conecta a saída para acrescentar esses registros a um cache que conterá um registro completo de seus logs.
[0153]Por fim, Alex consulta no fluxo esse conjunto de dados alvo para encontrar o conjunto de máquinas que se reportaram no dia anterior, compara-o às máquinas de hoje, e emite um alerta para Alex com uma lista de máquinas esperadas que não se reportaram.
[0154]Observe-se que Alex poderia ter obtido o mesmo resultado de diferentes maneiras. Por exemplo: • Alex poderia ter criado dois fluxos distintos: um que realizasse a ingestão; e um que comparasse as máquinas de cada dia às máquinas do dia anterior e então alertasse Alex com os resultados. • Alex poderia ter criado um fluxo que realizasse a ingestão em um estágio. Feito isso, Alex poderia executar um segundo fluxo que consultasse a base de dados e comparasse cada dia ao dia anterior e alertasse Alex. • Alex poderia ter criado um fluxo que teria o alvo tanto como entrada quanto como saída. Esse fluxo realizaria a ingestão, gravaria-a na base de dados e adicionalmente agregaria para encontrar as máquinas do dia. Ele também consultaria o alvo para obter os resultados do dia anterior, realizaria a comparação e dispararia o alerta.
[0155]Alex sabe que as máquinas se reportariam à noite, logo a primeira coisa que Alex faria de manhã seria executar seu fluxo. Ele então teria o resto da manhã para fazer um check-up nas máquinas que não se reportaram. Cenário 2: Coletando e Integrando o FARS
[0156]Bonnie trabalha para uma seguradora e gostaria de extrair os dados do Sistema de Relatórios de Análise de Fatalidades (FARS) como um componente de sua análise. Os dados do FARS são disponibilizados via FTP, e Bonnie precisa descobrir como obtê-los e reconstruí-los. Ela decide fazê-lo usando o aplicativo de prep de dados 250.
[0157]Bonnie dá uma olhada no conjunto de formados em que o FARS publica e decide usar o arquivo DBF. Esses arquivos DBF encontram-se espalhados no site FTP e disponíveis apenas em arquivos ZIP compactados. Bonnie explora uma visualização em árvore e seleciona os arquivos que deseja baixar. Enquanto os dados baixam, Bonnie dá início à etapa seguinte em seu fluxo. Ela seleciona a coletânea de arquivos e escolhe "Extrair", que adiciona uma etapa para descompactar os arquivos em diferentes pastas rotuladas por ano.
[0158]À medida que os dados começam a chegar, Bonnie começa a ver os problemas: • Os primeiros anos têm três arquivos, correspondentes a três tabelas: acidente, pessoa e veículo. Essas fazem-se presentes nos últimos anos, mas há muito mais tabelas além delas. • Os arquivos não têm nomes uniformes. Por exemplo, o arquivo de acidentes chama-se "accident.dbf’ nos anos de 1975 a 1982 e de 1994 a 2014, mas chama-se "accYYYY.dbf’ (onde YYYY é o ano em quatro dígitos) nos anos entre esses. • Mesmo quando os nomes das tabelas são iguais, sua estrutura muda com o tempo. As tabelas mais recentes incluem colunas adicionais que não se fazem presentes nos dados mais antigos.
[0159]Bonnie começa com a tabela de acidentes, presente em todos os anos. Ela seleciona os arquivos, clica com o botão direito e seleciona "União", que realiza uma união irregular e preserva as colunas. Ela repete essa operação com as outras três tabelas presentes em todos os anos e, em seguida, com as tabelas remanescentes. Quando ela termina, o estágio final do fluxo dela produz 19 tabelas diferentes.
[0160]Feito isso, ela tenta reconstruir os dados. Parece que a chave de junção em comum deveria ser uma coluna chamada ST CASE, mas, só de olhar o painel de perfis para a tabela de acidentes, ela percebe que essa não é uma coluna chave em lugar nenhum. ST CASE não é uma chave, mas, ao clicar nos anos, ela percebe facilmente que só há uma ST CASE por ano. Juntos, ano e ST CASE parecem uma boa chave de junção.
[0161]Ela começa com a tabela de pessoas. Antes que possa juntá-la, ela precisa do ano em cada uma de suas tabelas, mas ele não está lá. No entanto, como os caminhos do arquivo têm o ano, ela pode selecionar esses dados no painel de dados e escolher "Extrair como nova coluna". O sistema deduz o padrão certo para isso e extrai o ano para cada linha. Em seguida, ela seleciona ambas as tabelas em seu fluxo, seleciona as colunas ano e ST CASE de uma vez e arrasta-as para a outra tabela, criando uma junção.
[0162]Agora que ela possui as chaves, ela continua criando junções para organizar os dados do FARS. Quando termina, ela publica os dados como um TDE (Extrato de Dados do Tableau) para seu Serviço de Tableau de modo que a equipe dela possa usá-los. Cenário 3: Limpeza do FARS
[0163]Colin é outro funcionário no mesmo departamento que Bonnie. Alguns funcionários estão tentando usar os dados que o fluxo de Bonnie produz, mas eles incluem muitos valores crípticos. Ao descobrir que Bonnie foi para outra empresa, eles procuram Colin.
[0164]Olhando para o fluxo, Colin percebe facilmente sua lógica geral e também observa os dados crípticos codificados. Quando ele encontra o manual de 200 páginas em PDF que contém as tabelas de pesquisa (LUTs) para os códigos crípticos, o processo parece intimidador. Uma tabela de pesquisa exemplificativa no
PDF é exibida na Figura 5B. Algumas são mais simples, e outras são significativamente mais complexas.
[0165]Colin começa com algumas das tabelas mais importantes. Ele descobre que pode selecionar a tabela no arquivo PDF e colá-la no painel de fluxo
313. Em alguns casos, os dados na tabela não estão totalmente corretos, mas Colin faz um trabalho razoável e pode então consertar manualmente os resultados no painel de dados 315, economizando tempo considerável. À medida que trabalha, ele vê seus resultados imediatamente. Se as tabelas não alinham-se, ele percebe de pronto.
[0166]Em última análise, Colin abre diversas LUTs que parecem particularmente relevantes para a análise que sua equipe está realizando e publica os resultados para que ela possa utilizar os dados. À medida que as pessoas solicitam mais informações acerca de colunas específicas, Colin pode aumentar ainda mais seu fluxo para abrir mais LUTs. Cenário 4: Descobrindo erros nos dados
[0167]Danielle, uma desenvolvedora em uma renomada empresa de software, está examinando dados que representam os tempos de construção. Danielle tem controle total sobre o formato dos dados e produziu-os em um formato CSV consumível satisfatório, mas deseja simplesmente carregá-los e acrescentá-los a uma base de dados que criou.
[0168]À medida que carrega os dados, ela examina a visualização de perfis
314. Imediatamente, ela nota algo estranho: há algumas construções com tempos negativos. Certamente há algo de errado, e ela deseja depurar o problema, mas também deseja reunir os dados para análise.
[0169]Ela seleciona os tempos negativos na visualização de perfis e clica em "Manter somente" para manter somente as linhas errôneas. Ela adiciona um alvo para direcioná-las a um arquivo. Ela usará essas linhas brutas para guiar sua depuração.
[0170]Voltando ao fluxo dela, ela adiciona outra ramificação logo antes do filtro. Ela seleciona novamente os valores negativos (por exemplo, no painel de perfis 314 ou no painel de dados 315) e, então, simplesmente pressiona "excluir". Isso substitui os valores por nulo, que é um bom indicador de que o valor real é desconhecido. Ela avança com o resto de seu fluxo simples, acrescentando os dados de construção à sua base de dados e examinará os valores negativos mais tarde. Cenário 5: Rastreando peças de veículo
[0171]Earl trabalha para uma montadora de automóveis e é responsável por manter uma base de dados que exibe o status atual de cada veículo e peça relevante na fábrica. Os dados são reportados a algumas lojas operacionais, mas essas são um tanto grandes. Há centenas de milhares de peças e, como uma instalação automatizada, muitos milhares de registros são criados mecanicamente para cada veículo ou peça à medida que avança na fábrica. Essas lojas operacionais também contêm muitos registros que nada têm a ver com o status das peças, mas com outras informações operacionais (por exemplo, "a pressão na válvula 134 é de 500 kPa"). Existe a necessidade comercial por um registro rápido e conciso para cada peça.
[0172]Earl arrasta as tabelas para cada uma das três lojas operacionais relacionais ao painel de fluxo 313. Duas delas armazenam dados como tabelas simples contendo registros de log. A terceira possui um pequeno esquema de estrelas que Earl rapidamente mescla arrastando e soltando para criar uma junção.
[0173]Em seguida, com arrastes e solturas adicionais, Earl é capaz de realizar rapidamente uma união irregular das tabelas. No resultado, ele pode reunir colunas arrastando-as e soltando-as, e a interface aglutina os resultados para ele.
[0174]O número de identificação de peça é um pouco problemático: um dos sistemas possui um hífen no valor. Earl pega um dos valores no painel de dados 315, seleciona o hífen e pressiona excluir. A interface deduz uma regra para remover os hífens dessa coluna e introduz uma regra no fluxo que remove o hífen para todos os dados nela.
[0175]Earl não deseja a maioria dos códigos de status porque eles não são relevantes para seu projeto atual. Ele só deseja os códigos de status que referem-se a peças. Ele saca uma tabela com informações sobre códigos de status e solta-a no último nó de seu fluxo, resultando em uma nova junção no código de status. Agora ele seleciona apenas as linhas com "tipo alvo" igual a "peça" e escolhe "Manter somente" para filtrar os demais valores. Essa filtragem se dá no painel de perfis 314 ou no painel de dados 315.
[0176]Por fim, Earl só deseja o último valor para cada peça. Através de um gesto direto, ele ordena os dados no painel de dados por data, agrupa por número de peça e adiciona um cálculo de tabela "top-n" para tomar apenas a atualização final para cada peça.
[0177]Earl executa seu fluxo e descobre que ele levará quatro horas para concluir. Mas ele sabe como acelerar o processo. Ele pode gravar a última vez que executou esse fluxo e apenas incorporar novos registros em cada execução subsequente. Para tanto, contudo, ele precisa atualizar as linhas existentes em seu conjunto acumulado e só adicionar linhas se elas representarem novas peças. Ele necessita de uma operação de "fusão".
[0178]Earl utiliza o número de peça para identificar pares e define ações para quando um par ocorrer ou não ocorrer. Com a lógica de atualização, o fluxo de Earl só leva 15 minutos para concluir. O tempo economizado permite que a empresa mantenha um controle muito mais rígido de onde as peças estão em seu armazém e de qual é seu status.
[0179]Earl então envia seu trabalho a um servidor para que ele seja agendado e executado centralmente. Ele também poderia criar uma tarefa agendada em sua máquina desktop que executasse o fluxo usando uma interface de linha de comando. Cenário 6: Uma corretora de investimentos
[0180]Gaston trabalha em uma corretora de investimentos em uma equipe responsável por pegar os dados produzidos por TI e digeri-los para que possam ser usados por várias equipes que trabalham com clientes. A TI produz vários conjuntos de dados que exibem parte do portfólio de um cliente (posições de obrigações, posições de participação acionária etc.), mas cada um deles sozinho não é do que os clientes de Gaston precisam.
[0181]Uma equipe, liderada por Hermine, precisa de todos os dados de posição dos clientes reunidos para que sua equipe possa responder a dúvidas de seus clientes quando eles entrarem em contato. A preparação de dados não é muito complexa.
[0182]Gaston faz alguma massagem nas solturas noturnas na base de dados que a TI produz, une-as e faz algumas verificações simples para garantir que os dados estão ok. Em seguida, ele filtra só as necessidades da equipe de Hermine e cria um TDE para que a equipe dela utilize.
[0183]Com suas ferramentas anteriores, Gaston tinha que lembrar de chegar e executar o fluxo todas as manhãs. Porém, com o novo aplicativo de prep de dados 250, esse fluxo pode ser tratado declarativamente. Ele envia um TDS a Hermine, que a equipe dela utiliza, para que toda a visualização de dados que a equipe de Hermine fizer rode diretamente em contato com a base de dados. Isso significa que Gaston não precisa se preocupar em atualizar os dados e que eles são executados rapidamente.
[0184]Outra equipe, liderada por Ian, utiliza dados semelhantes para fazer resenhas de desempenho das contas de seus clientes. Para produzir esses dados, Gaston reutiliza o trabalho que fez para Hermine, mas filtra os dados para as contas da equipe de Ian e, em seguida, executa um fluxo adicional para juntar os dados a vários índices e indicadores de desempenho para que a equipe de Ian possa fazer sua análise. Esse trabalho é custoso e não parece correr bem ao vivo. Se ele roda o fluxo, leva várias horas para concluí-lo – mas a equipe de Ian só precisa fazê-lo uma vez ao mês. Gaston define um item de calendário recorrente no servidor para executá-lo uma vez ao mês. Cenário 7: Depuração de dados dos clientes
[0185]Karl é um gerente de contas estratégico para uma grande empresa de software. Ele está tentando usar o Tableau para visualizar informações acerca dos participantes em uma conferência do setor, para quem trabalham, quem são seus representantes, se eles são clientes ativos ou prospectivos, se suas empresas são pequenas ou grandes, e assim por diante.
[0186]Karl possui uma lista dos participantes da conferência, mas já viu isso antes. Da última vez que esteve nessa situação, levou 8 horas para limpar a lista, e 15 minutos para construir a visualização uma vez limpa. Dessa vez, ele está usando o aplicativo de preparação de dados 250 para acelerar e automatizar o processo.
[0187]Karl primeiramente deseja limpar os nomes das empresas. Correndo os olhos pelos dados, ele descobre o que esperava: a mesma empresa é listada com frequência em vários formatos diferentes e alguns deles estão redigidos incorretamente. Ele invoca uma rotina de desduplicação difusa oferecida na paleta de operações para identificar possíveis duplicatas. Ele analisa os resultados e corrige alguns casos onde o algoritmo exagerou. Ele também descobre alguns casos em que o algoritmo errou e, então, agrupa-os. Isso produz uma lista de clientes com nomes de empresa canônicos.
[0188]Em seguida, ele tenta juntar seus dados a uma lista de empresas mantida em uma fonte de dados em seu Servidor Tableau. Ele descobre que cada empresa possui várias listagens. Muitas empresas diferentes podem ter o mesmo nome, e uma mesma empresa pode ter várias contas com base na região.
[0189]Para resolver esse problema, Karl utiliza um conector REST para o LinkedIn™ que encontrou e passa-o para cada um dos endereços de e-mail em seus dados a fim de recuperar o país e estado de cada pessoa. Esse procedimento pega as informações que ele detém (por exemplo, nome da pessoa, empresa da pessoa e cargo da pessoa) e utiliza a funcionalidade de busca do LinkedIn para obter o melhor resultado para cada entrada. Em seguida, ele junta os dados de empresa e localização aos dados em seu Servidor para encontrar a conta certa.
[0190]Karl descobre que sua junção nem sempre funciona. O nome de empresa canônico que ele pegou nem sempre coincide com o que consta em sua base de dados de contas. Ele converte sua junção em uma junção difusa, revisa os pares difusos e ainda corrige o resultado manualmente.
[0191]Agora que ele tem seus dados arrumados, ele os abre no Tableau para criar sua visualização dos dados.
[0192]Recursos de fluxo comumente usados incluem: • Vários níveis de uniões, junções e agregações que requerem que o usuário exerça controle preciso sobre a ordem lógica das operações. • Uma disposição que foi organizada e anotada pelo usuário para aprimorar o entendimento. • Necessidade por clareza na estrutura de dados à medida que avança-se através do fluxo. • Reutilização de partes de um fluxo para produzir duas saídas diferentes. • Um autor preparando dados para dois ou mais outros usuários, por vezes em equipes diferentes.
• Agendar a execução automática de fluxos.
[0193]Os aplicativos de preparação de dados são por vezes classificados como sistemas de ETL (extração, transformação e carregamento). Cada uma dessas três fases executa diferentes tipos de tarefas.
[0194]Na fase de extração, os usuários extraem dados de uma ou mais fontes de dados disponíveis. Habitualmente, os usuários executam essas tarefas: • Simplesmente mover arquivos. Por exemplo, o usuário pode recuperar um arquivo de uma fonte FTP antes de outro processamento. • Ingerir dados que variam difundidamente quanto à estrutura (por exemplo, semiestruturados ou não estruturados), ao formato (por exemplo, armazenamento estruturado, arquivos CSV ou arquivos JSON) e à fonte (por exemplo, de um sistema de arquivos ou de uma base de dados formal). • Ler uma fonte inteira, ou uma parte selecionada da mesma. Leituras parciais são comuns, tanto para extrair dados que sejam mais novos ou mudados desde a última ingestão, ou para amostrar ou extrair blocos para fins de desempenho.
[0195]Na fase de transformação, os usuários transformam os dados de uma ampla variedade de maneiras. Habitualmente, as transformações incluem essas tarefas: • Limpar os dados para corrigir erros, lidar com valores ausentes ou duplicados, reconciliar valores variantes que deveriam ser iguais, conformar os valores a padrões, e assim por diante. • Aumentar ou enriquecer os dados através de cálculos escalares e tabulares, agregação, filtragem de linhas e colunas, (des)pivotamento, ou incorporação de dados externos (por exemplo, através de geocodificação). • Combinar várias fontes através de uniões ou junções (inclusive junções difusas).
• Desentrelaçar vários tipos de dados que foram reunidos (ou em linhas ou em colunas) para processamento em separado. • Extrair perfis dos dados ou métricas acerca dos dados para melhor entendê-los.
[0196]Na fase de carregamento, o usuário armazena os resultados para que eles sejam analisados. Isso inclui: • Gravar dados em um Extrato de Dados do Tableau (TDE), arquivos formatados (por exemplo, CSV ou Excel) ou uma base de dados externa. • Criar instantâneos em um cronograma. • Acrescentar ou atualizar dados com novos resultados ou resultados modificados.
[0197]Uma vez que um usuário constrói um fluxo para preparar dados, ele geralmente precisa: • Agendar o fluxo para execução em momentos especificados, ou em consonância com outros fluxos. • Compartilhar o resultado de um fluxo com outros. • Compartilhar o próprio fluxo com outros, para que outros possam examiná- lo, modificá-lo, cloná-lo ou geri-lo. Isso inclui compartilhar o fluxo ou dados com a TI para que a TI possa melhorá-los e geri-los.
[0198]Os sistemas 250 revelados dão controle aos usuários. Em muitos casos, o aplicativo de prep de dados faz escolhas inteligentes para o usuário, mas o usuário é sempre capaz de impor controle. O controle geralmente tem duas facetas diferentes: controle sobre a ordem lógica das operações, que é usado para garantir que os resultados sejam corretos e coincidam com a semântica desejada pelo usuário; e controle físico, que é usado predominantemente para garantir o desempenho.
[0199]O aplicativo de prep de dados 250 revelado também oferece liberdade. Os usuários podem montar e remontar seus componentes de produção de dados como desejarem para obter o formato de dados que desejam.
[0200]Os aplicativos de prep de dados 250 revelados oferecem interação incremental e feedback imediato. Quando um usuário realiza ações, o sistema oferece feedback através de resultados imediatos em amostras dos dados do usuário, bem como através de feedback visual.
[0201]Tipicamente, as ferramentas de ETL fazem uso de semântica imperativa. Ou seja, um usuário especifica os detalhes de cada operação e a ordem em que executá-las. Isso dá ao usuário controle total. Em contrapartida, um motor de base de dados SQL avalia consultas declarativas e é capaz de selecionar um plano de execução ideal com base nos dados solicitados pela consulta.
[0202]As implementações reveladas suportam tanto operações imperativas quanto operações declarativas, e o usuário pode selecionar entre essas duas opções de execução em vários níveis de granularidade. Por exemplo, o usuário pode desejar exercer controle sobre um fluxo no início enquanto aprende acerca de um novo conjunto de dados. Mais tarde, quando o usuário estiver confortável com os resultados, ele pode abdicar de todo ou parte do controle sobre o aplicativo de prep de dados a fim de otimizar a velocidade de execução. Em algumas implementações, o usuário pode especificar um comportamento padrão para cada fluxo (imperativo ou declarativo) e suprimir o comportamento padrão sobre nós individuais.
[0203]As implementações reveladas podem gravar dados em muitas bases de dados alvo diferentes, inclusive um TDE, Servidor SQL, Oracle, Redshift, arquivos planos, e assim por diante. Em alguns casos, um fluxo cria um novo conjunto de dados no sistema alvo. Em outros casos, o fluxo modifica um conjunto de dados existente acrescentando novas linhas, atualizando linhas existentes, introduzindo linhas ou excluindo linhas.
[0204]Podem ocorrer erros enquanto executa-se um fluxo. Os erros podem incluir problemas de sistema transientes, condições de erro potencialmente conhecidas nos dados, para o quê o usuário pode codificar uma ação corretiva e restrições implícitas que o autor não considerou. As implementações reveladas em geral lidam com essas condições de erro automaticamente quando possível. Por exemplo, se a mesma condição de erro foi encontrada no passado, algumas implementações reaplicam uma solução conhecida.
[0205]Embora um fluxo seja essencialmente uma transformação dos dados, as implementações permitem aos usuários anotar suas saídas com informações de modelagem declarativas para explicar como as saídas podem ser usadas, visualizadas, validades ou combinadas. Exemplos incluem: • Anotações que afetam como os valores são exibidos no Tableau, tais como coloração ou formatação padrão. • Anotações sobre um campo para indicar unidades ou linhagem. • Criação de cognomes e grupos. • Restrições funcionais, tais como chaves primárias e estranhas entre tabelas. • Restrições de domínio, tais como exigir que um campo seja positivo.
[0206]As implementações reveladas geralmente incluem esses componentes: • Uma área front-end com que os usuários interagem para visualizar, construir, editar e executar os fluxos. • Uma Linguagem de Fluxo Abstrata (AFL). Essa é uma linguagem interna que expressa toda a lógica em um fluxo, inclusive conexões com fontes, cálculos e outras transformações, operações de modelagem e o que é feito com as linhas que são o resultado do fluxo.
• Um motor de execução. O motor interpreta e executa programas AFL. Em algumas implementações, o motor roda localmente. As consultas podem ser repassadas a servidores remotos, mas os resultados e processamento adicional serão realizados usando recursos locais. Em um ambiente de servidor, o servidor oferece um ambiente de execução compartilhado e distribuído para os fluxos. Esse servidor pode agendar e executar fluxos de muitos usuários, e pode analisar e escalonar fluxos AFL automaticamente. • Um servidor de catálogo, que permite que os fluxos sejam publicados para outros.
[0207]Alguns aplicativos de visualização de dados são capazes de executar fluxos de prep de dados e podem utilizar TDEs ou outros conjuntos de dados criados para construir visualizações de dados.
[0208]As implementações reveladas também podem importar alguns fluxos de dados criados por outros aplicativos (por exemplo, criados em uma ferramenta de ETL).
[0209]As implementações permitem aos usuários: • Conectar-se a uma fonte de dados e lê-la, conforme ilustra a Figura 6B. • Construir um fluxo que combina operações suportadas (vide a Figura 6A) em ordens e combinações arbitrárias. • Visualizar uma amostra razoável de como os dados serão transformados em cada etapa de seu fluxo (por exemplo, no painel de perfis e painel de dados). • Forjar visualizações dos dados em cada etapa de um fluxo. • Executar um fluxo concluído localmente para produzir saídas, tais como uma saída TDE ou CSV (vide a Figura 6C). • Publicar um duto ou resultado TDE para um Servidor de Catálogo. • Importar uma TDS (Fonte de Dados do Tableau) criada na Prep de Dados como um fluxo explícito.
[0210]Com acesso a um Servidor configurado, o usuário pode: • Compartilhar um TDE com outros. • Compartilhar um duto (fluxo) de prep de dados com outros usuários com segurança apropriada. • Executar um duto de prep de dados em um ambiente de servidor para produzir um TDE automaticamente ou com base em um cronograma.
[0211]A saída de um nó pode ser dirigida a mais de um nó seguinte. Há dois casos básicos aqui. No primeiro caso, os fluxos bifurcam-se e não se reencontram novamente. Quando os fluxos não convergem, há múltiplas saídas do fluxo. Nesse caso, cada ramificação é efetivamente uma consulta distinta consiste em todos os predecessores na árvore. Quando possível, as implementações otimizam isso para que a parte compartilhada do fluxo não seja executada mais de uma vez.
[0212]No segundo caso, o fluxo converge. Semanticamente, isso significa que as linhas fluem através de ambos os caminhos. Mais uma vez, a execução do fluxo geralmente não executa duplicadamente os antecessores. Observe-se que um único fluxo pode apresentar ambos esses casos.
[0213]A interface do usuário: • permite aos usuários criar bifurcações em um fluxo. Quando adiciona-se um novo nó, o usuário pode especificar se o novo nó cria uma bifurcação no nó selecionado ou se é introduzido como um nó intermediário na sequência de operações existente. Por exemplo, se atualmente há um caminho do nó A para o nó B e o usuário opta por introduzir um novo nó em A, ele pode selecionar se cria um segundo caminho para o novo nó ou se introduz o novo nó entre A e B. • permite ao usuário executar saídas individuais de um fluxo em vez do fluxo inteiro.
[0214]Os usuários podem adicionar filtros a um fluxo de complexidade arbitrária. Por exemplo, o usuário pode clicar para adicionar um filtro em um ponto no fluxo e, em seguida, introduzir um cálculo que atua como um predicado. Em algumas implementações, as expressões do cálculo limitam-se a funções escalares. No entanto, algumas implementações permitem expressões mais complexas, tais como agregações, cálculos de tabela ou expressões de Nível de Detalhe.
[0215]O usuário pode editar qualquer filtro, ainda que ele tenha sido deduzido pelo sistema. Em particular, todos os filtros são representados por expressões.
[0216]O painel de perfis 314 e o painel de dados 315 oferecem formas fáceis de criar filtros. Por exemplo, algumas implementações permitem ao usuário selecionar um ou mais valores de dados para uma coluna no painel de dados, em seguida clicar com o botão direito e escolher "manter somente" ou "excluir". Isso insere um filtro no fluxo no nó atualmente selecionado. O sistema deduz uma expressão para implementar o filtro, e a expressão é salva. Se o usuário precisa modificar o filtro mais tarde, é fácil fazê-lo, não importa se o momento mais tarde é imediatamente ou um ano mais tarde.
[0217]No painel de perfis 314, o usuário pode selecionar um balde que especifica uma faixa de valores para um campo de dados. Por exemplo, com um campo categórico, a faixa é especificada tipicamente como uma lista de valores. Para um campo numérico, a faixa é especificada tipicamente como uma faixa contígua com um limite superior ou inferior. O usuário pode selecionar um balde e criar facilmente um filtro que seleciona (ou exclui) todas as linhas cujo valor para o campo enquadra-se na referida faixa.
[0218]Quando o usuário cria um filtro com base em vários valores em uma coluna ou vários baldes para uma coluna, a expressão do filtro utiliza OR. Ou seja, uma linha coincide com a expressão se ela satisfaz qualquer um dos valores ou faixas.
[0219]O usuário também pode criar um filtro com base em vários valores de dados em uma mesma linha no painel de dados. Nesse caso, a expressão do filtro utiliza AND. Ou seja, só linhas que coincidam com todos os valores especificados satisfazem a expressão. Isso também pode aplicar-se a todos os baldes no painel de perfis. Nesse caso, uma linha deve coincidir com cada uma das faixas selecionadas no balde.
[0220]Algumas implementações também permitem a criação de um filtro com base em uma pluralidade de valores de dados que incluem duas ou mais linhas e incluem duas ou mais colunas. Nesse caso, a expressão criada encontra-se em uma forma normal disjuntiva, cada disjunção correspondendo a uma das linhas com um valor de dados selecionado. Algumas implementações também aplicam a mesma técnica a seleções de faixa na janela de perfis.
[0221]Observe-se que, em cada um desses casos, o usuário seleciona visualmente os valores de dados ou baldes, em seguida com um gesto simples (por exemplo, clique com o botão direito mais uma seleção de menu) cria um filtro que limita as linhas somente aos valores selecionados ou exclui os valores selecionados. O usuário não precisa descobrir como escrever uma expressão na lógica Booleana correta.
[0222]Conforme ilustrado acima com referência às Figuras de 4A a 4V, o usuário pode criar junções. Dependendo de se uma execução declarativa é habilitada, a junção pode ser repassada a um servidor remoto para execução, conforme ilustra a Figura 9 abaixo.
[0223]Algumas implementações oferecem versões simplificadas ou condensadas de fluxos na forma de nós e anotações. Em algumas implementações, o usuário pode alternar entre uma visualização completa ou uma visualização condensada, ou alternar nós individuais para ocultar ou expor os detalhes dentro do nó. Por exemplo, um nó simples pode incluir diversas operações para executar a limpeza em certos arquivos da fonte. Depois de várias iterações de experimentação com as etapas de limpeza, elas funcionam bem, e o usuário geralmente não deseja ver os detalhes. Os detalhes continuam lá, mas o usuário é capaz de ocultar o aglomerado de informações e visualizar somente a versão condensada do nó.
[0224]Em algumas implementações, nós operacionais que não se espalham são dobrados conjuntamente em anotações no nó. Operações tais como junções e divisões quebrarão o fluxo com nós adicionais. Em algumas implementações, a disposição para a visualização condensada é automática. Em algumas implementações, o usuário pode reorganizar os nós na visualização condensada.
[0225]Tanto o painel de perfis quanto o painel de dados oferecem informações úteis acerca do conjunto de linhas associado ao nó atualmente selecionado no painel de fluxo. Por exemplo, o painel de perfis exibe as cardinalidades para vários valores de dados nos dados (por exemplo, um histograma exibindo quantas linhas cada valor de dados possui). As distribuições de valores são exibidas para vários campos de dados. Por causa da quantidade de dados exibida no painel de perfis, a recuperação dos dados é habitualmente executada assincronamente.
[0226]Em algumas implementações, o usuário pode clicar em um valor de dados no painel de perfis e visualizar escovações proporcionais de outros itens. Quando o usuário seleciona um valor de dados específico, a interface do usuário:
[0227]Indica a seleção. • Utiliza de escovação proporcional para indicar a correlação com outras colunas naquela tabela. • Filtra ou destaca o painel de dados associado para exibir somente linhas cujos valores coincidem com a seleção. (Isso filtra os dados exibidos no painel de dados e não cria um nó de filtro no painel de fluxo.)
• Quando há vários valores selecionados no painel de perfis, todos os valores selecionados são indicados e o painel de dados é filtrado de acordo (isto é, filtrado em linhas que coincidem com qualquer um dos valores).
[0228]Em algumas implementações, as linhas não são exibidas no painel de dados, salvo solicitado especificamente pelo usuário. Em algumas implementações, o painel de dados sempre é populado automaticamente, com o processo prosseguindo assincronamente. Algumas implementações aplicam diferentes padrões com base na cardinalidade das linhas para o nó selecionado. Por exemplo, algumas implementações exibem as linhas quando a cardinalidade está abaixo de um limite e ou não exibem as linhas ou prosseguem assincronamente se a cardinalidade estiver acima do limite. Algumas implementações especificam dois limites, designando um conjunto de linhas pequenas, grandes ou muito grandes. Em algumas implementações, a interface exibe as linhas para cardinalidades pequenas, avança para exibir linhas assincronamente para cardinalidades grandes e não exibe os resultados para cardinalidades muito grandes. Decerto, o painel de dados pode exibir apenas um pequeno número de linhas, que usualmente é selecionado por amostragem (por exemplo, cada nª linha). Em algumas implementações, o painel de dados implementa uma rolagem infinita para acomodar uma quantidade desconhecida de dados.
[0229]Os aplicativos de prep de dados revelados oferecem um modelo de documento que a Interface do Usuário lê, modifica e opera nativamente. Esse modelo descreve fluxos aos usuários, ao mesmo tempo em que oferece um formalismo para a UI. O modelo pode ser traduzido em modelos Tableau que utilizam AQL e o Avaliador Federado para rodar. O modelo também permite o armazenamento em cache confiável e a reutilização de resultados intermediários.
[0230]Conforme ilustra a Figura 7A, o modelo de dados inclui três submodelos, cada um dos quais descreve um fluxo em seus estágios de avaliação apropriados. O primeiro submodelo é um "Loom Doc" 702. (Algumas implementações referem-se ao aplicativo de prep de dados como "Loom".)
[0231]Um Loom doc 702 é o modelo que descreve o fluxo que um usuário observa e com o qual interage diretamente. Um Loom doc 702 contém todas as informações necessárias para executar todas as operações de ETL e verificação de tipo. Tipicamente, o Loom doc 702 não inclui informações que são necessárias puramente para renderizar ou editar o fluxo. Um Loom doc 702 é construído como um fluxo. Cada operação possui: • Um conjunto de propriedades que descrevem como executarão suas operações. • Zero ou mais entradas que descrevem sobre quais dados executar as operações. • Zero ou mais saídas que descrevem os dados que resultam dessas operações.
[0232]Há quadro tipos de operações principais: operações de entrada, operações de transformação, operações de saída e operações de recipiente.
[0233]As operações de entrada executam a parte "Extração" do ETL. Elas vinculam o fluxo a uma fonte de dados e são configuradas para extrair dados dessa fonte e expô-los ao fluxo. As operações de entrada incluem carregar um arquivo CSV ou conectar-se a uma base de dados SQL. Um nó para uma operação de entrada tipicamente possui zero entradas e ao menos uma saída.
[0234]As operações de transformação executam a parte "Transformação" do ETL. Elas oferecem operações "funcionais" sobre fluxos de dados e transformam- nos. Exemplos de operações de transformação incluem "Criar cálculo como '[NomedoHospital]-[Ano]'", "Filtrar linhas que têm Idhospital='VisãodoPorto'", e assim por diante. Os nós de transformação têm ao menos uma entrada e ao menos uma saída.
[0235]As operações de saída cumprem a parte "Carregamento" do ETL. Elas operam com os efeitos colaterais de realmente atualizar as fontes de dados a jusante com a transmissão de dados que chega. Esses nós têm uma entrada e nenhuma saída (não há "saídas" para nós subsequentes no fluxo).
[0236]As operações de recipiente agrupam outras operações em grupos lógicos. Essas são usadas para ajudar a facilitar a documentação dos fluxos. As operações de recipiente são expostas ao usuário como "Nós" no painel de fluxo. Cada nó recipiente contém outros elementos de fluxo (por exemplo, uma sequência de nós regulares), bem como campos para documentação. Os nós recipientes podem ter qualquer número de entradas e qualquer número de saídas.
[0237]Uma transmissão de dados representa as linhas de dados reais que atravessam o fluxo de um nó a outro. Logicamente, essas podem ser visualizadas na forma de linhas, mas, operacionalmente, uma transmissão de dados pode ser implementada de qualquer número de maneiras. Por exemplo, alguns fluxos são simplesmente compilados em AQL (Linguagem de Consulta Analítica).
[0238]As operações extensíveis são operações que o aplicativo de prep de dados não sabe como avaliar diretamente, logo as chamada de processo ou código de terceiros. Essas são operações que não rodam como parte do avaliador federado.
[0239]O modelo lógico 704 é um modelo que contém todas as entidades, campos, relações e restrições. Ele é construído rodando sobre o fluxo e define o modelo que é construído em qualquer parte no fluxo. Os campos no modelo lógico são coluna nos resultados. As entidades no modelo lógico representam tabelas nos resultados, embora algumas entidades sejam compostas por outras entidades. Por exemplo, uma junção possui uma entidade que resulta de outras entidades. As restrições no modelo lógico representam restrições adicionais, tais como filtros. As relações no modelo lógico representam as relações entre entidades, provendo informações suficientes para combiná-las.
[0240]O modelo físico 706 é o terceiro submodelo. O modelo físico inclui metadados para armazenamento em cache, incluindo informações que identificam se um fluxo precisa rodar novamente, além de como consultar diretamente a base de dados de resultados para um fluxo. Os metadados incluem: • Um hash do modelo lógico nesse ponto. • Um carimbo de hora/tempo para cada fonte de dados raiz, e quando foi consultada pela última vez. • Um caminho ou URI descrevendo onde os dados dos resultados estão.
[0241]Esses dados são usados para otimizar fluxos, bem como para permitir a navegação mais rápida dos resultados.
[0242]O modelo físico inclui uma referência ao modelo lógico usada para criar esse modelo físico (por exemplo, um apontador para um arquivo ou armazém de dados). O modelo físico 706 também inclui uma Fonte de Dados do Tableau (TDS), que identifica a fonte de dados que será usada para avaliar o modelo. Tipicamente, isso é gerado a partir do modelo lógico 704
[0243]O modelo físico também inclui uma consulta AQL (Linguagem de Consulta Analítica) que será usada para extrair dados da fonte de dados especificada.
[0244]Conforme ilustra a Figura 7A, o loom doc 702 é complicado (722) para formar o modelo lógico 704, e o modelo lógico 704 é avaliado (724) para formar o modelo físico.
[0245]A Figura 7B ilustra um formato de arquivo 710 que é usado por algumas implementações. O formato de arquivo 710 é usado tanto na execução local quanto na execução remota. Observe-se que o formato de arquivo contém tanto dados quanto fluxos. Em alguns casos, um fluxo pode criar dados ao fazer uma cópia. Nesses casos, os dados tornam-se parte do fluxo. O formato de arquivo contém um estado de UI separado do fluxo subjacente. Parte da tela é salva com o aplicativo. Outras partes da disposição são específicas do usuário e são armazenadas fora do aplicativo. O formato de arquivo pode ser versionado.
[0246]O formato de arquivo possui um formato multidocumento. Em algumas implementações, o formato de arquivo possui três partes principais, conforme ilustra a Figura 7B. Em algumas implementações, o formato de arquivo 710 inclui info de edição 712. Essa seção é responsável por fazer com que a experiência de edição continue através dos dispositivos e sessões de edição. Essa seção armazena quaisquer dados que não sejam necessários para avaliar um fluxo, mas que são necessários para reconstruir a UI para o usuário. As info de edição 712 incluem Desfazer Histórico, que contém um buffer de anulação persistente que permite ao usuário desfazer operações após fechar e reabrir uma sessão de edição. As info de edição também incluem um Estado da UI, tal como quais painéis são visíveis, coordenadas x/y dos nós de fluxo, que não refletem em como um fluxo é executado. Quando um usuário reabre a UI, ele observa o que havia nela antes, o que facilita que ele retome o trabalho.
[0247]O formato de arquivo 710 inclui um Loom Doc 702, conforme descrito acima com referência à Figura 7A. Essa é a única seção do formato de arquivo que é necessária. Essa seção contém o fluxo.
[0248]O formato de arquivo 710 também inclui dados locais 714, que contêm quaisquer tabelas ou dados locais necessários para executar um fluxo. Esses dados podem ser criados através de interações do usuário, tais como colar uma tabela HTML no aplicativo de prep de dados, ou quando um fluxo utiliza um CSV local que precisa ser transferido a um servidor para avaliação.
[0249]O Subsistema de Avaliação é ilustrado na Figura 7C. O subsistema de avaliação oferece uma maneira confiável de avaliar um fluxo. O subsistema de avaliação também oferece uma maneira fácil de operar sobre os resultados de uma execução anterior ou de dispor as operações em camadas no topo de uma operação de fluxo. Além disso, o subsistema de avaliação oferece uma maneira natural de reutilizar os resultados de uma parte do fluxo ao executar partes futuras do fluxo. O subsistema de avaliação também oferece uma maneira rápida de execução em comparação a resultados armazenados em cache.
[0250]Há dois contextos básicos para avaliar um fluxo, conforme ilustra a Figura 7C. Ao executar (740) um fluxo, o processo avalia o fluxo e despeja os resultados nos nós de saída. Se rodando em modo de depuração, o processo grava os resultados em bases de dados temporárias que podem ser usadas para navegação, análise e execução de fluxos parciais mais rapidamente.
[0251]Na navegação e análise (730), o usuário investiga um conjunto de dados. Isso pode incluir examinar distribuições de dados, procurar dados sujos, e assim por diante. Nesses cenários, o avaliador geralmente evita executar o fluxo inteiro e, em vez disso, executa consultas mais rápidas diretamente em comparação às bases de dados temporárias criadas pela execução dos fluxos anteriores.
[0252]Esses processos tiram proveito de bons metadados em torno do armazenamento em cache a fim de garantir que decisões de cache inteligentes sejam viáveis.
[0253]Algumas implementações incluem um subsistema Async, conforme ilustra a Figura 7D. O subsistema async oferece comportamento sem bloqueio ao usuário Se o usuário estiver realizando muitas operações que não exigem a recuperação das linhas, o usuário não é impedido de obtê-las. O subsistema async oferece resultados incrementais. Frequentemente, o usuário não necessitará do conjunto de dados completo para começar a validar ou tentar entender os resultados. Nesses casos, o subsistema async oferece os melhores resultados quando eles chegam. O subsistema async também oferece uma operação "cancelar" confiável para consultas em andamento.
[0254]Em algumas implementações, o modelo async inclui quatro componentes principais: • Uma camada de navegador. Essa camada pega um UUID e uma versão atualizada das tarefas async a que dá início. Ela então utiliza o UUID para obter atualizações. • Um REST API. Essa camada dá início a tarefas em um pool de threads. As tarefas no pool de threads atualizam o Serviço de Status à medida que obtêm atualizações. Quando a camada de navegador deseja saber se há atualizações, ela invoca um procedimento REST API para obter os últimos status. • Um AqlAPI. Essa camada é invocada como se fosse uma chamada síncrona que teve retornos. A chamada só terminará quando o pedido subjacente terminar. No entanto, os retornos permitem atualizações ao Serviço de Status com linhas já processadas. Isso permite prover progresso incremental ao usuário. • Um avaliador federado. O AqlApi invoca o avaliador federado, que oferece outra camada de assincronia, porque roda como um novo processo.
[0255]A implementação de operações de cancelamento depende de se o cancelamento ocorre. Na camada de navegador, é fácil enviar um pedido de cancelamento, e então cessar a sondagem por resultados. No REST API, é fácil enviar um evento de cancelamento a um thread que está em execução.
[0256]Algumas implementações tornam seguro e fácil "refatorar" um fluxo depois que ele já foi criado. Atualmente, as ferramentas de ETL permitem que as pessoas criem fluxos que inicialmente parecem um tanto simples, mas que tornam- se impossíveis de mudar à medida que crescem. Isso porque é difícil para as pessoas entender como suas mudanças afetarão o fluxo e porque é difícil quebrar blocos de comportamento em pedaços que tratam dos requisitos comerciais. Muito disso é causado pela interface do usuário, mas a linguagem subjacente precisa prover as informações de que a UI necessita.
[0257]As implementações reveladas permitem aos usuários criar fluxos que podem ser facilmente refatorados. O que isso significa é que os usuários são capazes de pegar operações ou nós e facilmente: • Mover as operações, reordenando-as logicamente. As implementações provêm feedback direto sobre se essas operações criam erros. Por exemplo, suponha-se que um usuário possui um fluxo com ADICIONAR COLUNA > FILTRO. O usuário pode arrastar o nó FILTRO para antes do nó ADICIONAR COLUNA, a não ser que o FILTRO utilize a coluna que foi adicionada. Se o FILTRO utilizar a nova coluna, a interface imediatamente acusa um erro, relatando o problema ao usuário. • Comprimir um número de operações e nós em um novo nó (que pode ser reutilizado). Esse novo nó terá um "tipo" que aceita e um "tipo" que retorna. Por exemplo, suponha-se que um usuário possui um fragmento de um fluxo que inclui JUNTAR TABELAS > ALTERAR COLUNA > ALTERAR COLUNA > ALTERAR COLUNA. As implementações permitem ao usuário combinar essas quatro etapas em um nó e atribuir ao nó um nome significativo, tal como "CÓDIGOS DE CONSERTO". O novo nó pega duas tabelas como entradas e retorna uma tabela. Os tipos das tabelas de entrada incluiriam as colunas sobre as quais foram juntadas, e quaisquer colunas que acabaram sendo usadas em ALTERAR COLUNAS. O tipo da tabela de saída é o tipo que resulta das operações. • Extrair as operações de um nó. Isso se dá quando o usuário pode reorganizar as operações que foram organicamente adicionadas a um nó, durante operações imediatas. Por exemplo, suponha-se que o usuário possui um nó gigante que possui 20 operações nele e deseja extrair as 10 operações relacionadas a corrigir códigos de hospital para um nó próprio. O usuário pode selecionar esses nós e extraí-los. Se houver outras operações no nó que dependem das operações que estão sendo removidas, o sistema exibe o erro e sugere a solução de criar um novo nó após o nó CorrigirCódigosdeHospital. • Embutir operações em um nó existente. Após alguma arrumação por parte do usuário, pode haver algum trabalho que pertence a outra parte do fluxo. Por exemplo, à medida que uma usuária arruma os Códigos de Seguro, ela descobre alguns problemas com os códigos de hospital e arruma-os. Em seguida, ela deseja mover a arrumação dos códigos de hospital para o nó ConsertarCódigosdeHospital. Isso é consumado usando uma fácil operação de arrastar/soltar. Se a usuária tenta soltar a operação em uma localização no fluxo antes de uma operação de que depende, a interface fornece feedback visual imediato de que a localização de soltura proposta não funcionará. • Mudar um tipo e descobrir se ele quebra partes do fluxo imediatamente. Um usuário pode utilizar um fluxo e então decidir mudar o tipo de uma das colunas. As implementações informam imediatamente o usuário acerca de quaisquer problemas mesmo antes de executar o fluxo.
[0258]Em algumas implementações, quando um usuário está refatorando um fluxo, o sistema ajuda a identificar alvos de soltura. Por exemplo, se o usuário seleciona um nó e começa a arrastá-lo dentro do painel de fluxo, algumas implementações exibem localizações (por exemplo, destacando) aonde o nó pode ser movido.
[0259]Os aplicativos de prep de dados revelados utilizam uma linguagem que possui três aspectos: • Uma linguagem de expressão. É como os usuários definem cálculos. • Uma linguagem de fluxo de dados. É como os usuários definem as entradas, transformações, relações e saídas de um fluxo. Essas operações mudam diretamente o modelo de dados. Os tipos nessa linguagem são entidades (tabelas) e relações em vez de meras colunas individuais. Os usuários não veem essa linguagem diretamente, mas usam-na indiretamente ao criar nós e operações na UI. Exemplos incluem juntar tabelas e remover colunas. • Uma linguagem de fluxo de controle. Essas são operações que podem acontecer em torno do fluxo de dados, mas que não constituem realmente um fluxo de dados. Exemplos incluem copiar um zip de uma pasta compartilhada e então descompactá-lo, pegar um TDE gravado e então copiá-lo para uma pasta compartilhada, ou executar um fluxo de dados sobre uma lista arbitrária de fontes de dados.
[0260]Essas linguagens são distintas, mas são dispostas em camadas umas sobre as outras. A linguagem de expressão é usada pela linguagem de fluxo, que, por sua vez, pode ser usada pela linguagem de fluxo de controle.
[0261]A linguagem descreve um fluxo de operações que corre logicamente da esquerda para a direita, conforme ilustra a Figura 8A. No entanto, por causa da maneira como o fluxo é avaliado, a implementação real pode reorganizar as operações para um melhor desempenho. Por exemplo, mover filtros para bases de dados remotas à medida que os dados são extraídos pode aprimorar em grande medida a velocidade de execução geral. A linguagem de fluxo de dados é a linguagem que a maioria das pessoas associa ao aplicativo de prep de dados porque descreve o fluxo e a relação que afeta diretamente o ETL. Essa parte da linguagem possui dois componentes principais: modelos e nós/operações. Isso difere das ferramentas de ETL padrão. Em vez de um fluxo operando diretamente sobre os dados (por exemplo, fluindo linhas reais de uma operação "filtro" para uma operação "adicionar campo"), os fluxos revelados definem um modelo lógico que especifica o que deseja criar e o modelo físico definindo como deseja materializar o modelo lógico. Essa abstração oferece mais liberdade de movimento em termos de otimização.
[0262]Os modelos são os nomes básicos.
Eles descrevem os esquemas e as relações dos dados sobre os quais operam.
Como mencionado acima, existe um modelo lógico e um modelo físico separado.
Um Modelo Lógico provém o "tipo" básico para um fluxo em dado ponto.
Ele descreve os campos, entidades e relações que descrevem os dados sendo transformados.
Esse modelo inclui coisas como conjuntos e grupos.
O modelo lógico especifica o que é desejado, mas não qualquer materialização.
As partes núcleo desse modelo são: • Campos: Há os campos reais que transformar-se-ão em campos de dados na saída (ou cálculos auxiliares que o fazem). Cada campo associa-se a uma entidade e uma expressão.
Os campos não necessariamente precisam ser todos visíveis.
Há 3 tipos de campos: campos físicos, campos computados e campos temporários.
Os campos físicos materializam-se no conjunto de dados resultante.
Esses podem ser ou campos ou cálculos apropriados.
Os campos computados são gravados no TDS resultante como campos computados, logo eles jamais materializar-se-ão.
Os campos temporários são gravados para melhor fatorar os cálculos para um campo físico.
Eles não são gravados de maneira alguma.
Se um campo temporário é aludido por um campo computado, a linguagem emitirá um aviso e tratará esse campo como um campo computado. • Entidades: Esses são os objetos que descrevem o espaço para nome para o modelo lógico.
As entidades são criadas ou pelo esquema de uma tabela que chega, ou podem ser compostos por uma coletânea de entidades que são associadas em conjunto por relações. • Relações: Esses são objetos que descrevem como diferentes entidades relacionam-se umas às outras.
Elas também podem ser usadas para combinar múltiplas Entidades em uma nova entidade composta.
• Restrições: Essas descrevem restrições adicionadas a uma entidade. As restrições incluem filtros que realmente limitam os resultados para uma entidade. Algumas restrições são impostas.
[0263]As restrições impostas são garantidas de uma fonte a montante, tal como uma restrição exclusiva, ou restrição não nula. Algumas restrições são reafirmadas. Essas são restrições que acredita-se serem verdadeiras. Sempre que descobre-se que os dados violam essa restrição, o usuário é notificado de alguma maneira.
[0264]Um fluxo pode incluir uma ou mais bifurcações no modelo lógico. A bifurcação de um fluxo utiliza o mesmo Modelo Lógico para cada bifurcação. No entanto, há novas entidades sob as coberturas para cada lado da bifurcação. Essas entidades basicamente atravessam até as entidades originais, a não ser que uma coluna seja projetada ou removida sobre elas.
[0265]Um motivo para criar novas entidades consiste em acompanhar quaisquer relações entre entidades. Essas relações continuarão sendo válidas quando nenhum dos campos mudar. No entanto, se um campo é modificado, ele será um novo campo na nova entidade, logo será sabido que a relação não funciona mais.
[0266]Algumas implementações permitem a fixação de um nó ou operação. Os fluxos descrevem a ordenação lógica para um conjunto de operações, mas o sistema é livre para otimizar o processamento ao tornar a ordenação física diferente. No entanto, o usuário pode desejar garantir que as ordenações lógica e física sejam exatamente iguais. Nesses casos, o usuário pode "fixar" um nó. Quando um nó é fixado, o sistema garante que as operações antes da fixação aconteçam fisicamente antes das operações após a fixação. Em alguns casos, isso resultará em alguma forma de materialização. No entanto, o sistema transmite através disso sempre que possível.
[0267]O modelo físico descreve uma materialização do modelo lógico em um ponto específico. Cada modelo físico possui uma referência de volta ao modelo lógico que foi usado para gerá-lo. Os modelos físicos são importantes para o armazenamento em cache, execuções de fluxo incrementais e operações de carregamento. Um modelo físico inclui uma referência a qualquer arquivo que contenha resultados de um fluxo, que é um hash exclusivo que descreve o modelo lógico até esse ponto. O modelo físico também especifica a TDS (Fonte de Dados de Quadro) e a AQL (Linguagem de Consulta Analítica) gerada para uma execução.
[0268]Nós e Operações são os verbos básicos. Os nós no modelo incluem operações que definem como os dados são moldados, calculados e filtrados. A fim de mantê-lo consistente com a linguagem da UI, o termo "operações" refere-se a um dos "nós" em um fluxo que faz algo. Os nós são usados para referir-se a recipientes que contêm operações e mapeiam o que um usuário observa no painel de fluxo na UI. Cada nó/operação especializada possui propriedades associadas a ela que descrevem como ela operará.
[0269]Há quatro tipos básicos de nós: nós de entrada, operações de transformação, operações de saída e operações de recipiente. As operações de entrada criam um modelo lógico a partir de alguma fonte externa. Exemplos incluem uma operação que importa um CSV. As operações de entrada representam o E em ETL (Extração). As operações de transformação transformam um modelo lógico em um novo modelo lógico. Uma operação de transformação pega um modelo lógico e retorna um novo modelo lógico. Os nós de transformação representam o T em ETL (Transformação). Um exemplo é uma operação de projeto que adiciona uma coluna a um modelo lógico existente. As operações de saída pegam um modelo lógico e materializam-no em algum outro armazém de dados. Por exemplo, uma operação que pega um modelo lógico e materializa seus resultados em um TDE. Essas operações representam o L em ETL (Carregamento). Os nós de recipiente são a abstração de base em torno de como a composição se dá através dos fluxos, e também oferecem uma abstração para o que deve ser exibido à medida que os nós são exibidos na UI.
[0270]Conforme ilustra a Figura 8B, o sistema de tipos consiste em três conceitos principais: • As operações são ações atômicas, cada uma com entradas e saídas, além de um conjunto de campos requeridos. • Campos requeridos são campos de que uma operação necessita. Os campos requeridos podem ser determinados avaliando-se a operação com um ambiente de tipo vazio, em seguida coletando quaisquer dos campos que sejam "pressupostos". • Ambientes de tipo são os constructos que determinam como procurar os tipos para dado ponto em um fluxo. Cada "borda" no gráfico de fluxo representa um ambiente de tipo.
[0271]A verificação de tipo é realizada em duas fases. Na fase de criação dos ambientes de tipo, o sistema percorre o fluxo na direção do fluxo. O sistema descobre de que tipos cada nó necessita, e quais ambientes de tipo eles emitem. Se o fluxo for abstrato (por exemplo, ele não conecta-se realmente a nenhum nó de entrada), o ambiente de tipo vazio é usado. O refinamento de tipo é a segunda fase. Nessa fase, o sistema pega os ambientes de tipo da primeira fase e percorre-os "regressivamente" para ver o afunalinamento de tipo que ocorreu na criação do ambiente de tipo criou conflitos de tipo. Nessa fase, o sistema também cria um conjunto de campos requeridos para o subfluxo inteiro.
[0272]Cada operação possui um ambiente de tipo associado a ela. Esse ambiente contém todos os campos que são acessíveis e seus tipos. Conforme ilustra a Figura 8C, um ambiente de tipo possui cinco propriedades.
[0273]Um ambiente pode ser ou "Aberto" ou "Fechado". Quando um ambiente é Aberto, ele pressupõe que pode haver campos sobre os quais não sabe. Nesse caso, qualquer campo que não seja conhecido será tido como de qualquer tipo. Esses campos serão adicionados ao campo TiposPressupostos. Quando um ambiente é Fechado, ele pressupõe que conhece todos os campos, logo qualquer campo que não seja conhecido será uma falha.
[0274]Todos os tipos conhecidos estão no membro Tipos. Esse é um mapeamento de nomes de campo para seus tipos. O tipo pode ser ou outro ambiente de tipo ou pode ser um Campo. Um campo é o tipo mais básico.
[0275]Cada campo é composto por duas partes. basicTypes é um conjunto de tipos que descreve o possível conjunto de tipos para o campo. Se esse conjunto tiver só um elemento, então sabemos qual tipo ele possui. Se o conjunto for vazio, então houve um erro de tipo. Se o conjunto tiver mais de um elemento, então há vários tipos possíveis. O sistema pode resolver e fazer outro estreitamento de tipo se necessário. derivedFrom é uma referência aos campos que participaram da derivação desse.
[0276]Cada campo em um escopo possui um conjunto de tipos em potencial. Cada tipo pode ser qualquer combinação de Booleano, Cadeia, Número Inteiro, Decimal, Data, HoraData, Duplo, Geometria e Duração. Também existe um tipo "Qualquer", que é uma abreviação para um tipo que pode ser qualquer coisa.
[0277]No caso de Ambientes de Tipo abertos, pode haver casos de campos que são conhecidos por não existir. Por exemplo, após uma operação "removerCampo", o sistema pode não conhecer todos os campos no Ambiente de Tipo (porque ele é aberto), mas o sistema não sabe que o campo recém-removido não está lá. A propriedade de Ambiente de tipo "NãoPresente" é usada para identificar esses campos.
[0278]A propriedade TiposPressupostos é uma lista dos tipos que foram adicionados porque foram aludidos em vez de definidos. Por exemplo, se houver uma expressão [A] + [B] que é avaliada em um ambiente do tipo aberto, o sistema pressupõe que havia dois campos: A e B. A propriedade TiposPressupostos permite que o sistema acompanhe o que foi adicionado dessa maneira. Esses campos podem ser preparados para novo joeiramento de tipo bem como para ser capazes de determinar campos requeridos para um recipiente.
[0279]A propriedade de ambiente de tipo "Anterior" é uma referência ao ambiente de tipo do qual esse deriva. Ela é usada para os estágios de refinamento de tipo, durante a transversal regressiva através do fluxo buscando por inconsistências de tipo.
[0280]Os ambientes de tipo também podem ser compostos. Isso acontece em operações que aceitam múltiplas entradas. Quando um ambiente de tipo é fundido, ele mapeará cada ambiente de tipo a um valor em sua coletânea de tipos. Uma nova resolução de tipo é então delegada aos ambientes de tipo individuais. Ficará então a cargo do operador transformar esse ambiente de tipo no ambiente de tipo de saída, geralmente por "achatamento" do ambiente de tipo de alguma maneira para criar um novo ambiente de tipo que só possua campos como tipos.
[0281]Isso é usado por operações de Junção e União a fim de usar precisamente todos os campos dos diferentes ambientes em suas próprias expressões, e tendo uma forma de mapear o ambiente para um ambiente de tipo de saída.
[0282]O ambiente de tipo criado por um nó de entrada é o esquema retornado pela fonte de dados que ele está lendo. Para uma base de dados SQL, esse será o esquema da tabela, consulta, procedimento armazenado ou visualização que está sendo extraída. Para um arquivo CSV, esse será um esquema que é extraído do arquivo, com quaisquer tipos que o usuário tenha associado às colunas. Cada coluna e seu tipo é transformada em um mapeamento campo/tipo. Além disso, o ambiente de tipo é marcado como fechado.
[0283]O ambiente de tipo para um nó de transformação é o ambiente para sua entrada. Se ele possui múltiplas entradas, ele será fundido para criar o ambiente de tipo para a operação. A saída é um ambiente de tipo simples baseado no operador. A tabela nas Figuras de 8J-1 a 8J-3 lista muitas das operações.
[0284]Um nó recipiente pode ter várias entradas, de tal modo que seu ambiente de tipo seja um ambiente de tipo composto que roteia ambientes de tipo infantil apropriados aos nós de saída apropriados. Quando um recipiente é extraído para ser reutilizado, ele resolve com ambientes de tipo vazio para cada entrada determinar suas dependências.
[0285]Em algumas implementações, um nó recipiente é o único tipo de nó que é capaz de ter mais de uma saída. Nesse caso, ele pode ter vários ambientes de tipo de saída. Isso não deve ser confundido com ramificar a saída, o que pode acontecer com cada nó. No entanto, no caso de ramificar uma saída, cada uma das bordas de saída possui o mesmo ambiente de tipo.
[0286]Há alguns casos onde erros de tipo são sinalizados quando o sistema descobre requisitos conflitantes para um campo. Campos não resolvidos não são tratados como erros nesse estágio porque esse estágio pode ocorrer sobre fluxos com entradas ilimitadas. No entanto, se um usuário tentasse executar um fluxo, as variáveis não resolvidas seriam um problema que seria reportado.
[0287]Muitas das entradas têm definições de tipos específicas. Por exemplo, definições específicas incluem o uso de CHAR(10) em vez de VARCHAR(2000), qual cotejo um campo utiliza, ou qual escala e precisão um tipo Decimal possui. Algumas implementações não acompanham esses como parte do sistema de tipos, mas acompanham-nos como parte de informações de tempo de execução.
[0288]A UI e o nível médio são capazes de obter nos tipos de tempo de execução. Essas informações podem fluir através do retorno regular, bem como ser embutidas nos tipos para tempdb (por exemplo, caso o sistema seja populado a partir de uma execução armazenada em cache). A UI exibe aos usuários os tipos conhecidos mais específicos, mas não faz a verificação de tipo com base neles. Isso permite a criação de NósdeSaída que utilizam tipos mais específicos e, ao mesmo tempo, permite que o restante do sistema utilize os tipos mais simplificados.
[0289]A Figura 8D ilustra uma verificação de tipo simples baseada em um fluxo com todos os tipos de dados conhecidos. A Figura 8E ilustra uma falha de tipo simples com tipos totalmente conhecidos. A Figura 8F ilustra cálculos de ambiente de tipo simples para um fluxo parcial. A Figura 8G ilustra tipos de um nó recipiente empacotado. A Figura 8H ilustra um cenário de ambiente de tipo mais complexo. A Figura 8I ilustra a reutilização de um cenário de ambiente de tipo mais complexo.
[0290]Algumas implementações deduzem tipos de dados e utilizam os tipos de dados deduzidos para otimizar ou validar um fluxo de dados. Isso é particularmente útil para fontes de dados baseadas em texto, tais como arquivos XLS ou CSV. Com base em como um elemento de dado é usado mais tarde em um fluxo, um tipo de dados por vezes pode ser deduzido, e o tipo de dados deduzido pode ser usado mais cedo no fluxo. Em algumas implementações, um elemento de dados recebido como uma cadeia de texto pode ser lançado como o tipo de dados apropriado imediatamente após a recuperação a partir da fonte de dados. Em alguns casos, a dedução dos tipos de dados é recursiva. Ou seja, ao deduzir o tipo de dados para um elemento de dados, o sistema é capaz de deduzir os tipos de dados de um ou mais elementos de dados adicionais. Em alguns casos, uma dedução do tipo de dados é capaz de descartar um ou mais tipos de dados sem determinar um tipo de dados exato (por exemplo, determinar que um elemento de dados é numérico, mas incapaz de determinar se ele é um número inteiro ou um número de ponto flutuante).
[0291]A maioria dos erros de tipo são encontrados no estágio de verificação de tipo. Isso vem logo após calcular os ambientes de tipo iniciais, e refinar os escopos com base no que se sabe acerca de cada tipo.
[0292]Essa fase começa com todos os ambientes de tipo terminais. Para cada ambiente de tipo, o sistema volta para seus ambientes anteriores. O processo volta até chegar a um ambiente fechado ou a um ambiente sem um ambiente anterior. O processo então verifica os tipos em cada ambiente para determinar se quaisquer campos diferem quanto ao tipo. Se sim, e a interseção deles for nula, o processo acusa um erro de tipo. Se qualquer um dos campos diferir quanto ao tipo e a interseção não for nula, o processo define o tipo como a interseção e quaisquer nós afetados que têm seus ambientes de tipo são recalculados. Além disso, quaisquer tipos que são "pressupostos" são adicionados ao ambiente de tipo anterior e os ambientes de tipo são recalculados.
[0293]Há algumas sutilezas que são acompanhadas. Em primeiro lugar, os próprios nomes de campo não são necessariamente exclusivos, porque um usuário pode sobrescrever um campo com algo que possui um tipo diferente. Como resultado, o processo utiliza o apontador de um tipo de volta para os tipos usados para gerá-lo, evitando assim ser ludibriado por coisas alheias que resolvem no mesmo nome em diferentes partes no gráfico. Por exemplo, suponha-se que um campo A possui um tipo [int, decimal], mas então há um nó que cria um projeto que transforma A em uma cadeia. Seria um erro voltar para as versões anteriores de A e dizer que o tipo não funciona. Em vez disso, o rastreamento retrocedente nesse ponto não regressará A além da operação adicionarCampo.
[0294]A verificação de tipo restringe uma variável por vez. Nas etapas acima, a verificação de tipo é aplicada a somente uma variável, antes de recomputar as variáveis conhecidas. Isso para que haja segurança em um caso em que há uma função sobrecarregada com várias assinaturas, tais como Função 1 (cadeia, int) e Função 1 (int, string). Suponha-se que essa é chamada de Função1([A], [B]). O processo determina que os tipos são A: [String, int] e B: [String, int], porém seria inválido para os tipos resolverem em A: [String ] e B: [String] porque, se A é uma Cadeia, B precisa ser int. Algumas implementações lidam com esse tipo de dependência ao reexecutar o cálculo de ambiente de tipo após cada estreitamento de tipo.
[0295]Algumas implementações otimizam qual trabalho fazer ao somente fazer o trabalho sobre nós que realmente têm um campo requerido que inclui a variável estreitada. Há uma pequena sutileza aqui, já que estreitar A pode acabar fazendo com que B também seja estreitado. Tome-se o exemplo da Função 1 acima. Nesses casos, o sistema precisa saber quando B mudou e também verificar seu estreitamento.
[0296]Ao observar como os operadores agirão, é melhor pensar neles em termos de quatro propriedades principais, identificadas aqui por "É aberto", "MultiEntrada", "Tipo de Entrada" e "Tipo Resultante".
[0297]Uma operação é designada como Aberta quando flui através das colunas. Por exemplo, "filtro" é uma operação aberta porque qualquer coluna que esteja na entrada também estará na saída. Agrupar por não é Aberto, porque qualquer coluna que não seja agregada ou agrupada não estará no tipo resultante.
[0298]A propriedade "MultiEntrada" especifica se essa operação pega múltiplas entidades de entrada. Por exemplo, uma junção é multientrada porque ela pega duas entidades e torna-as uma. Uma junção é outra operação que é multientrada.
[0299]A propriedade "Tipo de Entrada" especifica o tipo que o nó requer. Para uma operação multientrada, esse é um tipo composto onde cada entrada contém seu próprio tipo.
[0300]A propriedade "Tipo Resultante" especifica o tipo de saída que resulta dessa operação.
[0301]As tabelas nas Figuras 8J-1, 8J-2 e 8J-3 indicam as propriedades para muitos dos operadores mais comumente usados.
[0302]Em muitos casos, um fluxo é criado com o tempo à medida que as necessidades mudam. Quando um fluxo cresce por evolução orgânica, ele pode tornar-se grande e complexo. Por vezes, um usuário precisa modificar um fluxo, ou tratar de uma necessidade em transformação, ou reorganizar um fluxo para que ele seja mais fácil de entender. Essa refatoração de um fluxo é difícil ou impossível em muitas ferramentas de ETL.
[0303]As implementações aqui não só permitem a refatoração, mas ajudam o usuário a fazê-la. Em um nível técnico, o sistema pode pegar o ExigirCampos para qualquer nó (ou sequência de nós) e, em seguida, iluminar os alvos de soltura em qualquer ponto que possua um ambiente de tipo que possa acomodá-lo.
[0304]Outro cenário envolve reutilizar nós existentes em um fluxo. Por exemplo, suponha-se que o usuário deseja pegar uma cadeia de operações e criar um nó personalizado. O nó personalizado opera para "normalizar códigos de seguro". O usuário pode criar um nó recipiente com um número de operações nele. O sistema pode então calcular os campos requeridos para ele O usuário pode salvar o nó para uso futuro, ou usando um comando salvar ou arrastando o nó recipiente para o painel esquerdo 312. Agora, quando um pessoa seleciona o nó na palheta no painel esquerdo, o sistema ilumina alvos de soltura no fluxo, e o usuário pode soltar o nó sobre um dos alvos de soltura (por exemplo, assim como o exemplo de refatoração acima).
[0305]O ETL pode ficar confuso, logo as implementações aqui permitem várias extensões de sistema. As extensões incluem • Operações de fluxo definidas pelo usuário. Os usuários podem estender um fluxo de dados com operações de Entrada, Saída e Transformação. Essas operações podem utilizar lógica ou analítica personalizada para modificar os conteúdos de uma linha. • Scripts de fluxo de controle. Os usuários podem construir scripts que realizam operações de fluxo não relacionadas a dados, tais como baixar um arquivo de uma pasta compartilhada, descompactar um arquivo, executar um fluxo para cada arquivo em um diretório, e assim por diante. • Scripting de linhas de comando. Os usuários podem executar seus fluxos a partir de uma linha de comando.
[0306]As implementações aqui assumem uma abordagem que é agnóstica a linguagem em termos de como as pessoas utilizam a extensibilidade oferecida.
[0307]Uma primeira extensão permite aos usuários construir nós personalizados que encaixam-se em um fluxo. Há duas partes para criar um nó de extensão: • Definir o tipo da saída. Por exemplo, "tudo que chega bem como a nova coluna 'foo'". • Prover o script ou executável para de fato realizar a transformação.
[0308]Algumas implementações definem dois tipos de nó que viabilizam extensões definidas pelo usuário. Um "NódeScript" é um nó onde o usuário pode escrever um script para manipular linhas e passá-las de volta. O sistema oferece funções API. O usuário pode então escrever um nó de transformação (ou entrada ou saída) como um script (por exemplo, em Python ou Javascript). Um "NódeConcha" é um nó onde o usuário pode definir um programa executável para rodar e dirigir as linhas ao executável. O programa executável gravará então os resultados em stdout, gravará os erros em stderr e sairá quando tiver terminado.
[0309]Quando os usuários criam extensões para fluxos, o processamento interno é mais complexo. Em vez de compilar tudo em uma declaração AQL, o processo divide a avaliação em duas partes em torno do nó personalizado e direciona os resultados da primeira parte ao nó. Isso é ilustrado nas Figuras 8K e 8L, onde o nó definido pelo usuário 850 divide o fluxo em duas partes. Durante a avaliação do fluxo, o nó de script definido pelo usuário 825 recebe dados da primeira parte do fluxo e emite uma saída para a segunda parte do fluxo.
[0310]Além das personalizações que modificam os dados em fluxo de alguma forma, os usuários podem escrever scripts que controlem como um fluxo roda. Por exemplo, suponha-se que um usuário precisa extrair dados de uma pasta compartilhada que possui planilhas publicadas nela todos os dias. Um fluxo definido já sabe como lidar com arquivos CSV ou Excel. Um usuário pode escrever um script de controle que itera sobre um compartilhamento remoto, abre os arquivos relevantes e, em seguida, executa-o sobre esses arquivos.
[0311]Há muitas operações comuns, tais como união de padrões, que um usuário pode adicionar a um nó de fluxo de dados. No entanto, à medida que a tecnologia continua evoluindo, sempre haverá maneiras de obter ou armazenar dados que não são acomodadas pelos nós de fluxo de dados definidos pelo sistema. Esses são os casos em que os scripts de fluxo de controle se aplicam. Esses scripts são executados como parte do fluxo.
[0312]Como observado acima, os fluxos também podem ser invocados a partir da linha de comando. Isso permitirá aos usuários embutir os scripts em outros processos ou tarefas noturnas.
[0313]As implementações têm um processo de avaliação de fluxo que oferece muitos recursos úteis. Esses recursos incluem:
• Executar um fluxo por inteiro. • Quebrar um fluxo a fim de garantir a ordem ou "fixação" de operações. • Quebrar um fluxo para permitir que a execução de código de terceiros. • Executar um fluxo, mas, em vez de voltar até as fontes de dados a montante, executá-lo fora da saída de um fluxo executado anteriormente. • Pré-executar algumas partes do fluxo para popular os caches locais.
[0314]O processo de avaliação funciona com base na interação entre os modelos lógicos e os modelos físicos. Qualquer modelo físico materializado pode ser o ponto inicial de um fluxo. No entanto, o tempo de execução de linguagem provém as abstrações para definir quais subseções do fluxo rodar. Em termos gerais, o tempo de execução não determina quando executar subfluxos vs. fluxos inteiros. Isso é determinado por outros componentes.
[0315]A Figura 8M ilustra que a execução de um fluxo inteiro começa com modelos físicos implícitos nos nós de entrada e saída. A Figura 8N ilustra que a execução de um fluxo parcial materializa um modelo físico com os resultados. A Figura 8O ilustra uma parte em execução de um fluxo com base nos resultados anteriores.
[0316]Embora modelos físicos possam ser reordenados para otimizar o processamento, os modelos lógicos ocultam esses detalhes do usuário porque geralmente eles não são relevantes. O avaliador de fluxo faz parecer que os nós são avaliados na ordem em que eles aparecem no fluxo. Se um nó é fixado, ele realmente fará com que o fluxo se materialize ali, garantindo assim que a parte à esquerda avalie antes da parte à direita. Em um fluxo bifurcado, o pré-fluxo em comum roda só uma vez. O processo é idempotente, o que significa que os operadores de entrada podem ser invocados novamente devido a uma falha e não falhar. Observe-se que não há requisito de que os dados que voltam sejam exatamente os mesmos que na primeira vez (isto é, quando os dados na fonte de dados a montante mudam entre a primeira e segunda tentativas).
[0317]A execução dos operadores de transformação não tem efeitos colaterais. Por outro lado, os operadores de extração tipicamente têm efeitos colaterais. Qualquer operação que modifique as fontes de dados antes que deles no fluxo não é observada até a próxima execução do fluxo. Os operadores de carga geralmente não têm efeitos colaterais, mas há exceções. Na verdade, alguns operadores de carga requerem efeitos colaterais. Por exemplo, extrair arquivos de uma pasta compartilhada e descompactá-los são considerados efeitos colaterais.
[0318]Algumas implementações são sensíveis ao caso no que diz respeito a nomes de coluna, mas outras não. Algumas implementações oferecem um parâmetro configurável pelo usuário para especificar se os nomes de coluna são sensíveis ao caso.
[0319]Em termos gerais, as visualizações de objetos armazenados em cache sempre vão "adiante" no tempo.
[0320]As Figuras 8P e 8Q ilustram a avaliação de um fluxo com um nó fixado
860. Durante a avaliação do fluxo, os nós antes da fixação são executados primeiramente para criar resultados de nó do usuário 862, e os resultados de nó do usuário 862 são usados na última parte do fluxo. Observe-se que a fixação não impede de reorganizar a execução dentro de cada uma das partes. Um nó fixado é na prática um checkpoint lógico.
[0321]Além dos nós que são fixados por um usuário, alguns nós são inerentemente fixados com base nas operações que executam. Por exemplo, se um nó faz uma chamada para um código personalizado (por exemplo, um processo Java), operações lógicas não podem ser movidas através do nó. O código personalizado é uma "caixa preta", logo suas entradas e saídas devem ser bem definidas.
[0322]Em alguns casos, movimentar operações pode aprimorar o desempenho, mas cria o efeito colateral de reduzir a consistência. Em alguns casos, o usuário pode usar a fixação como uma maneira de garantir a consistência, mas às custas do desempenho.
[0323]Como observado acima, um usuário pode editar os valores de dados diretamente na grade de dados 315. Em alguns casos, o sistema deduz uma regra geral baseada na edição do usuário. Por exemplo, um usuário pode adicionar a cadeia "19" ao valor de dados "75" para criar "1975". Com base nos dados e na edição do usuário, o sistema pode deduzir a regra de que o usuário deseja completar a cadeia de caracteres para formar anos com 4 caracteres para os anos com 2 caracteres, sem o século. Em alguns casos, a dedução baseia-se exclusivamente na mudança em si (por exemplo, acrescentar "19" ao início), mas, em outros casos, o sistema também baseia a dedução nos dados na coluna (por exemplo, que a coluna possui valores na faixa de "74" a "99"). Em algumas implementações, solicita-se ao usuário que confirme a regra antes de aplicá-la aos demais valores de dados na coluna. Em algumas implementações, o usuário também pode optar por aplicar a mesma regra a outras colunas.
[0324]As edições a um valor de dados pelo usuário podem incluir adicionar a um valor de dados atual como foi descrito agora mesmo, remover parte de uma sequência de caracteres, substituir certa subcadeia por outra subcadeia, ou qualquer combinação desses. Por exemplo, números de telefone podem ser especificados em uma variedade de formatos, tais como (XXX)YYY-ZZZZ. Um usuário pode editar um valor de dados específico para remover os parênteses e o traço e adicionar pontos para obter XXX.YYY.ZZZZ. O sistema pode deduzir a regra com base em uma única ocorrência de editar um valor de dados e aplicar a regra à toda a coluna.
[0325]Em outro exemplo, os campos numéricos também podem ter regras deduzidas. Por exemplo, se um usuário substitui um valor negativo por zero, o sistema pode deduzir que todos os valores negativos devem ser zerados.
[0326]Em algumas implementações, deduz-se uma regra quando dois ou mais valores de dados são editados em uma mesma coluna da grade de dados 315 de acordo com uma regra compartilhada.
[0327]A Figura 9 ilustra como um fluxo lógico 323 pode ser executado de diferentes maneiras dependendo de se as operações são designadas como imperativas ou declarativas. Nesse fluxo, há dois conjuntos de dados de entrada, o conjunto de dados A 902 e o conjunto de dados B 904. Nesse fluxo, esses conjuntos de dados são recuperados diretamente de fontes de dados. De acordo com o fluxo, os dois conjuntos de dados 902 e 904 são combinados usando uma operação de junção 906 para produzir um conjunto de dados intermediário. Após a operação de junção, o fluxo 323 aplica um filtro 908, que cria outro conjunto de dados intermediário com menos linhas do que o primeiro conjunto de dados intermediário criado pela operação de junção 906.
[0328]Se todos os nós nesse fluxo são designados como imperativos, executar o fluxo faz exatamente o que os nós especificam: os conjuntos de dados 902 e 904 são recuperados de suas fontes de dados, esses conjuntos de dados são combinados localmente e, em seguida, o número de linhas é reduzido pelo filtro.
[0329]Se os nós nesse fluxo são designados para execução declarativa (que geralmente é o padrão), o otimizador de execução pode reorganizar o fluxo físico. Em um primeiro cenário, suponha-se que os conjuntos de dados 902 e 904 advêm de fontes de dados distintas e que o filtro 908 aplica-se somente a campos no conjunto de dados A 902. Nesse caso, o filtro pode ser repassado à consulta que recuperou o conjunto de dados A 902, reduzindo assim a quantidade de dados recuperados e processados. Isso pode ser particularmente útil quando o conjunto de dados A 902 é recuperado de um servidor remoto e/ou o filtro elimina um número significativo de linhas.
[0330]Em um segundo cenário, novamente presume-se a execução declarativa, mas suponha-se que ambos o conjunto de dados A 902 e o conjunto de dados B 902 sejam recuperados da mesma fonte de dados (por exemplo, cada um desses conjuntos de dados corresponde a uma tabela na mesma base de dados no mesmo servidor de base de dados). Nesse caso, o otimizador de fluxo pode repassar a execução inteira ao servidor remoto, construindo assim uma consulta SQL simples que junta as duas tabelas e inclui uma cláusula WHERE que aplica a operação de filtro especificada pelo nó de filtro 908. Essa flexibilidade de execução pode reduzir em grande medida o tempo de execução geral.
[0331]Um usuário constrói e muda um fluxo de dados com o tempo, logo algumas implementações oferecem execução de fluxo incremental. Os resultados intermediários para cada nó são salvos e recomputados somente quando necessário.
[0332]Para determinar se um nó precisa ser recomputado, algumas implementações utilizam um hash de fluxo e um relógio de vetor. Cada nó no fluxo 323 possui seu próprio hash de fluxo e relógio de vetor.
[0333]Um hash de fluxo para dado nó é um valor de hash que identifica todas as operações no fluxo até o dado nó, inclusive. Se qualquer aspecto da definição de fluxo mudar (por exemplo, adicionar nós, remover nós ou mudar as operações em qualquer um dos nós), o hash será diferente. Observe-se que o hash de fluxo só acompanha a definição de fluxo e não examina os dados subjacentes.
[0334]Um relógio de vetor acompanha o versionamento dos dados usados por um nó. Ele é um vetor porque dado nó pode utilizar dados de várias fontes. As fontes de dados incluem qualquer fonte de dados acessada por qualquer nó até o dado nó, inclusive. O vetor inclui um valor de versão monotonicamente crescente para cada uma das fontes de dados. Em alguns casos, o valor monotonicamente crescente é um carimbo de hora/tempo da fonte de dados. Observe-se que o valor corresponde à fonte de dados, não quando os dados foram processados por qualquer um dos nós no fluxo. Em alguns casos, uma fonte de dados pode prover o valor de versão monotonicamente crescente (por exemplo, a fonte de dados possui carimbos de hora/tempo de edição). Se a fonte de dados não pode prover um número de versão como esse, o aplicativo de prep de dados 250 computa um valor substituto (por exemplo, quando a consulta foi enviada à ou recuperada da fonte de dados). Em termos gerais, é preferível ter um valor de versão que indica quando os dados foram mudados pela última vez em vez de um valor que indica quando o aplicativo de prep de dados consultou os dados pela última vez.
[0335]Ao usar o hash de fluxo e o relógio de vetor, o aplicativo de prep de dados 250 limita o número de nós que precisam ser recomputados.
[0336]A Figura 10 ilustra um processo para estabelecer uma marca de preamar para conjuntos de resultados recuperados de diversas consultas assíncronas, de acordo com algumas implementações. Cada grupo de quatro barras representa um ponto no tempo, com o tempo crescendo na ordem T1, T2, T3 e T4. As quatro barras em cada grupo representam resultados parciais para quatro consultas distintas que estão em andamento assincronamente. A linha tracejada em cada grupo representa quais linhas de dados foram recuperadas de uma fonte de dados para todas as consultas. Por vezes, a linha tracejada é chamada de marca de preamar. A marca de preamar é especificada tipicamente por um identificador exclusivo. Em algumas implementações, o identificador exclusivo é um valor de chave primária da fonte de dados. Por exemplo, se cada uma das consultas recupera dados da mesma fonte de dados, na ordem da chave primária, um valor de chave primária pode ser usado como a marca de preamar. Em algumas implementações, o identificador exclusivo é um número de linha.
[0337]No primeiro tempo T1, o quatro conjunto de resultados 1008-1 possui o menor número de linhas dos quatro conjuntos de resultados 1002-1, 1004-1, 1006-1 e 1008-1, logo a marca de preamar 1010-1 em T1 é determinada pelo quarto conjunto de dados 1008-1. No segundo tempo T2, mais resultados foram recebidos para o segundo conjunto de resultados 1004-2 e o terceiro conjunto de resultados 1006-2, mas o primeiro conjunto de resultados 1002-2 e o quarto conjunto de resultados 1008-2 permanecem iguais. Por causa disso, a marca de preamar 1010-2 também permanece a mesma. No terceiro tempo T3, o primeiro conjunto de resultados 1002-3 recebeu linhas de dados adicionais, mas o segundo conjunto de dados 1004-3, o terceiro conjunto de dados 1006-3 e o quarto conjunto de dados 1008-3 permanecem iguais. Por causa disso, a marca de preamar 1010-3 também permanece a mesma. No quarto tempo T4, o primeiro conjunto de resultados 1002-4, o segundo conjunto de resultados 1004- 4 e o terceiro conjunto de resultados 1006-4 permanecem iguais, mas linhas adicionais são recuperadas para o quarto conjunto de resultados 1008-4. Nessa altura, há mais linhas no quarto conjunto de resultados 1008-4 do que linhas no segundo conjunto de resultados 1004-4, logo a marca de preamar 1010-4 é determinada pelo segundo conjunto de resultados 1004-4.
[0338]Em algumas implementações, a recomputação da marca de preamar é acionada quando novas linhas são recebidas por qualquer uma das consultas. Em algumas implementações, a recomputação da marca de preamar é acionada com base em um temporizador (por exemplo, a cada segundo). Em algumas implementações que utilizam um temporizador, um primeiro teste determina se qualquer um dos conjuntos de resultados mudou desde a atualização (ou teste) mais recente. Em algumas implementações, os intervalos de temporização não são lineares. Por exemplo, executa-se um primeiro teste/atualização em meio segundo, executa-se um segundo teste/atualização após mais um segundo, executa-se uma terceira atualização após mais dois segundos, e assim por diante.
[0339]A Figura 11 ilustra como uma interface do usuário de preparação de dados atualiza enquanto os dados são carregados de uma fonte de dados, de acordo com algumas implementações. Um sistema de computador 200 inclui um aplicativo de prep de dados 250 e um cache 1112, que armazena resultados de consulta parciais. O aplicativo de prep de dados 250 exibe uma interface do usuário 100, que permite ao usuário interagir e modificar os dados recebidos de uma fonte de dados armazenada em uma base de dados 240. A base de dados 240 pode ser armazenada no sistema de computador 200 ou armazenada remotamente (por exemplo, em um servidor de base de dados). Os dados são recuperados usando várias consultas assíncronas 1120 e são recebidos como resultados de consulta parciais 1122 (por exemplo, em blocos especificados pelo aplicativo de prep de dados 250). Tipicamente, o bloco inicial para cada uma das consultas é pequeno para que os dados possam ser carregados na interface do usuário com rapidez. Isso permite que o usuário comece a trabalhar com os dados imediatamente. Os tamanhos de bloco tipicamente aumentam, tal como dobrando a cada vez que um bloco de linhas é recebido.
[0340]O módulo de atualização de dados 1110 atualiza a interface do usuário 100 à medida que novas linhas de dados chegam. Há vários aspectos para o módulo de atualização de dados 1110. Em primeiro lugar, as implementações podem configurar quando o módulo de atualização de dados é executado. Em algumas implementações, o módulo de atualização de dados é executado toda vez que novas linhas de dados são recebidas por qualquer uma das consultas 1120. Em algumas implementações, o módulo de atualização de dados é acionado por um temporizador (por exemplo, a cada segundo). Em algumas implementações que são acionadas por um temporizador, realiza-se um primeiro teste para determinar se qualquer um dos conjuntos de resultados mudou desde a última vez que o módulo de atualização de dados foi executado. Em segundo lugar, o módulo de atualização de dados computa a marca de preamar e compara-a à anterior. Se elas foram iguais, nenhuma outra ação é realizada dessa vez.
[0341]Quando a marca de preamar muda, o módulo de atualização de dados 1110 atualiza a interface do usuário 100 de acordo com a nova marca de preamar. Em cada lugar onde são exibidos dados (por exemplo, nos histogramas de valores de dados do painel de perfis, tal como o histograma 1310 na Figura 13), os dados são atualizados. Em alguns casos, o usuário age para editar os dados e/ou mudar parâmetros acerca de como os dados são visualizados (por exemplo, posição de rolagem ou seleção de objetos), conforme ilustram as Figuras 12 e 13. Nesses casos, o módulo de atualização de dados 1110 atualiza os dados de acordo com as mudanças de dados e parâmetros de visualização a fim de preservar o que o usuário está vendo (por exemplo, sem saltos extravagantes na interface do usuário 100).
[0342]A Figura 12 ilustra interações do usuário com dados parcialmente carregados em uma interface do usuário de preparação de dados e atualizações subsequentes à interface do usuário na medida em que dados adicionais chegam assincronamente, de acordo com algumas implementações. Conforme ilustra a Figura 11, resultados parciais 1122 são recuperados de uma base de dados 240 e armazenados em um cache 1112. Os dados do cache atualizam a interface do usuário 100 em um primeiro momento 1200-1. Uma vez que alguns dados tornam-se visíveis, o usuário é capaz de fazer mudanças 1212 a eles, tal como filtrá-los, excluir certos dados, escovar os dados, excluir uma coluna, adicionar uma nova coluna, renomear uma coluna, mudar o tipo de dados de uma coluna, ou aplicar uma função de transformação a uma coluna. Essas mudanças são aplicadas aos dados em um segundo momento 1200-2. Essas mudanças aos dados (ou à tela de dados) baseiam-se no cache e na marca de preamar atual. As mudanças também são armazenadas como um conjunto de operações armazenadas 1214 (por exemplo, como parte de um ou mais nós em um fluxograma correspondente). Quando dados adicionais são recebidos e a marca de preamar muda, o módulo de atualização de dados 1110 utiliza o conjunto atualizado de linhas do cache (até a nova marca de preamar) e aplica as operações armazenadas 1214 aos dados recuperados para atualizar (1216) a interface do usuário 100. Dessa forma, no terceiro momento 1200- 3, o usuário ainda vê as mudanças, e as mudanças são aplicadas às novas linhas de dados. Em outras palavras, os dados atualizados não revertem, desfazem ou ignoram a ação 1212 do usuário.
[0343]A Figura 13 é um exemplo de um painel de perfis para uma interface do usuário de preparação de dados, de acordo com algumas implementações. O painel de perfis inclui histogramas de valores de dados para cada um dos campos de dados exibidos, tal como o histograma 1310 para o campo "Dia da Semana" (que identifica o dia da semana em que cada acidente ocorreu no conjunto de dados de Acidentes). Cada barra em um histograma de valores de dados é um "compartimento" que corresponde a um valor de dados individual ou a uma faixa de valores de dados. Para campos de dados de dimensão, cada compartimento tipicamente possui um único valor de dados, ao passo que campos numéricos são tipicamente compartimentados por faixas de valores.
[0344]O campo de dados de Estado possui um compartimento para cada estado, inclusive o compartimento Califórnia 1302. Um usuário pode selecionar o compartimento Califórnia 1302 e filtrar a tela para exibir somente linhas da tabela Acidentes onde o acidente ocorreu na Califórnia (ou excluir as linhas da Califórnia). Quando da seleção, os histogramas de valores de dados para os demais campos de dados utilizam a escovação para indicar qual proporção de cada barra corresponde a linhas com Estado = "Califórnia".
[0345]Um usuário também pode excluir uma coluna ou renomeá-la. Por exemplo, um usuário pode selecionar a coluna "Road Fnc" 1304 e removê-la da tela. Como alternativa, o usuário poderia selecionar um nome de coluna diferente, tal como "Condição da Estrada". Em alguns casos, faz sentido mudar o tipo de dados do campo de dados selecionado. Um usuário também pode adicionar uma nova coluna, tal como adicionar uma nova coluna na localização 1306. Ao adicionar uma nova coluna, os dados para a coluna são habitualmente expressos em função de outras colunas. Por exemplo, adicionar uma nova coluna que computa uma abreviação de estado em dois caracteres correspondente ao valor de dados Estado para cada linha.
[0346]Um usuário também pode mudar valores de dados para uma coluna existente. Por exemplo, os valores de dados 1312 para dia da semana foram codificados pelos números 1 a 7 nesse conjunto de dados. Para muitos usuários, seria útil converter esses números em nomes para os dias da semana (por exemplo, substituir 1 por "Segunda", substituir 2 por "Terça", e assim por diante). O usuário pode fazer essas edições aos dados diretamente no painel de perfis da interface do usuário de prep de dados 100.
[0347]Todas essas mudanças são armazenadas como parte das operações armazenadas 1214 e aplicam-se a novas linhas de dados à medida que elas são recebidas e atualizadas. Por exemplo, se o valor de dados 1 é substituído por "Segunda" para o campo de dados "Dia da Semana", essa mesma transformação será aplicada a todas as novas linhas de dados que são recebidas que têm "1" como o dia da semana.
[0348]As implementações reveladas propiciam os benefícios a seguir: • Mostrar ao usuário resultados incrementais à medida que eles se fazem disponíveis. • Permitir ao usuário explorar os dados à medida que eles chegam via rolagem, seleção, escovação e assim por diante. • Permitir ao usuário tomar medidas para construir o fluxo à medida que os dados chegam, ainda que as ações afetem os dados vindouros.
[0349]À medida que os dados chegam, o painel de perfis e o painel de dados atualizam periodicamente para refletir os novos dados.
[0350]Enquanto os dados carregam, os usuários podem interagir com eles para visualizá-los e modificá-los. Por exemplo, um usuário pode: • Girar o painel de perfis, tanto na vertical quanto na horizontal. Isso faz com que os perfis em visualização carreguem, exibindo o estado atual do cache. • Girar o painel de dados, tanto na vertical quanto na horizontal. Isso exibe a visualização atual do cache. • Fazer seleções no painel de perfis como se os dados já tivessem carregado por inteiro. Essas seleções podem implicar filtros, que já devem ser robustos para dados/domínios adicionais. Esses filtros são aplicados e usados para conduzir qualquer interação do usuário. Obs.: essas seleções tipicamente baseiam- se nos valores selecionados, não em suas posições. Por exemplo, suponha-se que um usuário selecione um compartimento (também chamado de balde) que indica uma faixa de 1 a 5 no campo "foo". Isso significa que um filtro em foo encontra-se na faixa de [1,5]. Isso causa a escovação no Painel de Perfis e também causa a filtragem no Painel de Dados. O filtro persiste à medida que mais dados chegam. Se o compartimento selecionado é consolidado em um compartimento maior, esse compartimento será parcialmente escovado, ainda que contenha a faixa selecionada. • Todas as outras opções de estado de visualização (por exemplo, classificações) permanecem funcionais e não impedem carregamentos incrementais. • As visualizações em todos os nós permanecem vivas. Por exemplo, a área de síntese de junções do Nó Junção permite ao usuário selecionar partes juntadas enquanto os dados carregam.
[0351]À medida que os dados chegam, os usuários podem fazer edições neles:
• Eles podem fazer edições que não dependem dos dados específicos na coluna. Por exemplo, eles podem remover ou adicionar colunas, renomear colunas ou mudar os tipos de coluna. • Eles podem fazer edições que dependem dos dados específicos na coluna. Por exemplo, eles podem clicar com o botão direito/remover um compartimento no Painel de Perfis. Essas operações têm uma faixa de seleção implícita, que é deduzida quando da seleção inicial, ainda que o item selecionado seja consolidado em uma faixa maior. • Eles podem fazer configurações para operações como junções e agregados.
[0352]O encadeamento de múltiplas ações sobre os dados em carregamento preserva os comportamentos aqui estabelecidos. Por exemplo:
1. Um usuário carrega uma tabela T de um Servidor SQL.
2. Após os metadados carregarem, mas antes do fim do carregamento, o usuário remove a coluna c.
3. O sistema continua carregando T e também começa a computar T-{c}; o usuário observa os metadados para esse nó surgirem e pode tomar uma ação (por exemplo, remover a coluna d).
4. O sistema continua carregando T mas abandona a computação para T- {c}, decidindo, em vez disso, computar diretamente T-{c,d} a partir de T. Como alternativa, o sistema continua carregando T e computando T-{c} e decide computar T-{c,d} por cima do último.
5. O usuário pode continuar fazendo modificações ao estado de T-{c,d} à medida que ele torna-se disponível.
[0353]Além das ações do usuário que mudam dados somente com resultados parciais carregados, o usuário pode realizar outras ações na interface do usuário que serão preservadas à medida que mais dados chegam. Por exemplo, as ações do usuário para selecionar, rolar ou mudar o estado de visualização são preservadas. A rolagem vertical e horizontal aplica-se tanto ao painel de perfis quanto ao painel de dados. Se um usuário selecionou um objeto específico em qualquer um dos painéis, a seleção mantém-se quando novos dados chegam. O estado de visualização mantém-se, incluindo escovações e filtros.
[0354]A terminologia usada na descrição da presente invenção serve apenas ao intuito de descrever implementações específicas e não visa limitar a presente invenção. Como usadas na descrição da invenção e das reivindicações anexas, as formas no singular "um", "uma", "o" e "a" visam a incluir também suas variações no plural, salvo quando o contexto ditar claramente o contrário. Entender-se-á também que o termo "e/ou", conforme usado neste documento, refere-se a e abrange toda e qualquer combinação de um ou mais dos itens listados associados. Deve-se entender ainda que os termos "compreende" e/ou "compreendendo", quando utilizados no presente relatório descritivo, especificam a presença de recursos, etapas, operações, elementos e/ou componentes mencionados, mas não excluem a presença ou adição de um ou mais outros recursos, etapas, operações, elementos, componentes e/ou grupos dos mesmos.
[0355]A descrição precedente, para fins de explicação, foi descrita com referência a implementações específicas. No entanto, tenciona-se que as discussões ilustrativas acima não sejam exaustivas tampouco limitem a invenção às formas precisamente como reveladas acima. Muitas modificações e variações são possíveis à luz dos ensinamentos acima. As implementações foram escolhidas e descritas a fim de explicar melhor os princípios da invenção e suas aplicações práticas, permitindo assim que outros versados na técnica utilizem da melhor forma a invenção e várias implementações com várias modificações conforme seja adequado ao uso específico contemplado.

Claims (20)

REIVINDICAÇÕES
1. Sistema de computador (200) para preparar dados para análise subsequente, o sistema de computador sendo CARACTERIZADO por compreender: um ou mais processadores; memória (214); e um ou mais programas armazenados na memória (114) e configurados para execução pelos um ou mais processadores, os um ou mais programas compreendendo instruções para: exibir uma interface do usuário (100) que inclui um painel de fluxo de dados, um painel de perfis e um painel de dados, em que o painel de fluxo de dados exibe um fluxograma de nós/ligações que identifica uma fonte de dados (240); para cada uma de várias consultas (1120) à fonte de dados (240): emitir a respectiva consulta (1120) à fonte de dados (240) assincronamente com um tamanho de bloco inicial que especifica um número de linhas; quando da recuperação de um respectivo conjunto inicial de linhas a partir da fonte de dados (240) que satisfaça a respectiva consulta (1120), repetir a respectiva consulta (1120) assincronamente com um tamanho de bloco atualizado até que todas as linhas que satisfazem a consulta (1120) sejam recuperadas; e armazenar as linhas recuperadas que satisfazem a respectiva consulta (1120) em um cache (1112) local; periodicamente: determinar um identificador exclusivo que identifica linhas da fonte de dados (240) que foram recuperadas e armazenadas no cache (1112) local para todas as consultas (1120); e quando o identificador exclusivo muda, atualizar o painel de perfis para exibir histogramas de valores de dados para uma pluralidade de campos de dados na fonte de dados (240), em que cada barra em cada histograma de valores de dados indica uma contagem de linhas advindas da fonte de dados (240) que (i) são especificadas pelo identificador exclusivo e (ii) têm um valor de dados específico simples ou faixa de valores de dados para um respectivo campo de dados; provendo assim uma visualização dos dados consistente no painel de perfis enquanto várias consultas (1120) independentes ocorrem assincronamente.
2. Sistema de computador, de acordo com a reivindicação 1, CARACTERIZADO pelo fato de que cada repetição de uma respectiva consulta (1120) à fonte de dados (240) especifica um tamanho de bloco que é maior do que o tamanho de bloco anterior para a respectiva consulta (1120).
3. Sistema de computador, de acordo com a reivindicação 2, CARACTERIZADO pelo fato de que cada repetição de uma respectiva consulta (1120) à fonte de dados (240) especifica um tamanho de bloco que é duas vezes maior do que o tamanho de bloco anterior para a respectiva consulta (1120).
4. Sistema de computador, de acordo com a reivindicação 1, CARACTERIZADO pelo fato de que a determinação periódica do identificador exclusivo é estrangulada para que ocorra não mais do que uma vez a cada segundo.
5. Sistema de computador, de acordo com a reivindicação 1, CARACTERIZADO por compreender ainda, quando o identificador exclusivo muda, atualizar as linhas de dados advindas da fonte de dados (240) exibidas no painel de dados de acordo com o identificador exclusivo.
6. Sistema de computador, de acordo com a reivindicação 1, CARACTERIZADO pelo fato de que um primeiro nó (340) no fluxograma é inicialmente selecionado e os histogramas de valores de dados exibidos no painel de perfis correspondem a um conjunto de dados computados para o primeiro nó (340).
7. Sistema de computador, de acordo com a reivindicação 6, CARACTERIZADO por compreender ainda:
receber uma seleção do usuário, enquanto as consultas assíncronas (1120) ocorrem, de um segundo nó (344) no fluxograma; em resposta à seleção do usuário, atualizar o painel de perfis para exibir novos histogramas de valores de dados para uma pluralidade de campos de dados de um conjunto de resultados no segundo nó (344), em que cada barra em cada histograma de valores de dados indica uma contagem de linhas do conjunto de resultados que têm um único valor de dados específico ou faixa de valores de dados para um respectivo campo de dados.
8. Sistema de computador, de acordo com a reivindicação 1, CARACTERIZADO pelo fato de que o identificador exclusivo é um valor de chave primária de um campo de chave primária para a fonte de dados (240), e uma linha da fonte de dados (240) é especificada pelo identificador exclusivo quando um valor chave correspondente à linha é menor do que o valor de chave primária.
9. Sistema de computador, de acordo com a reivindicação 1, CARACTERIZADO pelo fato de que o identificador exclusivo é um número de linha de preamar, e uma linha advinda da fonte de dados (240) é especificada pelo identificador exclusivo quando um número de linha correspondente à linha é menor ou igual ao número de linha de preamar.
10. Sistema de computador, de acordo com a reivindicação 9, CARACTERIZADO pelo fato de que cada uma das consultas (1120) possui uma mesma ordem de classificação.
11. Sistema de computador, de acordo com a reivindicação 1, CARACTERIZADO por compreender ainda, enquanto uma ou mais das consultas assíncronas (1120) ocorrem: receber uma entrada do usuário para modificar dados exibidos no painel de perfis;
em resposta à entrada do usuário, traduzir a entrada do usuário em uma operação aplicada às linhas recuperadas da fonte de dados (240) e armazenar uma definição da operação; em que atualizar o painel de perfis quando o identificador exclusivo muda compreende aplicar a operação definida a linhas recuperadas pelas consultas (1120).
12. Sistema de computador, de acordo com a reivindicação 11, CARACTERIZADO pelo fato de que: a entrada do usuário é a seleção de uma única barra para um histograma de valores de dados correspondente a um primeiro compartimento de valores de dados para um primeiro campo de dados, filtrando assim os dados exibidos no painel de perfis a linhas da fonte de dados (240) cujos valores de dados para o primeiro campo correspondem ao primeiro compartimento de valores de dados; e a operação armazenada aplica um filtro que filtra os dados exibidos no painel de perfis a linhas da fonte de dados (240) cujos valores de dados para o primeiro campo correspondem ao primeiro compartimento de valores de dados.
13. Sistema de computador, de acordo com a reivindicação 11, CARACTERIZADO pelo fato de que: a entrada do usuário remove um histograma de valores de dados, correspondente a um primeiro campo de dados, do painel de perfis; e atualizar o painel de perfis quando o identificador exclusivo muda compreende omitir do painel de dados o primeiro campo de dados.
14. Sistema de computador, de acordo com a reivindicação 11, CARACTERIZADO pelo fato de que: a entrada do usuário adiciona uma coluna computada ao painel de perfis com um histograma de valores de dados correspondente, computada em função de uma ou mais outras colunas recuperadas pelas consultas (1120); e atualizar o painel de perfis quando o identificador exclusivo muda compreende atualizar o histograma de valores de dados para a coluna computada de acordo com a função e de acordo com as linhas adicionais recuperadas da fonte de dados (240).
15. Sistema de computador, de acordo com a reivindicação 11, CARACTERIZADO pelo fato de que: a entrada do usuário renomeia uma primeira coluna de dados no painel de perfis com um novo nome; e atualizar o painel de perfis quando o identificador exclusivo muda compreende manter o novo nome para a primeira coluna de dados.
16. Sistema de computador, de acordo com a reivindicação 11, CARACTERIZADO pelo fato de que: a entrada do usuário converte um tipo de dados para uma primeira coluna de dados no painel de perfis em um novo tipo de dados de acordo com uma função de conversão; e atualizar o painel de perfis quando o identificador exclusivo muda compreende aplicar a função de conversão à primeira coluna de dados para as linhas adicionais recuperadas da fonte de dados (240).
17. Sistema de computador, de acordo com a reivindicação 11, CARACTERIZADO pelo fato de que: a entrada do usuário remove uma barra de histograma correspondente a um compartimento para uma primeira coluna de dados no painel de perfis; e atualizar o painel de perfis quando o identificador exclusivo muda compreende remover quaisquer das linhas adicionais recuperadas quando as linhas tiverem um valor de dados para a primeira coluna de dados coincidente com o compartimento.
18. Sistema de computador, de acordo com a reivindicação 17, CARACTERIZADO pelo fato de que o compartimento corresponde a um valor de dados individual ou faixa de valores de dados contínua.
19. Meio de armazenamento legível por computador não transitório CARACTERIZADO por armazenar um ou mais programas configurados para execução por um sistema de computador com um ou mais processadores, memória (114) e uma tela, os um ou mais programas compreendendo instruções para: exibir uma interface do usuário que inclui um painel de fluxo de dados, um painel de perfis e um painel de dados, em que o painel de fluxo de dados exibe um fluxograma de nós/ligações que identifica uma fonte de dados (240); para cada uma de várias consultas (1120) à fonte de dados (240): emitir a respectiva consulta (1120) à fonte de dados (240) assincronamente com um tamanho de bloco inicial que especifica um número de linhas; quando da recuperação de um respectivo conjunto inicial de linhas a partir da fonte de dados (240) que satisfaça a respectiva consulta (1120), repetir a respectiva consulta (1120) assincronamente com um tamanho de bloco atualizado até que todas as linhas que satisfazem a consulta (1120) sejam recuperadas; e armazenar as linhas recuperadas que satisfazem a respectiva consulta (1120) em um cache (1112) local; periodicamente: determinar um identificador exclusivo que identifica linhas da fonte de dados (240) que foram recuperadas e armazenadas no cache (1112) local para todas as consultas (1120); e quando o identificador exclusivo muda, atualizar o painel de perfis para exibir histogramas de valores de dados para uma pluralidade de campos de dados na fonte de dados (240), em que cada barra em cada histograma de valores de dados indica uma contagem de linhas da fonte de dados (240) que (i) são especificadas pelo identificador exclusivo e (ii) têm um valor de dados específico simples ou faixa de valores de dados para um respectivo campo de dados; provendo assim uma visualização dos dados consistente no painel de perfis enquanto várias consultas (1120) independentes ocorrem assincronamente.
20. Método para preparar dados para análise subsequente, o método sendo CARACTERIZADO por compreender: em um sistema de computador com uma tela, um ou mais processadores e memória (114) para armazenar um ou mais programas configurados para execução pelos um ou mais processadores: exibir uma interface do usuário que inclui um painel de fluxo de dados, um painel de perfis e um painel de dados, em que o painel de fluxo de dados exibe um fluxograma de nós/ligações que identifica uma fonte de dados (240); para cada uma de várias consultas (1120) à fonte de dados (240): emitir a respectiva consulta (1120) à fonte de dados (240) assincronamente com um tamanho de bloco inicial que especifica um número de linhas; quando da recuperação de um respectivo conjunto inicial de linhas a partir da fonte de dados (240) que satisfaça a respectiva consulta (1120), repetir a respectiva consulta (1120) assincronamente com um tamanho de bloco atualizado até que todas as linhas que satisfazem a consulta (1120) sejam recuperadas; e armazenar as linhas recuperadas que satisfazem a respectiva consulta (1120) em um cache (1112) local; periodicamente: determinar um identificador exclusivo que identifica linhas da fonte de dados (240) que foram recuperadas e armazenadas no cache (1112) local para todas as consultas (1120); e quando o identificador exclusivo muda, atualizar o painel de perfis para exibir histogramas de valores de dados para uma pluralidade de campos de dados na fonte de dados (240), em que cada barra em cada histograma de valores de dados indica uma contagem de linhas da fonte de dados (240) que (i) são especificadas pelo identificador exclusivo e (ii) têm um valor de dados específico simples ou faixa de valores de dados para um respectivo campo de dados; provendo assim uma visualização dos dados consistente no painel de perfis enquanto várias consultas (1120) independentes ocorrem assincronamente.
BR112021006722-1A 2018-10-09 2019-10-01 carregamento incremental correlacionado de múltiplos conjuntos de dados para um aplicativo de preparação de dados interativo BR112021006722A2 (pt)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US16/155,818 2018-10-09
US16/155,818 US10885057B2 (en) 2016-11-07 2018-10-09 Correlated incremental loading of multiple data sets for an interactive data prep application
PCT/US2019/053935 WO2020076546A1 (en) 2018-10-09 2019-10-01 Correlated incremental loading of multiple data sets for an interactive data prep application

Publications (1)

Publication Number Publication Date
BR112021006722A2 true BR112021006722A2 (pt) 2021-07-27

Family

ID=68318939

Family Applications (1)

Application Number Title Priority Date Filing Date
BR112021006722-1A BR112021006722A2 (pt) 2018-10-09 2019-10-01 carregamento incremental correlacionado de múltiplos conjuntos de dados para um aplicativo de preparação de dados interativo

Country Status (7)

Country Link
EP (1) EP3864521A1 (pt)
JP (2) JP7199522B2 (pt)
CN (1) CN113168413B (pt)
AU (2) AU2019356745B2 (pt)
BR (1) BR112021006722A2 (pt)
CA (1) CA3115220C (pt)
WO (1) WO2020076546A1 (pt)

Families Citing this family (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN111666740A (zh) * 2020-06-22 2020-09-15 深圳壹账通智能科技有限公司 流程图生成方法、装置、计算机设备和存储介质
TWI772233B (zh) * 2021-11-29 2022-07-21 大陸商常州欣盛半導體技術股份有限公司 Cof測試資料的自動整合方法
US20240070147A1 (en) * 2022-08-26 2024-02-29 Oracle International Corporation Dynamic Inclusion of Metadata Configurations into a Logical Model
CN117056359B (zh) * 2023-10-09 2024-01-09 宁波银行股份有限公司 一种表格重建方法、装置、电子设备及存储介质

Family Cites Families (13)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH0887433A (ja) * 1994-09-20 1996-04-02 Matsushita Electric Ind Co Ltd ファイルシステムのブロック管理システム
US20030220928A1 (en) * 2002-05-21 2003-11-27 Patrick Durand Method for organizing and querying a genomic and proteomic databases
US8069188B2 (en) * 2007-05-07 2011-11-29 Applied Technical Systems, Inc. Database system storing a data structure that includes data nodes connected by context nodes and related method
CN101626313A (zh) * 2009-08-10 2010-01-13 中兴通讯股份有限公司 网管系统客户端性能数据显示方法和网管系统客户端
JP2011138382A (ja) 2009-12-28 2011-07-14 Sharp Corp 画像処理装置、画像処理方法、プログラム、及び記録媒体
CN101916254B (zh) * 2010-06-29 2016-07-06 用友软件股份有限公司 表单统计方法和装置
US9501540B2 (en) * 2011-11-04 2016-11-22 BigML, Inc. Interactive visualization of big data sets and models including textual data
US20140046923A1 (en) * 2012-08-10 2014-02-13 Microsoft Corporation Generating queries based upon data points in a spreadsheet application
CN104750727B (zh) * 2013-12-30 2019-03-26 沈阳亿阳计算机技术有限责任公司 一种列式内存存储查询装置及列式内存存储查询方法
CN105512139B (zh) * 2014-09-26 2019-11-05 阿里巴巴集团控股有限公司 数据可视化的实现方法及装置
US10409802B2 (en) * 2015-06-12 2019-09-10 Ab Initio Technology Llc Data quality analysis
US10558681B2 (en) * 2016-01-26 2020-02-11 Socrata, Inc. Automated computer visualization and interaction with big data
US11853529B2 (en) * 2016-11-07 2023-12-26 Tableau Software, Inc. User interface to prepare and curate data for subsequent analysis

Also Published As

Publication number Publication date
JP7199522B2 (ja) 2023-01-05
CN113168413A (zh) 2021-07-23
WO2020076546A1 (en) 2020-04-16
CN113168413B (zh) 2022-07-01
AU2022202376A1 (en) 2022-05-05
AU2022202376B2 (en) 2022-06-09
JP2023040041A (ja) 2023-03-22
EP3864521A1 (en) 2021-08-18
JP7304480B2 (ja) 2023-07-06
AU2019356745B2 (en) 2022-01-13
AU2019356745A1 (en) 2021-05-13
JP2022504205A (ja) 2022-01-13
CA3115220C (en) 2023-07-18
CA3115220A1 (en) 2020-04-16

Similar Documents

Publication Publication Date Title
AU2022203666B2 (en) Generating and applying data transformations in a data import engine
US11188556B2 (en) Correlated incremental loading of multiple data sets for an interactive data prep application
US10719528B2 (en) Data preparation with shared data flows
US11243870B2 (en) Resolution of data flow errors using the lineage of detected error conditions
BR112021006722A2 (pt) carregamento incremental correlacionado de múltiplos conjuntos de dados para um aplicativo de preparação de dados interativo