Conversão de dados CSV em JSON e carregamento em massa de documentos no Couchbase

Carregamento em massa de documentos em Couchbase

Esta postagem de blog é um exemplo de como carregar dados como JSON no Couchbase. Para os fins desta postagem, os dados extraídos do RDBMS como CSV serão convertidos em JSON. Os DBAs e administradores de RDBMS familiarizados com Oracle, SQL Server, MySQL etc. provavelmente estão procurando uma maneira de experimentar e testar o NoSQL. Geralmente, a primeira etapa do uso do NoSQL é converter tudo o que você tem em JSON

O Couchbase oferece suporte a dados JSON e binários, mas, para os fins desta postagem, estamos analisando o tipo de dados mais rico, o JSON. É importante entender isso porque, ao carregar documentos no Couchbase em um formato diferente do JSON, os dados serão carregados como binários e poderão afetar a flexibilidade da visualização ao tentar criar visualizações ou índices. Com isso, vamos prosseguir com o carregamento de alguns documentos. Há duas maneiras de fazer isso, mas, para fins desta postagem, presumo que qualquer documento que você queira carregar já esteja no formato JSON e esteja compactado ou descompactado. A próxima seção descreverá um caminho possível para garantir que você esteja carregando dados JSON.

Alguns parceiros de ETL do Couchbase, como TalendO Talend oferece um conector para o Couchbase se você quiser uma GUI, talvez não queira lidar com arquivos CSV ou queira reordenar seus dados antes de enviá-los para o CSV ou apenas tenha a necessidade de ETL de dados de várias fontes antes de armazená-los no Couchbase Server. O Talend pode mapear e armazenar documentos diretamente como arquivos JSON antes de carregá-los no Couchbase, se desejado.

Este guia pressupõe que você tenha alguma familiaridade com Linux ou Mac, gerenciadores de pacotes e Ruby.

Para obter informações adicionais sobre a configuração do SDK, acesse: www.couchbase.com/developers/

As etapas usadas para preparar e carregar os dados são as seguintes:

  1. Preparar os dados: Dê uma olhada em alguns exemplos de ferramentas para converter o CSV em JSON.
  2. Carregar os dados: Examine alguns métodos para carregar os dados no couchbase por meio de scripts Ruby.

Pré-requisitos para Linux e Mac: Requer um ambiente de construção funcional!

  1. Libcouchbase: Como esse script usa Ruby, você deve ter a libcouchbase instalada antes de instalar a gem couchbase
  2. rubygem: certifique-se de que você tenha rubygems disponível para instalar o wrapper ruby do couchbase
    • As gemas que usei são
      • 'ruby-progressbar'
      • 'couchbase'
      • 'yaji'
      • 'optparse'
  3. Analisador Yajl: também deve ser instalado como um pré-requisito para o YAJI.
  4. Instalar o Couchbase Gem: gem install couchbase

Se a configuração tiver sido bem-sucedida, os scripts em rubi que forneci deverão ser executados. Talvez seja necessário passar -h para o carregador de fluxo e garantir que você receba a mensagem de sintaxe. Por fim, não se esqueça de instalar também os GEMs listados, Yaji, optparse, couchbase e ruby-progressbar. Os links são fornecidos no final desta postagem.

Preparar os dados

Método 1 de preparação de dados: simples, rápido e consistente: csvtojson Script NodeJS

  • Pode ser encontrado no Google e há outros também.
  • Instalação via NPM, como npm install -g csvtojson

Aqui está um exemplo de conversão para referência:

Método 2 de preparação de dados: escrever um script Ruby: csv2json.rb 

O tempo para concluir o processo varia porque o Ruby é de thread único.

Uma observação adicional para esse script é que estou usando o YAJL em vez do módulo JSON padrão, que não lida com dados de streaming no Couchbase.

O script abaixo mostra a única alteração necessária. Isso melhorará o uso da memória durante a conversão. Se você não tiver instalado o YAJL antes, basta fazer isso: 'gem install yajl-ruby'

Etapas pós-conversão

Após a conclusão da conversão, é hora de compactar o arquivo com o ZIP:

Coloque o(s) arquivo(s) zip em um diretório. Eu usei ~/Downloads/json_files/ em meu diretório pessoal.

Depois que os dados tiverem sido preparados, você estará pronto para iniciar o carregamento. Os exemplos a seguir abordarão algumas maneiras comuns de colocar seus dados no Couchbase em massa.

A instalação do Couchbase vem com uma ferramenta integrada chamada carregador de documentos cbc. Ele pega arquivos de documentos individuais, com até 20 MB de tamanho, compactados ou dentro de um diretório e os carrega. No momento em que este artigo foi escrito carregador de documentos cbc requer vários arquivos no formato JSON contidos em um diretório. Em segundo lugar, discutirei uma ferramenta que escrevi em Ruby e que emprega a ferramenta YAJI Ruby Gem. O código referenciado é de uso gratuito e pode ser reescrito em qualquer linguagem que você se sinta confortável em usar.

Método 1 de carregamento de documentos: usando carregador de documentos cbc

O uso de um conjunto de arquivos individuais em um diretório é um caso de uso comum, mas depende da estrutura dos arquivos e diretórios a serem importados para refletir os documentos de desejo como eles aparecerão depois de carregados. Para ajudar a preservar essa estrutura, recomendamos empacotar os arquivos e diretórios a serem carregados em um arquivo .zip.

Os nomes das chaves de identificação dos documentos serão baseados nos arquivos de documentos fornecidos.

Observação: tEsse método não é ideal para grandes arquivos de documentos consolidados. Para arquivos grandes e monolíticos, exemplificarei como eles são carregados no Método 2, abaixo.

Em seguida, carregue o arquivo ou arquivos com o seguinte comando:

Observação:
O '-s 1000' é o tamanho da memória do bucket. Você precisará ajustar esse valor para o seu bucket.
Além disso, o bucket não precisa existir como carregador de documentos cbc o criará, mas esteja ciente da utilização de seus recursos antes de definir o sinalizador '-s' para garantir que você tenha RAM disponível.

Se tudo tiver sido bem-sucedido, você verá uma saída informando se os documentos foram carregados, quantos bytes, etc.

Aqui está um breve script para carregar vários arquivos .zip em um determinado diretório:

Método 2 de carregamento de documentos: streamloadjson

O outro método é carregar todos os documentos, separados por vírgula, de um único arquivo monolítico.

Para realizar esse método, preparei um script pequeno, mas eficaz, que usa o analisador de fluxo YAJI JSON e o chamei de streamjsonload.

As opções para esse programa são:

Para carregar documentos com um arquivo JSON de teste, como fathers.json.txt, a partir de baixo, ele pode ser chamado da seguinte forma:

O script deve fornecer um resultado como o abaixo:

Uma grande vantagem de usar o analisador YAJI é que ele requer um consumo muito baixo de memória. Isso significa que você poderia paginar os dados de entrada e dividi-los em vários fluxos para carregar no couchbase. Ele gerará processos discretos, já que o Ruby é de thread único, mas outra linguagem também poderia ser usada para multi-threading. Um exemplo disso está no repositório Github do Couchbase Labs.

Alguns aspectos a serem observados, Essa ferramenta carrega apenas arquivos de documentos monolíticos, tentará criar um ID automaticamente se não for fornecido com '-d' e exigirá algum ajuste fino da "raiz" com -r se nenhum documento for carregado.

O código mais recente do carregador está disponível em meu site repositório do githubmas também o forneci em linha abaixo:

Finalização do trabalho

Depois que os dados tiverem sido carregados, faça login no console do Couchbase e comece a trabalhar com exibições de desenvolvimento para consultas e indexação.

Se estiver usando Couchbase Server 4.0 com N1QL você desejará criar um índice primário para poder explorar a interface semelhante ao SQL do Couchbase imediatamente e começar a aproveitar o poder da consulta N1QL por meio de nossos SDKs!

Muito obrigado às grandes pessoas da comunidade de código aberto por fornecerem a gem YAJL e a Sergey Avseyev pelo analisador YAJI. Sergey é um recurso do Couchbase muito experiente, responsável pelo trabalho do Ruby SDK, e eu também gostaria de incentivar qualquer um de vocês a experimentar nosso JRuby SDK e fornecer feedback.

Links:

Exemplos de CB Github - https://github.com/agonyou/cb-examples/
Analisador de fluxo YAJI - https://github.com/avsej/yaji
Gem YAJL JSON - https://github.com/brianmario/yajl-ruby
csv2json Gem - https://rubygems.org/gems/csv2json/
Couchbase Server 4 com N1QL - http://www.couchbase.com/nosql-databases/downloads

Compartilhe este artigo
Receba atualizações do blog do Couchbase em sua caixa de entrada
Esse campo é obrigatório.

Autor

Postado por Austin Gonyou, engenheiro de soluções, Couchbase

Austin Gonyou é engenheiro de soluções da Couchbase há 4 anos. Austin traz soluções técnicas sobre o servidor de banco de dados de documentos NoSQL Couchbase e conversas móveis facilitadas pela equipe de vendas interna, de nível médio e empresarial para nossos clientes potenciais e clientes.

3 Comentários

  1. Se eu executar \'./cbdocloader -u tito -p foobar -b test -n 192.168.1.4:8091 -s 1000 /Users/tito/Desktop/sample.zip \' e o arquivo de amostra contém uma matriz JSON com apenas dois documentos, todo o conteúdo do arquivo é importado como um documento. Em outras palavras, o cbdocloader parece não perceber que o documento é uma matriz de objetos JSON. Além disso, o editor mostra \'Warning: JSON não deve ser uma matriz\'. Como o cbdocloader deve funcionar? Obrigado.

    1. A propósito, se eu usar o exemplo de JSON encontrado em \'http://www.rubydoc.info/gems/c..., tenho o mesmo problema. Em ambos os casos, o conteúdo do arquivo é JSON válido. Parece que o cbdocloader não está cooperando :-/

  2. Bem montado, você também pode usar https://sqlify.io/convert/csv/to/json para converter em JSON e, em seguida, carregar os documentos normalmente, em vez de desenvolver seu próprio script.

Deixe um comentário

Pronto para começar a usar o Couchbase Capella?

Iniciar a construção

Confira nosso portal do desenvolvedor para explorar o NoSQL, procurar recursos e começar a usar os tutoriais.

Use o Capella gratuitamente

Comece a trabalhar com o Couchbase em apenas alguns cliques. O Capella DBaaS é a maneira mais fácil e rápida de começar.

Entre em contato

Deseja saber mais sobre as ofertas do Couchbase? Deixe-nos ajudar.