Dados mutáveis ​​no Rockset | Rockset


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.


Dados mutáveis ​​no Rockset | Rockset

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:

  1. 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.
  2. 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.
  3. 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:

  1. 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.
  2. 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 ou delete 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 o insert into choose declaração e a _op campo. Por exemplo, em vez de escrever delete 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 ao consumer)
  • 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), REPSERTand 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!



Deixe um comentário

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *