在本文中,我们将讨论物化视图的概述及其重要性。在 Cassandra 中,物化视图发挥着重要作用,因此物化视图适用于高基数数据。我们还讨论了如何创建、更改和删除物化视图。让我们一一讨论。
物化视图:
物化视图就像基表一样工作,它被定义为可以像基表一样查询的 CQL 查询。物化视图对于 Cassandra 查询语言中数据的反规范化非常重要,也有利于高基数和高性能。让我们通过一个例子来理解。
现在,首先我们要定义基表(基表 – User_information),User1 是键空间名称。 User_name 是分区键,我们将通过它以排序方式获得结果。物化视图将使用相同的主键,并且由于在物化视图中定义主键的限制,可以在物化视图中为主键添加另一列以获取用户信息。 User_name、User_email、User_password 和 User_address 是基表的列。我们来看一下。
要为用户信息创建表,请使用以下 CQL 查询。
CREATE TABLE User1.User_information (
User_name text PRIAMRY KEY,
User_email text,
User_password text,
User_address text
);
现在,让我们考虑一下,如果我们想在用户电子邮件的帮助下找到用户信息,那么我们需要创建一个新表,通过将电子邮件定义为分区键,我们可以获得用户信息,但我们还有另一个更好的选择,称为物化视图。
所以,现在让我们创建上面给定的表的实体化,也称为基表。要创建物化视图,请使用以下 CQL 查询。
语法:创建物化视图:
CREATE MATERIALIZED VIEW [IF NOT EXISTS] [keyspace_name.] view_name
AS SELECT column_list
FROM [keyspace_name.] base_table_name
WHERE column_name IS NOT NULL
[AND column_name IS NOT NULL ...]
[AND relation...]
PRIMARY KEY ( column_list )
[WITH [table_properties]
[AND CLUSTERING ORDER BY (cluster_column_name order_option )]]
语法来源
例子:
CREATE MATERIALIZED VIEW User1.Users_by_User_email AS
SELECT User_email, User_password, User_address
FROM User_information
WHERE User_name IS NOT NULL AND User_email IS NOT NULL
PRIMARY KEY (User_email, User_name );
要执行从物化视图读取数据的操作,请使用以下 CQL 查询。
SELECT *
FROM Users_by_User_email
WHERE User_email = ? ;
在物化视图中必须遵循以下限制。
- 在物化视图中,无论基表中的主列必须包含在物化视图表中,以确保 MV(物化视图)的每一行都对应于基表。
- 仅在物化视图中,我们可以再添加一个不是基表中主列的列。
让我们举个例子来理解这个概念。
CREATE TABLE base_table
(
Key1 int,
Col1 int,
Col2 int,
Col3 int,
Col4 text,
PRIAMRY KEY (key1, Col1, Col2)
);
允许上述给定基表的物化视图。我们来看一下。
Case-1:
CREATE MATERIALIZED VIEW test_MV1 AS
SELECT *
FROM test_MV1
WHERE key1 IS NOT NULL
AND Col1 IS NOT NULL
AND Col2 IS NOT NULL
PRIMARY KEY (Col1, key1, Col2);
Case-2:
CREATE MATERIALIZED VIEW test_MV2 AS
SELECT *
FROM test_MV2
WHERE key1 IS NOT NULL
AND Col1 IS NOT NULL
AND Col2 IS NOT NULL
AND Col3 IS NOT NULL
PRIMARY KEY (Col3, key1, Col1, Col2);
不允许上述给定基表的物化视图。我们来看一下。
Case-1:
CREATE MATERIALIZED VIEW test_MV1 AS
SELECT *
FROM test_MV2
WHERE key1 IS NOT NULL
AND Col1 IS NOT NULL
AND Col2 IS NOT NULL
AND Col3 IS NOT NULL
PRIMARY KEY (Col3, Col4, key1, Col1, Col2);
// * ERROR : it will give an error that Col3
and Col4 is not primary key in base table.
Case-2:
CREATE MATERIALIZED VIEW test_MV1 AS
SELECT *
FROM test_MV2
WHERE Col1 IS NOT NULL
AND Col2 IS NOT NULL
PRIMARY KEY (Col1, Col2);
// * ERROR : it will give an error that key1 is primary key
in base table that must contain in materialized view.
改变物化视图:
下面给出的是使用 ALTER 命令更改物化视图的基本属性的 CQL 查询。我们来看一下。
句法:
ALTER MATERIALIZED VIEW [keyspace_name.] view_name
[WITH table_options]
删除物化视图:
我们可以使用DROP命令删除物化视图表,不会对基表产生影响。
句法:
DROP MATERIALIZED VIEW [IF EXISTS] [keyspace_name.] view_name
例如,要删除物化视图,请使用以下 CQL 查询。
DROP MATERIALIZED VIEW User1.Users_by_User_email ;