Cassandra Linguagem de Consulta (CQL): Inserir, Atualizar e Excluir

โšก Resumo Inteligente

Cassandra A Linguagem de Consulta (QL) lida com operaรงรตes de inserรงรฃo, atualizaรงรฃo, exclusรฃo e leitura com uma sintaxe prรณxima ao SQL, mas com semรขntica diferente. Esta pรกgina aborda cada instruรงรฃo, o comportamento do upsert que combina inserรงรฃo e atualizaรงรฃo, e as reais limitaรงรตes da clรกusula WHERE.

  • โž• Inserir comportamento: Apenas a chave primรกria รฉ obrigatรณria, e as colunas omitidas nรฃo consomem espaรงo de armazenamento.
  • ๐Ÿ”„ Semรขntica de Upsert: Inserir e atualizar sรฃo a mesma operaรงรฃo, portanto, escrever uma chave existente a sobrescreve silenciosamente.
  • ๐Ÿ—‘๏ธ Custo da exclusรฃo: As fileiras removidas se transformam em lรกpides e desaparecem somente apรณs a compactaรงรฃo do solo.
  • ๐Ÿ” Clรกusula Where Limits: A filtragem funciona nas colunas da chave primรกria ou em outras colunas, desde que exista um รญndice.
  • ๐Ÿ“Š Suporte agregado: CONTAGEM, MรNIMO, MรXIMO, SOMA, AVG Os comandos GROUP BY e GROUP BY sรฃo suportados, embora apenas de forma eficiente dentro de uma รบnica partiรงรฃo.
  • ๐Ÿšซ Ainda sem suporte: Junรงรตes, condiรงรตes OR e anรกlises entre partiรงรตes permanecem fora do CQL por design.

Cassandra CQL Inserir, Atualizar e Excluir

Inserir dados

O Cassandra instruรงรฃo insert grava dados em Cassandra colunas em forma de linha. Cassandra A consulta de inserรงรฃo armazenarรก apenas as colunas fornecidas pelo usuรกrio. Vocรช deve necessariamente especificar apenas a coluna da chave primรกria.

Nรฃo ocuparรก nenhum espaรงo para valores nรฃo fornecidos. Nenhum resultado รฉ retornado apรณs a inserรงรฃo.

Sintaxe

INSERT INTO KeyspaceName.TableName (ColumnName1, ColumnName2, ColumnName3)
VALUES (Column1Value, Column2Value, Column3Value);

Exemplo

Aqui estรก o instantรขneo do executado Cassandra Inserir na consulta da tabela que irรก inserir um registro em Cassandra tabela 'Aluno'.

Inserir dados

INSERT INTO University.Student (RollNo, Name, dept, Semester)
VALUES (2, 'Michael', 'CS', 2);

Apรณs a execuรงรฃo bem-sucedida do comando Inserir em Cassandra, uma linha serรก inserida no Cassandra tabela Aluno com RollNo 2, Nome Michael, dept CS e Semestre 2.

Aqui estรก o instantรขneo do estado atual do banco de dados.

Inserir dados

Upsert Dados

Cassandra perturba. Upsert significa que Cassandra irรก inserir uma linha se uma chave primรกria ainda nรฃo existir; caso contrรกrio, se a chave primรกria jรก existir, ele atualizarรก essa linha.

Isso tem uma consequรชncia prรกtica que vale a pena mencionar claramente: um comando INSERT nunca reporta um erro de chave duplicada, portanto, uma reinserรงรฃo acidental sobrescreve a linha existente sem aviso prรฉvio. Quando isso precisa ser evitado, adicione um IF NOT EXISTS para tornar a instruรงรฃo uma transaรงรฃo leve.

INSERT INTO University.Student (RollNo, Name)
VALUES (2, 'Michael') IF NOT EXISTS;

Transaรงรตes leves utilizam uma rodada de consenso entre rรฉplicas, sendo consideravelmente mais lentas do que uma gravaรงรฃo normal e devem ser reservadas para casos que realmente necessitem da verificaรงรฃo.

Dados de atualizaรงรฃo

O Cassandra A consulta de atualizaรงรฃo รฉ usada para atualizar os dados no Cassandra mesa. Se nenhum resultado for retornado apรณs a atualizaรงรฃo dos dados, significa que os dados foram atualizados com sucesso, caso contrรกrio, um erro serรก retornado. Os valores das colunas sรฃo alterados na clรกusula 'Set' enquanto os dados sรฃo filtrados com a clรกusula 'Where'.

Sintaxe

UPDATE KeyspaceName.TableName
SET ColumnName1 = NewValue1,
    ColumnName2 = NewValue2
WHERE ColumnName = ColumnValue;

Exemplo

Aqui estรก a captura de tela que mostra o estado do banco de dados antes de atualizar os dados.

Dados de atualizaรงรฃo

Aqui estรก o instantรขneo do executado Cassandra Comando de atualizaรงรฃo que atualiza o registro na tabela Aluno.

Dados de atualizaรงรฃo

UPDATE University.Student
SET name = 'Hayden'
WHERE rollno = 1;

Apรณs a execuรงรฃo bem-sucedida da consulta de atualizaรงรฃo em Cassandra 'Atualizar Aluno', o nome do aluno serรก alterado de 'Clark' para 'Hayden' que possui rollno 1.

Aqui estรก a captura de tela que mostra o estado do banco de dados apรณs a atualizaรงรฃo dos dados.

Dados de atualizaรงรฃo

Devido ao comportamento do upsert, uma operaรงรฃo UPDATE em uma chave primรกria inexistente cria a linha em vez de falhar.

Cassandra Excluir dados

O comando 'Excluir' remove uma linha inteira ou algumas colunas da tabela Aluno. Quando os dados sรฃo excluรญdos, eles nรฃo sรฃo excluรญdos da tabela imediatamente. Em vez disso, os dados excluรญdos sรฃo marcados com uma lรกpide e removidos apรณs a compactaรงรฃo.

Sintaxe

DELETE FROM KeyspaceName.TableName
WHERE ColumnName1 = ColumnValue;

O referido Cassandra A sintaxe de exclusรฃo de linha excluirรก uma ou mais linhas, dependendo da filtragem de dados na clรกusula where.

DELETE ColumnName1, ColumnName2 FROM KeyspaceName.TableName
WHERE ColumnName1 = ColumnValue;

A sintaxe acima excluirรก algumas colunas da tabela.

Exemplo

Aqui estรก o instantรขneo que mostra o estado atual do banco de dados antes de excluir os dados.

Cassandra Excluir dados

Aqui estรก o instantรขneo do comando que removerรก uma linha da tabela Student.

Cassandra Excluir dados

DELETE FROM University.Student WHERE rollno = 1;

Apรณs a execuรงรฃo bem-sucedida do comando CQL Delete, uma linha serรก excluรญda da tabela Student onde o valor de rollno รฉ 1.

Aqui estรก o instantรขneo que mostra o estado do banco de dados apรณs a exclusรฃo dos dados.

Cassandra Excluir dados

Os marcadores de exclusรฃo (tombstones) permanecem ativos por um perรญodo definido em `gc_grace_seconds`, dez dias por padrรฃo, de forma que um nรณ offline durante a exclusรฃo nรฃo possa recuperar a linha quando retornar. Portanto, a exclusรฃo de grandes volumes deixa marcadores que cada leitura subsequente deve ignorar.

O quรช Cassandra nรฃo suporta

A CQL utiliza a sintaxe SQL, mas nรฃo o modelo de execuรงรฃo relacional, portanto, vรกrias construรงรตes familiares se comportam de maneira diferente ou estรฃo ausentes.

  1. CQL nรฃo suporta junรงรตes entre tabelas. Os dados relacionados devem ser desnormalizados em uma รบnica tabela no momento da gravaรงรฃo.
  2. A linguagem CQL nรฃo suporta condiรงรตes OR em uma clรกusula WHERE. Use IN em uma รบnica coluna ou execute consultas separadas.
  3. CQL nรฃo suporta UNION ou INTERSECT.
  4. Colunas que nรฃo sรฃo chaves primรกrias nรฃo podem ser filtradas atรฉ que exista um รญndice nelas.
  5. As comparaรงรตes "maior que" e "menor que" aplicam-se apenas a colunas de agrupamento, pois somente essas sรฃo classificadas no disco.
  6. A correspondรชncia de padrรตes com LIKE requer um รญndice SASI e nรฃo estรก disponรญvel em colunas comuns.

Uma afirmaรงรฃo antiga precisa ser corrigida. Funรงรตes agregadas sรฃo suportadas: CONTAR, MรNIMO, MรXIMO, SOMA e AVG chegou a Cassandra 2.2, e GROUP BY Chegou em 3.10. A ressalva รฉ o escopo, e nรฃo a disponibilidade.

SELECT dept, COUNT(*) FROM University.Student
WHERE RollNo = 1 GROUP BY dept;

Quando restrito a uma รบnica partiรงรฃo, como acima, um agregado รฉ eficiente. Executado em toda a tabela, ele se torna uma varredura em todo o cluster, e รฉ por isso que... Cassandra continua inadequado para anรกlises ad hoc e รฉ por isso que a geraรงรฃo de relatรณrios complexos รฉ normalmente direcionada para Spark ou um armazรฉm externo.

Cassandra Onde clรกusula

In Cassandra, a recuperaรงรฃo de dados รฉ uma questรฃo delicada. A coluna รฉ filtrada em Cassandra criando um รญndice em colunas de chave nรฃo primรกria.

Sintaxe

SELECT ColumnNames FROM KeyspaceName.TableName
WHERE ColumnName1 = Column1Value
  AND ColumnName2 = Column2Value;

Exemplo

  • Aqui estรก o instantรขneo que mostra a recuperaรงรฃo de dados da tabela Student sem filtragem de dados.

Cassandra Onde clรกusula

SELECT * FROM University.Student;

Dois registros sรฃo recuperados da tabela Student.

  • Aqui estรก o instantรขneo que mostra a recuperaรงรฃo de dados do Student com filtragem de dados. Um registro รฉ recuperado.

Os dados sรฃo filtrados pela coluna "nome". Todos os registros que possuem nome igual a sรฃo recuperados. Guru99.

Cassandra Onde clรกusula

SELECT * FROM University.Student WHERE name = 'Guru99';

As regras que regem quais colunas uma clรกusula WHERE pode referenciar decorrem diretamente da chave primรกria.

  • O chave de partiรงรฃo Deve ser fornecido na รญntegra para qualquer consulta eficiente, pois identifica o nรณ que contรฉm os dados.
  • Clustercolunas ing podem entรฃo ser restringidas, mas apenas na ordem em que foram declaradas.ping Uma delas foi rejeitada.
  • ร‰ permitida a comparaรงรฃo de intervalos na รบltima coluna de agrupamento referenciada, e nรฃo em colunas anteriores.
  • Qualquer outra coluna precisa de um รญndice secundรกrio, abordado no criar e excluir รญndice tutorial.

Quando uma consulta รฉ rejeitada, Cassandra Muitas vezes, sugere-se adicionar ALLOW FILTERING. Considere isso como um aviso, nรฃo como uma correรงรฃo: o comando verifica todas as partiรงรตes em todos os nรณs, e uma alteraรงรฃo no esquema รฉ quase sempre a resposta correta.

Perguntas Frequentes

Um lote agrupa instruรงรตes para que elas sejam executadas com sucesso ou falhem juntas. Use-o para manter tabelas duplicadas sincronizadas, nรฃo para carregamento em massa, onde um lote em vรกrias partiรงรตes torna o coordenador muito lento.

Os drivers paginam automaticamente usando um token de estado de paginaรงรฃo. No cqlsh, PAGING define o tamanho. Evite emular OFFSET com um contador, porque Cassandra nรฃo possui um mรฉtodo eficiente de pular linhasping mecanismo.

Se uma rรฉplica ficar inativa por mais tempo do que gc_grace_seconds e o bloco de memรณria jรก estiver compactado, essa rรฉplica ainda mantรฉm a linha antiga e a espalha novamente. O reparo regular impede isso.

Consultas simples em uma รบnica tabela sรฃo convertidas sem problemas. Qualquer operaรงรฃo com junรงรฃo, OR ou subconsulta nรฃo possui um equivalente direto em CQL, e a IA frequentemente mascara essa lacuna com ALLOW FILTERING, o que nรฃo รฉ uma soluรงรฃo.

Sim. Colando TRACA saรญda do comando ING ON geralmente fornece uma leitura clara de varreduras de lรกpides, partiรงรตes amplas ou saltos entre nรณs. Verifique a alteraรงรฃo de esquema sugerida em uma cรณpia antes de aplicรก-la.

Resuma esta postagem com: