Configurar tabelas
Vamos aprender a usar essa função com a ajuda do banco de dados de partidas da ATP do TennisMyLife. Vamos processar arquivos CSV com partidas desde a década de 1960, mas criaremos um esquema um pouco diferente para cada década. Também adicionaremos algumas colunas extras para a década de 1990. As instruções de importação são apresentadas abaixo:Esquema de múltiplas tabelas
Podemos executar a seguinte consulta para listar, lado a lado, as colunas e seus tipos em cada tabela, facilitando a visualização das diferenças.- 1970s altera o tipo de
winner_seeddeNullable(String)paraNullable(UInt8)e o descoredeStringparaArray(String). - 1980s altera
winner_seedeloser_seeddeNullable(UInt8)paraNullable(UInt16). - 1990s altera
surfacedeStringparaEnum('Hard', 'Grass', 'Clay', 'Carpet')e adiciona as colunaswalkovereretirement.
Consultando várias tabelas com merge
Vamos escrever uma consulta para encontrar as partidas que John McEnroe venceu contra alguém que era o cabeça de chave nº 1:winner_seed usa tipos diferentes nas várias tabelas:
variantType para verificar o tipo de winner_seed em cada linha e, em seguida, variantElement para extrair o valor subjacente.
Quando o tipo é String, convertemos para um número e então fazemos a comparação.
O resultado da execução da consulta é mostrado abaixo:
De qual tabela vêm as linhas ao usar merge?
E se quisermos saber de qual tabela vêm as linhas? Podemos usar a coluna virtual_table para fazer isso, como mostrado na consulta a seguir:
walkover:
walkover é NULL em todos os casos, exceto em atp_matches_1990s.
Precisaremos atualizar nossa consulta para verificar se a coluna score contém a string W/O quando a coluna walkover for NULL:
score for Array(String), precisamos percorrer o array e procurar por W/O; já se for do tipo String, podemos simplesmente procurar W/O na string.