📜  更新 Cassandra 中的 MAP 集合数据类型

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

在本文中,我们将讨论如何更新 MAP 集合数据类型以及如何更新行、如何删除行以及如何通过使用 UPDATE 子句更新地图集合数据类型来添加行。

首先,我们将创建一个表,让我们考虑 Food_menu 是表名,Order_id、Order_Date、Oreder_cost 和 Menu_items 是字段。我们来看一下。

Create Table Food_menu (
  Order_id Int Primary Key,
  Order_Date Date,
  Order_cost int,    
  Menu_items MAP
 ); 

现在,使用下面给出的以下 CQL 查询将一些数据插入表中。

INSERT INTO Food_menu (Order_id, Order_Date, Order_cost, Menu_items)
VALUES (2501, '2019-02-13', 800, {'fruit' : 'banana',  'juice' : 'Apple juice'});

INSERT INTO Food_menu (Order_id, Order_Date, Order_cost, Menu_items)
VALUES (2502, '2019-04-23', 200, {'fruit' : 'mango',  'juice' : 'mango juice'});

INSERT INTO Food_menu (Order_id, Order_Date, Order_cost, Menu_items)
VALUES (2503, '2019-02-13', 600, {'fruit' : 'papaya',  'juice' : 'papaya juice'}); 

现在,让我们看看上述 CQL 查询的输出。

select * 
from Food_menu; 

输出:

现在,在这里我们将看到如何更新 MAP,我们可以通过使用 (+)运算符以及我们想要添加的任何元素来附加 MAP 集合数据类型,然后在键对值中的 Curley 括号中添加字符串。
我们来看一下。

UPDATE Food_menu
SET Menu_items = Menu_items + {'Extra 10' : 'biscuits'} 
WHERE Order_id = 2501; 

让我们看看输出,

select * 
from Food_menu;

输出:

现在,在这里我们将看到如何使用 TTL 值更新 MAP 集合数据类型。

UPDATE Food_menu
USING TTL 259200
SET Menu_items['beverage'] = 'coffee' 
WHERE Order_id = 2502; 

让我们看看输出,
输出:

在 CQL 中,我们可以添加一个或多个以逗号分隔的元素来更新地图。我们来看一下。
例如,这也是 CQL 支持的一种直接方法,用于使用包含集合映射的 UPDATE 子句创建新行。

UPDATE Food_menu
SET Menu_items = Menu_items + {'Dry_fruit' : 'Almonds', 'cookies' : 'biscuits'} 
WHERE Order_id = 2503; 

让我们看看输出,

select * 
from Food_menu; 

输出:

在 Cassandra 查询语言 (CQL) 中,当我们在更新集合数据类型(如 set 和 map)中删除条目时,我们将用新集合替换元素或键值对,该集合为删除的条目创建墓碑,即使我们知道它们将是条目在新的地图集合或集合中。假设如果您的代码以这些方式更新所有映射和设置集合,那么它会生成许多可能影响系统性能的墓碑,更具体地说,我们可以说可能会减慢系统速度。