📜  Cassandra 中有用的 CQL 查询

📅  最后修改于: 2021-09-09 11:46:29             🧑  作者: Mango

先决条件 – 卡桑德拉
在本文中,我们将讨论 CQL 查询,它对创建、插入、删除、操作、过滤数据等非常有用。让我们讨论如何为这些操作编写更好的 CQL 查询。

Cassandra 查询语言 (CQL):
CQL 用于在 Cassandra 中创建、插入、操作数据。关于 CQL 需要注意的主要事情是它没有 GROUP 或 JOIN 的概念,并且 ORDER BY 的实现非常有限。

创建密钥空间

//keyspace with SimpleStrategy

create keyspace cluster1    
WITH replication = {'class': 'SimpleStrategy', 
                    'replication_factor' : 3};

//keyspace with NetworkTopologyStrategy

create keyspace cluster1
WITH replication = {'class': 'NetworkTopologyStrategy', 
                    'west' : 1, 'east' : 3}
AND durable_writes = false; 

现在,我们将在这里创建一个表 web_info,其中 url、user_id、net_location、visitor_info 是表的字段。
我们来看一下。

创建表:

CREATE TABLE web_info (
  url text,
  user_id uuid,
  net_location inet,
  visitor_info text,
  PRIMARY KEY (url, net_location)
) ; 

在表中插入行:
现在,我们将向表中插入一些数据。

Insert into web_info(url, user_id, net_location, visitor_info)
values('https://www.google.com', uuid(), '127.0.0.1', 'Ashish');   
 
Insert into web_info(url, user_id, net_location, visitor_info)
values('https://www.google.com', uuid(), '127.0.0.4', 'shivang');    
 
Insert into web_info(url, user_id, net_location, visitor_info)
values('https://www.yahoo.com', uuid(), '127.0.0.2', 'rana');

Insert into web_info(url, user_id, net_location, visitor_info)
values('https://www.geeksforgeeks.com', uuid(), '127.0.0.3', 'Ashish_rana'); 

现在,使用 LIMIT 选项验证特定行数的结果。

SELECT * 
FROM web_info LIMIT 3; 

输出:

允许过滤:
这个选项在 CQL 中非常有用,它具有服务器主动过滤结果的能力。

SELECT 与 ALLOW FILTERING 的用法:

SELECT *
FROM web_info
WHERE url='https://www.google.com'
AND net_location='127.0.0.1' AND visitor_info = 'Ashish'
ALLOW FILTERING; 

输出:

此示例显示 ALLOW FILTERING 如何在非分区列的 CQL 查询中工作。
我们来看一下。

SELECT *
FROM web_info
WHERE visitor_info = 'Ashish'
ALLOW FILTERING; 

输出:

为了验证插入数据到 web_info 表中的结果,使用下面给出的以下 CQL。

SELECT * 
FROM web_info; 

输出:

在这里,我们将展示 BATCH CQL 查询如何在 Cassandra 中发挥作用。在下面给出的示例中,我们只是展示了如何使用 BATCH 更新、删除和插入数据到表中。我们来看一下。

BEGIN BATCH
UPDATE web_info USING TTL 345600
SET visitor_info = 'Ashish rana'
WHERE url='https://www.google.com' and net_location = '127.0.0.1';


Delete visitor_info 
FROM web_info 
where url='https://www.google.com' and net_location = '127.0.0.1';
    
    
Insert into web_info(url, user_id, net_location, visitor_info)
values('https://www.geeksforgeeks.com', uuid(), '127.0.0.5', 'new_user');
APPLY BATCH; 

现在,使用下面给出的以下 CQL 查询来验证 BATCH 结果。

select * 
from web_info; 

输出:

要设置visitor_info 列,请使用下面给出的以下CQL 查询。

UPDATE web_info 
SET visitor_info = 'login at academy portal'
WHERE url='https://www.google.com' and net_location = '127.0.0.1'; 

现在,使用下面给出的以下 CQL 查询来验证结果。

select * 
from web_info; 

输出: