Mutabilidade de dados é a capacidade de um banco de dados suportar mutações (atualizações e exclusões) nos dados armazenados nele. É um recurso crítico, especialmente em análises em tempo actual, onde os dados mudam constantemente e você precisa apresentar a versão mais recente desses dados aos seus clientes e usuários finais. Os dados podem chegar atrasados, podem estar fora de ordem, podem estar incompletos ou você pode ter um cenário em que precisa enriquecer e estender seus conjuntos de dados com informações adicionais para que eles fiquem completos. Em ambos os casos, a capacidade de alterar seus dados é muito importante.
Rockset é totalmente mutável
O Rockset é um banco de dados totalmente mutável. Ele suporta atualizações e exclusões frequentes no nível do documento e também é muito eficiente na execução de atualizações parciais, quando apenas alguns atributos (mesmo aqueles profundamente aninhados) em seus documentos foram alterados. Você pode ler mais sobre mutabilidade em análises em tempo actual e como o Rockset resolve isso aqui.
Ser totalmente mutável significa que problemas comuns, como atrasos na chegada de dados, dados duplicados ou incompletos, podem ser tratados com elegância e em escala dentro do Rockset.
Há três maneiras diferentes de alterar dados no Rockset:
- Você pode alterar dados no momento da ingestão por meio de Transformações de ingestão de SQLque atuam como uma estrutura ETL (Extract-Rework-Load) simples. Ao conectar suas fontes de dados ao Rockset, você pode usar SQL para manipular dados em andamento e filtrá-los, adicionar colunas derivadas, remover colunas, mascarar ou manipular informações pessoais usando funções SQL e assim por diante. As transformações podem ser feitas no nível da fonte de dados e no nível da coleção e esta é uma ótima maneira de colocar algum escrutínio em seus conjuntos de dados recebidos e fazer a aplicação do esquema quando necessário. Leia mais sobre este recurso e veja alguns exemplos aqui.
- Você pode atualizar e excluir seus dados através de dedicado Pontos de extremidade da API REST. Essa é uma ótima abordagem se você preferir acesso programático ou se tiver um processo personalizado que alimenta dados no Rockset.
- Você pode atualizar e excluir seus dados por executando consultas SQLcomo você normalmente faria com um banco de dados compatível com SQL. Isso é bem adequado para manipular dados em documentos únicos, mas também em conjuntos de documentos (ou mesmo em coleções inteiras).
Neste weblog, abordaremos um conjunto de etapas e exemplos muito práticos sobre como realizar mutações no Rockset por meio de consultas SQL.
Usando SQL para manipular seus dados no Rockset
Há dois conceitos importantes para entender sobre mutabilidade no Rockset:
- Cada documento que é ingerido recebe um
_id
atributo atribuído a ele. Este atributo atua como uma chave primária que identifica exclusivamente um documento dentro de uma coleção. Você pode fazer com que o Rockset gere este atributo automaticamente na ingestão, ou você mesmo pode fornecê-lo, seja diretamente na sua fonte de dados ou usando uma transformação de ingestão SQL. Leia mais sobre o_id
campo aqui. - Atualizações e exclusões no Rockset são tratadas de forma semelhante a um pipeline de CDC (Change Information Seize). Isso significa que você não executa uma ação direta
replace
oudelete
comando; em vez disso, você insere um registro com uma instrução para atualizar ou excluir um conjunto específico de documentos. Isso é feito com oinsert into choose
declaração e a_op
campo. Por exemplo, em vez de escreverdelete from my_collection the place id = '123'
você escreveria isto:insert into my_collection choose '123' as _id, 'DELETE' as _op
. Você pode ler mais sobre o_op
campo aqui.
Agora que você tem uma compreensão geral de como isso funciona, vamos nos aprofundar em exemplos concretos de mutação de dados no Rockset through SQL.
Exemplos de mutações de dados em SQL
Vamos imaginar um modelo de dados de comércio eletrônico onde temos um consumer
coleção com os seguintes atributos (nem todos mostrados para simplificar):
_id
identify
surname
e-mail
date_last_login
nation
Temos também um order
coleção:
_id
user_id
(referência aoconsumer
)order_date
total_amount
Usaremos esse modelo de dados em nossos exemplos.
Cenário 1 – Atualizar documentos
Em nosso primeiro cenário, queremos atualizar o e-mail de um usuário específico. Tradicionalmente, faríamos isso:
replace consumer
set e-mail="new_email@firm.com"
the place _id = '123';
É assim que você faria no Rockset:
insert into consumer
choose
'123' as _id,
'UPDATE' as _op,
'new_email@firm.com' as e-mail;
Isso atualizará o atributo de nível superior e-mail
com o novo e-mail do usuário 123
. Existem outros _op
comandos que também podem ser usados - como UPSERT
se você deseja inserir o documento caso ele não exista, ou REPLACE
para substituir o documento completo (com todos os atributos, incluindo atributos aninhados), REPSERT
and so on.
Você também pode fazer coisas mais complexas aqui, como realizar uma junção, incluir um the place
cláusula, e assim por diante.
Cenário 2 – Excluir documentos
Neste cenário, o usuário 123
está saindo da nossa plataforma e, portanto, precisamos excluir seu registro da coleção.
Tradicionalmente, faríamos isso:
delete from consumer
the place _id = '123';
No Rockset, faremos isso:
insert into consumer
choose
'123' as _id,
'DELETE' as _op;
Novamente, podemos fazer consultas mais complexas aqui e incluir junções e filtros. Caso precisemos excluir mais usuários, poderíamos fazer algo assim, graças ao suporte nativo de array no Rockset:
insert into consumer
choose
_id,
'DELETE' as _op
from
unnest(('123', '234', '345') as _id);
Se quiséssemos apagar todos os registros da coleção (semelhante a um TRUNCATE
comando), poderíamos fazer isso:
insert into consumer
choose
_id,
'DELETE' as _op
from
consumer;
Cenário 3 – Adicionar um novo atributo a uma coleção
Em nosso terceiro cenário, queremos adicionar um novo atributo ao nosso consumer
coleção. Adicionaremos uma fullname
atributo como uma combinação de identify
e surname
.
Tradicionalmente, precisaríamos fazer uma alter desk add column
e então incluir uma função para calcular o novo valor do campo ou primeiro padronizá-lo para null
ou string vazia e então faça um replace
declaração para preenchê-lo.
No Rockset, podemos fazer isso:
insert into consumer
choose
_id,
'UPDATE' as _op,
concat(identify, ' ', surname) as fullname
from
consumer;
Cenário 4 – Remover um atributo de uma coleção
No nosso quarto cenário, queremos remover o e-mail
atributo do nosso consumer
coleção.
Novamente, tradicionalmente isso seria um alter desk take away column
comando, e no Rockset, faremos o seguinte, aproveitando a operação REPSERT que substitui todo o documento:
insert into consumer
choose
*
besides(e-mail), --we are eradicating the e-mail atttribute
'REPSERT' as _op
from
consumer;
Cenário 5 – Criar uma visualização materializada
Neste exemplo, queremos criar uma nova coleção que atuará como uma visualização materializada. Esta nova coleção será um resumo de pedidos onde rastreamos o valor complete e a última knowledge do pedido no nível do país.
Primeiro, criaremos um novo order_summary
coleta – isso pode ser feito através do Criar API de coleção ou no console, escolhendo a fonte de dados Write API.
Então, podemos preencher nossa nova coleção assim:
insert into order_summary
with
orders_country as (
choose
u.nation,
o.total_amount,
o.order_date
from
consumer u inside be part of order o on u._id = o.user_id
)
choose
oc.nation as _id, --we are monitoring orders on nation stage so that is our main key
sum(oc.total_amount) as full_amount,
max(oc.order_date) as last_order_date
from
orders_country oc
group by
oc.nation;
Porque definimos explicitamente _id
campo, podemos suportar mutações futuras para esta nova coleção, e esta abordagem pode ser facilmente automatizada salvando sua consulta SQL como uma consulta lambda e, em seguida, criando um cronograma para executar a consulta periodicamente. Dessa forma, podemos ter nossa visualização materializada atualizada periodicamente, por exemplo, a cada minuto. Veja esse postagem do weblog para mais ideias sobre como fazer isso.
Conclusão
Como você pode ver nos exemplos deste weblog, o Rockset é um banco de dados de análise em tempo actual que é totalmente mutável. Você pode usar transformações de ingestão de SQL como uma estrutura de transformação de dados simples sobre seus dados de entrada, endpoints REST para atualizar e excluir seus documentos ou consultas SQL para executar mutações no nível de documento e coleção, como faria em um banco de dados relacional tradicional. Você pode alterar documentos completos ou apenas atributos relevantes, mesmo quando eles estão profundamente aninhados.
Esperamos que os exemplos no weblog sejam úteis. Agora vá em frente e altere alguns dados!