Cassandra DB-子列查询
我是Cassandra db的新手,尝试从下表中查询子列的名字,但失败得很惨。我可以查询直接列名,但不能查询其下的子列名 呼叫方信息表结构如下所示:Cassandra DB-子列查询,cassandra,data-modeling,cql,Cassandra,Data Modeling,Cql,我是Cassandra db的新手,尝试从下表中查询子列的名字,但失败得很惨。我可以查询直接列名,但不能查询其下的子列名 呼叫方信息表结构如下所示: 1. Unique ID 2. CustomerInfo {First Name, Middle Name, Last Name, Date of Birth, Sex} 请让我知道检索姓名、出生日期等详细信息的查询。要直接回答您的问题,请联系我们。根据您提供的信息,
1. Unique ID
2. CustomerInfo
{First Name,
Middle Name,
Last Name,
Date of Birth,
Sex}
请让我知道检索姓名、出生日期等详细信息的查询。要直接回答您的问题,请联系我们。根据您提供的信息,我将创建一个用户定义类型(UDT): 然后我将创建一个名为
callerInfo
的表:
aploetz@cqlsh:stackoverflow> CREATE TABLE callerInfo (
... customerID UUID,
... customerInfo frozen<info>,
... PRIMARY KEY customerID);
aploetz@cqlsh:stackoverflow> CREATE INDEX cinfo_idx ON callerInfo (customerInfo);
现在我将尝试在lastName
上查询:
aploetz@cqlsh:stackoverflow> SELECT * FROM callerInfo WHERE customerInfo={lastName:'Scott'};
(0 rows)
为什么不起作用?因为当前在UDT上实现了二级索引,我必须为所有组件指定条件
因此,这可能(也可能不)适用于您的用例。老实说,出于两个原因,我不会使用这种方法
CREATE TABLE callerInfoByLastName (
lastName TEXT,
firstName TEXT,
middleName TEXT,
customerID UUID,
dob TEXT,
sex TEXT,
PRIMARY KEY ((lastName),firstName,middleName,customerID));
现在,您可以按lastName
进行查询,并按firstName
和middleName
对数据进行排序(在每个lastName
中)customerID
添加到PK中以确保唯一性(如果您必须与同名的不同人员联系)。对于出生日期(dob),我将创建一个新的、类似的查询表,并在那里复制您的数据
aploetz@cqlsh:stackoverflow> SELECT * FROM callerInfo WHERE
customerInfo={firstName:'Michael', middlename:'Gary', lastname:'Scott', dob:'1964/03/15', sex:'M'};
customerid | customerinfo
--------------------------------------+--------------------------------------------------------------------------------------------
f1dea08f-5870-402d-82e1-ee9e215e0294 | {firstname: 'Michael', middlename: 'Gary', lastname: 'Scott', dob: '1964/03/15', sex: 'M'}
(1 rows)
CREATE TABLE callerInfoByLastName (
lastName TEXT,
firstName TEXT,
middleName TEXT,
customerID UUID,
dob TEXT,
sex TEXT,
PRIMARY KEY ((lastName),firstName,middleName,customerID));