MonetDB

MonetDB é um sistema de gerenciameno de banco de dados (SGDB) relacional colunar para consultas analiticas.

Objetivo

Documentar tutorias para trabalhar com o SGDB MonetDB

Dependências

  1. Monetdb, 11.49.1, SGDB colunar com processamento paralelo e distribuído

Instalação

Para instalar o MonetDB em sistemas baseados em debia, adicione o seguinte conteúdo ao arquivo /etc/apt/sources.list.d/monetdb.list substituindo a palavra suite com a versão em /etc/os-release

deb https://dev.monetdb.org/downloads/deb/ suite monetdb
deb-src https://dev.monetdb.org/downloads/deb/ suite monetdb

Adicione a chave gpg

sudo wget --output-document=/etc/apt/trusted.gpg.d/monetdb.gpg https://dev.monetdb.org/downloads/MonetDB-GPG-KEY.gpg
sudo apt-key finger
sudo apt update

Finalmente instale com

sudo apt install monetdb5-sql monetdb-client

Configuração de acesso

Caso queira definir um usuário padrão de acesso para não ter que colocar as credenciais toda vez que acessar o banco, crie na home o arquivo ~/.monetdb com o seguinte conteúdo:

user=monetdb
password=monetdb
host=localhost
language=sql

Server

Operações realizadas e mantidas pelo arquivo system do monetdbd, normalmente localizado em /usr/local/systemd/system/monetdbd.service

Localizar origem

É possível buscar a localização do server na coluna Command listando os processos em top ou htop. Exemplo:

/usr/local/bin/mserver5 --dbpath=/home/dbfarm/banco

Onde --dbpath monstra o caminho absoluto para o diretorio do banco.

Operações

~$: monetdbd create $directoryServer/
~$: monetdbd start $directoryServer/
~$: monetdbd stop $directoryServer/

Database

É possivel listar todos os bancos com o comando monetdb status onde é apresentado os seguintes estados: B - Booting R - Running S - Stopped C - Crashed L - Locked (Manutenção)

OBS: Ao se criar um banco, para acessá-lo deve retirá-lo do modo manutenção.
OBS: Para destruir um banco, primeiro ele deve ser parado.
OBS: Para parar um banco e alterar seus atributos, primeiro se deve colocá-lo em manutenção com lock e em seguida stop.

Operações

~$: monetdb status
~$: monetdb create  $database
~$: monetdb release $database # Remove banco de manutenção
~$: monetdb lock    $database # Coloca banco em manutenção
~$: monetdb stop    $database
~$: monetdb destroy $database

Configurações de FARM/BANCO

Para verificar ou alterar configurações de uma farm ou banco é possível utilizar monetdbd/monetdb com os parâmetros get e set:
OBS: Configurações como as de listenaddr precisam que a FARM inteira seja reiniciada. Apenas reiniciar o banco não é suficiente.

# Verifique a configuração
~$: monetdbd get all /var/monetdb5/dbfarm
~$: monetdb get nclients $database
~$: monetdb get all $database

# Pare o banco
~$: monetdb lock $database
~$: monetdb stop $database

# Altere
~$: monetdbd set listenaddr=0.0.0.0 /var/monetdb5/dbfarm    # !!!!! Reiniciar a FARM
~$: monetdb set nclients=100 $database  # Increase number of clients
~$: monetdb set listenaddr=0.0.0.0 $database # Permit extern connections

# Suba o banco ou reinicie a farm
~$: systemctl restart monetdbd
~$: monetdb release $database
~$: monetdb start $database

Executar SQL em bash

Para executar comandos SQL utilizando a ferramenta mclient é possivel utilizar tanto a própria query, quanto um arquivo SQL.

~$: mclient -d $database -s "SELECT * FROM table" 
~$: mclient -d $database < $file.sql

Importação/Exportação de CSV’s

Importar csv

Importar dados de um csv para tabela
OBS: USING DELIMITERS utiliza uma sequencia de parâmetros posicionais sendo o primeiro o caractere separador, o segundo de nova linha e o terceiro o de string.
Caso a string não seja especificada, haverá a inserção de quotes(”) no conteúdo.

sql> COPY INTO <table> FROM '/tmp/file.csv' USING DELIMITERS '|', E'\n', '"' NULL AS '';

Exportar CSV’s

Exportar apenas o esquema (arquivo com queries para recriar o banco)

sql> COPY <query> INTO '/tmp/file.csv' USING DELIMITERS '|' NULL AS '';
~$: msqldump -D -d <database> > monetdb_dump.sql        -- Exporta apenas a criação do esquema das tabelas

Exemplos

OBS: Caso não seja colocado a opção NULL AS o arquivo csv exportado possuirá a string null nos campos vazios.

sql> COPY INTO regiao FROM '/tmp/regiao.csv' USING DELIMITERS '|', E'\n', '"' NULL AS '';   --Importar dados
sql> COPY SELECT * FROM usuarios INTO '/tmp/users.csv' USING DELIMITERS '|' NULL AS '';     --Exportar dados

Estatística de dados

Monetdb armazena estatísticas a respeito dos dados na “tabela” storage().

sql> ANALYZE sys;                  -- Atualiza estatisticas
sql> SELECT * FROM storage();      -- Consulta todo o storage

Comandos úteis

Tabelas, colunas e linhas

sql> SELECT table, COUNT(table) AS columns_count, MAX(count) AS row_count FROM sys.storage GROUP BY table ORDER BY columns_count DESC, row_count DESC;