Neste projeto vamos criará vários pipelines de dados que coletarão dados de um conjunto de dados disponível no MongoDB para o BigQuery.

Motivos:

O MongoDB é um banco de dados NoSQL popular que requer que os dados sejam modelados no formato JSON. Se o modelo de dados de seu aplicativo tiver um ajuste natural ao modelo de dados recomendado do MongoDB, ele poderá fornecer bom desempenho, flexibilidade e escalabilidade para o tipo de transação de cargas de trabalho. Mas, enquanto se trata de analisar dados, o MongoDB não é uma ótima solução - ele não tem uma junção adequada, pois é difícil obter dados de outros sistemas para o MongoDB e nenhum suporte nativo para SQL. A estrutura de agregação do MongoDB não é tão fácil de redigir lógica analítica complexa como em SQL.

Movendo dados do MongoDB para o BigQuery, uma solução de data warehousing com suporte adequado a SQL torna tudo muito mais fácil. O Google BigQuery é a solução de data warehouse do Google Cloud Platform e uma das soluções com melhor desempenho e custo-benefício.

Converter o MongoDB para o BigQuery

Conforme mostrado no diagrama, as etapas vitais a serem seguidas para transmitir o MongoDB para o BigQuery são:

Extraia dados do uso do utilitário mongoexport , conforme mostrado na imagem acima Dados opcionais de limpeza e transformação Carregar para o Google Cloud Storage (GCS) Faça o upload para a tabela do BigQuery a partir do GCS usando a ferramenta de linha de comando ou console bq ou qualquer SDK na nuvem.

Vamos dar uma olhada abrangente em todas as etapas necessárias:

1. Extrair dados do MongoDB

Como mencionado acima, mongoexport é o utilitário que pode ser usado para criar exportação de dados JSON ou CSV armazenados em uma coleção MongoDB.

Uma diretriz geral para usar o mongoexport:

O mongoexport deve ser executado diretamente a partir da linha de comando do sistema, não do shell mongo

Assegure-se de que o usuário de conexão possua, no mínimo, a função de leitura no banco de dados de destino.

O mongoexport usa como padrão a preferência de leitura primária quando conectado ao mongo ou a um conjunto de réplicas.

A preferência de leitura padrão pode ser substituída usando a opção –read Preference

Abaixo está um exemplo que exporta dados da coleção cont_collect para um arquivo CSV no local /opt/exports/csv/cnts.csv

-- -- -- -- , -- .

Ao exportar no formato CSV, você deve especificar os campos nos documentos a serem exportados. No exemplo acima, especificar o contact_name e contact_address campos para exportar. A saída seria semelhante a:

contact_name, contact_address Elon Wick, 27 Manhattan John Musk, 911 cidade de Marte

Opcionalmente, você pode especificar os campos em um arquivo que contém a lista de campos separados por linha a serem exportados - com um campo por linha. Por exemplo, você pode especificar os campos contact_name e contact_address em um arquivo contact_fields.txt :

contact_name contact_address

Em seguida, aplicando a opção –fieldFile, defina os campos para exportar com o arquivo:

-- -- -- -- . -- .

Por padrão, os nomes são incluídos como cabeçalho. A opção –no HeaderLine pode ser usada para eliminar os nomes de campo em uma exportação CSV .

. Como mostrado no exemplo acima, –fields podem ser usados para especificar campos. Campos especificados podem ser um campo dentro de um sub-documento.

Extração de Dados Incrementais do MongoDB

Em vez de extrair toda a coleção, você pode passar dados de consulta e filtro. Essa opção pode ser usada para extrair dados incrementalmente. –Query ou -q é usado para passar esta opção.

Como exemplo, vamos considerar a coleta de contatos acima discutida. Suponha que o campo 'last_updated_time' em cada documento armazene o carimbo de data / hora Unix atualizado / inserido pelo documento.

mongoexport -d users -c contatos -q '{last_updated_time: {$ gte: 1548930176}}' --out exportdir / myRecords.json

O comando acima extrairá todos os registros da coleção que tiver last_updated_timemaior que o valor especificado, 1548930176. Você deve acompanhar a última retirada last_updated_time separadamente.

2. Transformando Dados

Além das transformações para acomodar a lógica de negócios, há algumas coisas básicas que você deve ter em mente ao preparar os dados para o BigQuery.

O BigQuery espera dados CSV codificados em UTF-8. Se os dados forem codificados em ISO-8859-1 (Latin-1), especifique-os explicitamente durante o carregamento para o BigQuery .

espera dados codificados em Se os dados forem codificados em ISO-8859-1 (Latin-1), especifique-os explicitamente durante o carregamento para o . O BigQuery não impõe a chave primária e restrições de chave exclusivas. O processo de ETL tem que cuidar disso.

não impõe a chave primária e restrições de chave exclusivas. O processo de tem que cuidar disso. Os tipos de colunas são um pouco diferentes entre o MongoDB e o BigQuery. A maioria dos tipos tem tipos equivalentes ou conversíveis. Consulte a lista a seguir para saber mais sobre os tipos de dados comuns.

Confira a documentação do BigQuery para ler sobre os tipos de dados do BigQuery .

O valor de DATE deve ser um traço (-) separado e no formato AAAA-MM-DD (ano-mês-dia). Felizmente, o formato de data do mongoexport é exatamente assim e não há necessidade de fazer nenhuma modificação.

Certifique-se de que as colunas de texto estejam entre aspas se puderem ter caracteres delimitadores.

3. Carregar para o Google Cloud Storage (GCS)

Depois que os dados são extraídos do MongoDB, a próxima etapa é fazer o upload de dados para o GCS. Existem várias maneiras de fazer isso.

A Gsutil é a ferramenta padrão do GCP para manipular objetos e intervalos no GCS. Tem opções para fazer upload de um arquivo da sua máquina local para o GCS.

Para copiar um arquivo para o GCS:

gsutil cp table_data.csv gs:

Para copiar uma pasta inteira:

gsutil cp -r dir gs:

Se os arquivos a serem copiados já estiverem no S3, o mesmo comando poderá ser usado.

gsutil cp -R s3: / / nome_de_banho_de_banco / origem / caminho gs: / / nome_do_banco_de_banco / destino / caminho

O Serviço de transferência de armazenamento da nuvem do Google é uma alternativa incrível para fazer upload de arquivos para o GCS a partir do S3 ou de outras fontes de dados on-line, desde que o destino ou coletor seja o intervalo do Cloud Storage. Este serviço suporta o intervalo do GCS como uma fonte.

Este serviço é útil quando se trata de movimentação de dados para o GCS com as seguintes opções:

As cargas iniciais e recorrentes podem ser agendadas.

Após transferir com sucesso os dados para o GCS, os dados de origem podem ser excluídos.

Sincronização periódica entre origem e destino, que pode ser selecionada usando filtros.

Upload do Console da Web

Para fazer upload de dados da máquina local, o console da web do GCP tem opções incorporadas. Siga os passos abaixo para fazer uso disso

Entre no GCP, clique em Storage e vá para Browser na barra da esquerda Selecione o bucket do GCS com o acesso adequado para o qual você deseja fazer upload do arquivo que deve ser carregado no BigQuery. Agora você está na página de detalhes do intervalo. Clique no upload de arquivos, em seguida, selecione o arquivo do seu computador. Agora o upload de dados é iniciado e uma barra de progresso é mostrada, espere até que seja concluída. Após a conclusão, o arquivo será listado no intervalo.

4. Carregar para a tabela do BigQuery a partir do GCS

Você pode usar a interface do usuário do console da Web ou a ferramenta de linha de comando chamada bq para transmitir dados para a tabela do BigQuery. Primeiro, podemos ver como fazer isso no console da web, passo a passo:

Vá para o console do BigQuery no painel do lado esquerdo. Crie o conjunto de dados, se ainda não estiver presente. Agora, clique nos conjuntos de dados criados no lado esquerdo. Em seguida, criar a opção de tabela aparecerá abaixo do editor de consulta. O botão Criar Tabela abrirá o assistente com opções para especificar a origem de entrada e outras especificações para a tabela.

Conforme mostrado na captura de tela, há opções para especificar o esquema ou detectar automaticamente. Muitas outras opções também estão disponíveis.

Como mencionado acima, a ferramenta de linha de comando bq é uma ferramenta útil para interagir com o BigQuery, o que ajuda a carregar dados para a tabela do GCS. O comando bq load pode ser usado para isso e o source_format CSV.

A sintaxe do comando bq load é a seguinte:

bq [SOURCE_PATH] [INLINE_SCHEMA] [LOCATION] é o local dos dados [FORMAT_NAME] aqui é CSV. [DATASET_NAME] é um conjunto de dados existente no BigQuery. [TABLE_NAME] é o nome da tabela na qual os dados devem ser carregados [SOURCE_PATH] URI do Cloud Storage de arquivos de dados. [INLINE_SCHEMA] é um esquema válido para descrever dados. O esquema pode ser um arquivo JSON local ou pode ser especificado diretamente. Nota: O sinalizador

ara ver as opções de lista completa, visite a documentação do BigQuery sobre o carregamento de CSV de armazenamento em nuvem de dados .

Abaixo do exemplo, os comandos para carregar dados usando a ferramenta de linha de comando bq ajudarão você a se familiarizar com as diferentes opções:

Especifique o esquema de dados usando um arquivo JSON de esquema:

-- -- . . . .

Esquema detectado automaticamente do arquivo:

-- -- -- . .

Se os dados forem gravados em uma tabela existente, o BigQuery fornecerá três opções - Gravar se o destino estiver vazio, Anexar à tabela de destino, Substituir tabela de destino. Além disso, é possível adicionar novos campos à tabela durante o upload de dados. Vamos ver cada um com um exemplo.

Para sobrescrever a tabela de destino:

-- -- -- -- . .

Para anexar à tabela de destino:

-- -- -- -- . . . .

Se você quiser adicionar um novo campo à tabela de destino, um novo arquivo JSON de esquema com o campo extra poderá ser fornecido como uma opção:

-- - -- -- -- . . . .

Atualizar tabela de segmentação no BigQuery

Para fazer backup de novos dados para a tabela do BigQuery, carregue inicialmente os dados em uma tabela intermediária como carga completa (consulte a seção completa de carregamento de dados para obter detalhes) Vamos chamá-la como interm_delta_table. Abaixo duas abordagens podem ser seguidas para carregar dados para a mesa final:

Atualize as linhas na tabela final e insira novas linhas da tabela delta que estão faltando na tabela final.

UPDATE data_setname.final_target_table_name t SET t.value = s.value FROM data_set_name.interm_delta_table s WHERE t.id = s.id; INSERT data_setname.final_target_table_name ( id , valor) ID de SELECT , valor FROM data_set_name.interm_delta_table WHERE NÃO ID IN ( SELECT id FROM data_setname.final_target_table_name);

2. Exclua as linhas da tabela final que estão na tabela delta. Em seguida, insira todos os registros da tabela delta na tabela final.

DELETE data_setname.final_target_table_name f WHERE f.id IN ( id SELECT de data_set_name.interm_delta_table); INSERT data_setname.final_target_table_name ( id , value ) ID de SELECT , valor FROM data_set_name.interm_delta_table;

Conclusão

Na maioria das vezes, mover dados do sistema NoSQL, como o MongoDB, para um data warehouse adequado é essencial para a análise adequada dos dados. Converter esquema em um formulário normalizado e alterar o formato de dados sem qualquer perda de informações é realmente complicado. Para manter o controle de cargas de dados incrementais recorrentes, podem ser necessários sistemas separados para armazenar metadados relacionados ao trabalho ETL.

MANEIRA MAIS FÁCIL DE MOVER DADOS DO MONGODB PARA O BIGQUERY

Existe uma opção mais rápida para fornecer a mesma saída e dimensionar instantaneamente. Uma Plataforma de Integração de Dados em Nuvem - Hevo,pode ajudar você a consolidar dados de qualquer fonte de dados no BigQuery em questão de alguns minutos. Tudo isso pode ser alcançado em um ponto simples e interface de clique sem escrever nenhum script ETL. Aqui estão as etapas para replicar o MongoDB para o BigQuery usando o Hevo:

Conecte-se ao seu banco de dados MongoDB .

. Selecione o modo de replicação: (a) Full Dump and Load (b) Carga incremental para dados somente de anexação (c) Carga incremental para dados mutáveis.

Configure o destino do BigQuery onde ele deve ser copiado.

A Hevo oferece uma Avaliação Gratuita de 7 dias para você explorar uma migração de dados sem complicações do MongoDB para o BigQuery.