Apache Cassandra数据库数据导入、查询与更新操作指南
1. partitionRead函数介绍
1.1 功能概述
partitionRead
函数用于从Apache Cassandra数据库表的分区中导入数据。不过需要注意的是,该函数在未来版本中将会被移除,建议使用Apache Cassandra® Database C++接口的
partitionRead
函数替代。
1.2 语法说明
-
results = partitionRead(conn,keyspace,tablename) -
results = partitionRead(conn,keyspace,tablename,keyValue1...keyValueN) -
results = partitionRead( ___ ,'ConsistencyLevel',level)
1.3 详细描述
-
results = partitionRead(conn,keyspace,tablename):通过读取Cassandra数据库表所有分区中的所有列,返回导入的数据。此函数无需使用Cassandra查询语言(CQL)查询,就能将Cassandra数据库中的数据导入到MATLAB中。 -
results = partitionRead(conn,keyspace,tablename,keyValue1...keyValueN):通过读取由分区键值指定的一个或多个分区中的所有Cassandra列,返回导入的数据。 -
results = partitionRead( ___ ,'ConsistencyLevel',level):设置一致性级别,用于指定函数从Cassandra数据库表读取数据时,必须响应的节点数量,可使用上述任意输入参数组合。
1.4 示例
1.4.1 从Cassandra数据库表导入数据
contactPoints = "localhost";
conn = cassandra(contactPoints);
keyspace = "employeedata";
tablename = "employees_by_job";
results = partitionRead(conn,keyspace,tablename);
head(results)
close(conn)
运行上述代码后,会显示返回的员工数据的前几行,结果如下:
ans=8×13 table
job_id hire_date employee_id commission_pct department_id email
__________ ___________ ___________ ______________ _____________ __________
"ST_CLERK" 08-Mar-2008 128 NaN 50 "SMARKLE"
"ST_CLERK" 06-Feb-2008 136 NaN 50 "HPHILTAN"
"ST_CLERK" 12-Dec-2007 135 NaN 50 "KGEE"
"ST_CLERK" 10-Apr-2007 132 NaN 50 "TJOLSON"
"ST_CLERK" 14-Jan-2007 127 NaN 50 "JLANDRY"
"ST_CLERK" 28-Sep-2006 126 NaN 50 "IMIKKILI"
"ST_CLERK" 26-Aug-2006 134 NaN 50 "MROGERS"
"ST_CLERK" 09-Jul-2006 144 NaN 50 "PVARGAS"
结果表包含以下变量:
-
job_id
:职位标识符
-
hire_date
:入职日期
-
employee_id
:员工标识符
-
commission_pct
:佣金百分比
-
department_id
:部门标识符
-
email
:电子邮件地址
-
first_name
:名字
-
last_name
:姓氏
-
manager_id
:经理标识符
-
office
:办公地点(包含建筑物和房间两个变量的表)
-
performance_ratings
:绩效评级
-
phone_number
:电话号码
-
salary
:工资
1.4.2 使用分区键值导入数据
contactPoints = "localhost";
conn = cassandra(contactPoints);
keyspace = "employeedata";
tablename = "employees_by_job";
keyValue = "IT_PROG";
results = partitionRead(conn,keyspace,tablename,keyValue);
results
close(conn)
运行上述代码后,会显示返回的员工数据,结果如下:
results=5×13 table
job_id hire_date employee_id commission_pct department_id email f
_________ ___________ ___________ ______________ _____________ __________ _
"IT_PROG" 21-May-2007 104 NaN 60 "BERNST" "
"IT_PROG" 07-Feb-2007 107 NaN 60 "DLORENTZ" "
"IT_PROG" 05-Feb-2006 106 NaN 60 "VPATABAL" "
"IT_PROG" 03-Jan-2006 103 NaN 60 "AHUNOLD" "
"IT_PROG" 25-Jun-2005 105 NaN 60 "DAUSTIN" "
1.4.3 使用多个分区键值导入数据
contactPoints = "localhost";
conn = cassandra(contactPoints);
keyspace = "employeedata";
tablename = "employees_by_name";
keyValue1 = ["Christopher","Alexander"];
keyValue2 = ["Olsen","Hunold"];
results = partitionRead(conn,keyspace,tablename,keyValue1,keyValue2);
results
close(conn)
运行上述代码后,会显示返回的两名员工的员工数据,结果如下:
results=2×13 table
first_name last_name hire_date employee_id commission_pct department_id
_____________ _________ ___________ ___________ ______________ _____________
"Alexander" "Hunold" 03-Jan-2006 103 NaN 60
"Christopher" "Olsen" 30-Mar-2006 153 0.2 80
1.4.4 使用一致性级别导入数据
contactPoints = "localhost";
conn = cassandra(contactPoints);
keyspace = "employeedata";
tablename = "employees_by_job";
keyValue = "IT_PROG";
level = "QUORUM";
results = partitionRead(conn,keyspace,tablename,keyValue, ...
'ConsistencyLevel',level);
results
close(conn)
运行上述代码后,会显示返回的员工数据,结果如下:
results=5×13 table
job_id hire_date employee_id commission_pct department_id email f
_________ ___________ ___________ ______________ _____________ __________ _
"IT_PROG" 21-May-2007 104 NaN 60 "BERNST" "
"IT_PROG" 07-Feb-2007 107 NaN 60 "DLORENTZ" "
"IT_PROG" 05-Feb-2006 106 NaN 60 "VPATABAL" "
"IT_PROG" 03-Jan-2006 103 NaN 60 "AHUNOLD" "
"IT_PROG" 25-Jun-2005 105 NaN 60 "DAUSTIN" "
1.5 输入参数
-
conn:Cassandra数据库连接,指定为cassandra对象。 -
keyspace:键空间,指定为字符向量或字符串标量。若不知道键空间,可使用点符号访问cassandra对象的Keyspaces属性,查看Cassandra数据库中的键空间。示例:"employeedata"。 -
tablename:Cassandra数据库表名,指定为字符向量或字符串标量。若不知道表名,可使用tablenames函数查找。示例:"employees_by_job"。 -
keyValue1...keyValueN:分区键值,可指定为以下数据类型之一: - 数值标量
- 数值数组
- 字符向量
- 字符向量的元胞数组
- 字符串标量
- 字符串数组
- 逻辑值
- 逻辑数组
- 日期时间数组
-
持续时间数组
若未指定keyValue1...keyValueN输入参数,则partitionRead函数将从Cassandra数据库表的所有分区导入数据(与CQL查询SELECT * FROM tablename相同)。
支持的Cassandra分区键及其对应的MATLAB有效数据类型如下表所示:
| Supported Cassandra Partition Key | MATLAB Valid Data Types for One Partition | MATLAB Valid Data Types for Multiple Partitions |
| — | — | — |
| ascii | 字符向量或字符串标量 | 字符向量的元胞数组或字符串数组 |
| bigint | 数值标量或逻辑标量 | 数值数组或逻辑数组 |
| blob | 数值数组 | 数值数组的元胞数组 |
| boolean | 数值标量或逻辑标量 | 数值数组或逻辑数组 |
| date | 日期时间数组、字符串标量或字符向量 | 日期时间数组、字符串数组或字符向量的元胞数组 |
| decimal | 数值标量、逻辑标量或
java.math.BigDecimal
标量 | 数值数组、逻辑数组或
java.math.BigDecimal
数组 |
| double | 数值标量或逻辑标量 | 数值数组或逻辑数组 |
| float | 数值标量或逻辑标量 | 数值数组或逻辑数组 |
| inet | 字符向量或字符串标量 | 字符向量的元胞数组或字符串数组 |
| int | 数值标量或逻辑标量 | 数值数组或逻辑数组 |
| smallint | 数值标量或逻辑标量 | 数值数组或逻辑数组 |
| text | 字符向量或字符串标量 | 字符向量的元胞数组或字符串数组 |
| time | 持续时间数组、字符串标量或字符向量 | 持续时间数组、字符串数组或字符向量的元胞数组 |
| timestamp | 日期时间数组、字符串标量或字符向量 | 日期时间数组、字符串数组或字符向量的元胞数组 |
| timeuuid | 字符向量或字符串标量 | 字符向量的元胞数组或字符串数组 |
| tinyint | 数值标量或逻辑标量 | 数值数组或逻辑数组 |
| uuid | 字符向量或字符串标量 | 字符向量的元胞数组或字符串数组 |
| varchar | 字符向量或字符串标量 | 字符向量的元胞数组或字符串数组 |
| varint | 数值标量、逻辑标量或
java.math.BigInteger
| 数值数组、逻辑数组或
java.math.BigInteger
数组 |
不支持的Cassandra分区键包括:
-
counter
-
list
-
map
-
set
-
tuple
- 用户定义类型(UDTs)
-
level:一致性级别,可指定为以下值之一:
| Consistency Level Value | Consistency Level Description |
| — | — |
| “ALL” | 当所有副本节点响应时返回查询结果。 |
| “QUORUM” | 当大多数副本节点响应时返回查询结果。 |
| “LOCAL_QUORUM” | 当本地数据中心的大多数副本节点响应时返回查询结果。 |
| “ONE”(默认) | 当一个副本节点响应时返回查询结果。 |
| “TWO” | 当两个副本节点响应时返回查询结果。 |
| “THREE” | 当三个副本节点响应时返回查询结果。 |
| “LOCAL_ONE” | 当本地数据中心的一个副本节点响应时返回查询结果。 |
| “SERIAL” | 返回任何数据中心的副本节点的当前(可能未提交)数据的查询结果。 |
| “LOCAL_SERIAL” | 返回本地数据中心的副本节点的当前(可能未提交)数据的查询结果。 |
可将一致性级别的值指定为字符向量或字符串标量。有关一致性级别的详细信息,请参阅“Configuring data consistency”。
1.6 输出参数
results
:导入的数据结果,作为表返回。该表包含与
keyValue1...keyValueN
输入参数对应的分区中的导入数据。分区中的每个Cassandra数据库列都成为表中的一个变量,变量名与指定分区中的Cassandra数据库列名匹配。表中变量的数据类型取决于Cassandra数据类型。有关CQL数据类型如何转换为MATLAB数据类型的详细信息,请参阅“Convert CQL Data Types to MATLAB Data Types”。
2. tablenames函数介绍
2.1 功能概述
tablenames
函数用于列出Apache Cassandra数据库中的数据库表名。同样,该函数在未来版本中将会被移除,建议使用Apache Cassandra® Database C++接口的
tablenames
函数替代。
2.2 语法说明
-
t = tablenames(conn) -
t = tablenames(conn,keyspace)
2.3 详细描述
-
t = tablenames(conn):返回一个列表,其中包含Cassandra数据库中Cassandra数据库表的名称及其对应的键空间。 -
t = tablenames(conn,keyspace):返回一个列表,其中包含Cassandra数据库中指定键空间中的Cassandra数据库表的名称。
2.4 示例
2.4.1 返回Cassandra数据库中的数据库表名
contactPoints = "localhost";
conn = cassandra(contactPoints);
t = tablenames(conn);
head(t)
close(conn)
运行上述代码后,会显示返回数据的前几行,结果如下:
ans=8×2 table
Keyspace Table
______________ __________________________
"employeedata" "employees_by_job"
"employeedata" "employees_by_id"
"employeedata" "employees_by_name"
"system" "built_views"
"system" "sstable_activity"
"system" "views_builds_in_progress"
"system" "compaction_history"
"system" "hints"
Keyspace
变量表示键空间,
Table
变量表示相应键空间中Cassandra数据库表的名称。
2.4.2 返回Cassandra数据库键空间中的数据库表名
contactPoints = "localhost";
conn = cassandra(contactPoints);
keyspace = "employeedata";
t = tablenames(conn,keyspace)
close(conn)
运行上述代码后,会显示返回的数据库表名,结果如下:
t = 3×1 string array
"employees_by_job"
"employees_by_id"
"employees_by_name"
2.5 输入参数
-
conn:Cassandra数据库连接,指定为cassandra对象。 -
keyspace:键空间,指定为字符向量或字符串标量。若不知道键空间,可使用点符号访问cassandra对象的Keyspaces属性,查看Cassandra数据库中的键空间。示例:"employeedata"。
2.6 输出参数
t
:Cassandra数据库中的数据库表名,指定为字符串数组或表。若在
keyspace
输入参数中指定了键空间,则
tablenames
函数将返回一个字符串数组,其中包含指定键空间中所有数据库表的名称。若未指定键空间,则
tablenames
函数将返回一个包含
Keyspace
和
Table
变量的表。
Keyspace
变量是一个字符串数组,包含Cassandra数据库中的所有键空间。
Table
变量是一个字符串数组,包含Cassandra数据库中相应键空间的所有数据库表的名称。
3. upsert函数介绍
3.1 功能概述
upsert
函数用于在Apache Cassandra数据库中插入或更新数据。该函数在未来版本中将会被移除,建议使用Apache Cassandra® Database C++接口的
upsert
函数替代。
3.2 语法说明
-
upsert(conn,keyspace,tablename,data) -
upsert(conn,keyspace,tablename,data,'ConsistencyLevel',level)
3.3 详细描述
-
upsert(conn,keyspace,tablename,data):通过将数据插入或更新到Apache Cassandra数据库表中,从MATLAB导出数据。 -
upsert(conn,keyspace,tablename,data,'ConsistencyLevel',level):为写操作设置一致性级别,指定函数将MATLAB数据导出到Cassandra数据库表时必须响应的节点数量。
3.4 示例
3.4.1 将MATLAB数据插入Cassandra数据库
contactPoints = "localhost";
conn = cassandra(contactPoints);
keyspace = "employeedata";
t = tablenames(conn,keyspace)
keyspace = "employeedata";
tablename = "employees_by_job";
results = partitionRead(conn,keyspace,tablename);
tail(results)
cols = columninfo(conn,keyspace,tablename);
cols(:,1:2)
varnames = ["job_id" "hire_date" "employee_id" ...
"commission_pct" "department_id" "email" "first_name" ...
"last_name" "manager_id" "office" "performance_ratings" ...
"phone_number" "salary"];
office = table("South",160, ...
'VariableNames',["building" "room"]);
data = table("IT_ADMIN",datetime('today'),301,0.25,30,"SMITH123", ...
"Alex","Smith",114,office,{[4 5]},"515.123.2345",3000);
data.Properties.VariableNames = varnames;
upsert(conn,keyspace,tablename,data)
keyValue = "IT_ADMIN";
results = partitionRead(conn,keyspace,tablename,keyValue)
close(conn)
运行上述代码后,会显示插入的数据,结果如下:
results=1×13 table
job_id hire_date employee_id commission_pct department_id email
__________ ___________ ___________ ______________ _____________ __________
"IT_ADMIN" 13-Mar-2019 301 0.25 30 "SMITH123"
3.4.2 使用一致性级别更新Cassandra数据库中的数据
contactPoints = "localhost";
conn = cassandra(contactPoints);
keyspace = "employeedata";
t = tablenames(conn,keyspace)
keyspace = "employeedata";
tablename = "employees_by_job";
results = partitionRead(conn,keyspace,tablename);
tail(results)
cols = columninfo(conn,keyspace,tablename);
cols(:,1:2)
keyValue = "MK_REP";
data = partitionRead(conn,keyspace,tablename,keyValue)
data.commission_pct = 0.25;
level = "QUORUM";
upsert(conn,keyspace,tablename,data,'ConsistencyLevel',level)
keyValue = "MK_REP";
results = partitionRead(conn,keyspace,tablename,keyValue)
close(conn)
运行上述代码后,会显示更新后的数据,结果如下:
results=1×13 table
job_id hire_date employee_id commission_pct department_id email first_
________ ___________ ___________ ______________ _____________ ______ ______
"MK_REP" 17-Aug-2005 202 0.25 20 "PFAY" "Pat
3.5 输入参数
-
conn:Cassandra数据库连接,指定为cassandra对象。 -
keyspace:键空间,指定为字符向量或字符串标量。若不知道键空间,可使用点符号访问cassandra对象的Keyspaces属性,查看Cassandra数据库中的键空间。示例:"employeedata"。 -
tablename:Cassandra数据库表名,指定为字符向量或字符串标量。若不知道表名,可使用tablenames函数查找。示例:"employees_by_job"。 -
data:要插入或更新的数据,指定为表。必须指定Cassandra数据库表的主键,但可以忽略其他Cassandra列。表中变量的名称必须与数据库表中Cassandra列的名称匹配,不区分大小写。表中变量的数据类型必须与Cassandra列的CQL数据类型兼容。有关详细信息,请参阅“Convert CQL Data Types to MATLAB Data Types”。 -
level:写操作的一致性级别,可指定为以下值之一:
| Consistency Level Value | Write Operation |
| — | — |
| “ALL” | 在所有副本节点上提交。 |
| “EACH_QUORUM” | 在每个数据中心的大多数副本节点上提交。 |
| “QUORUM” | 在大多数副本节点上提交。 |
| “LOCAL_QUORUM” | 在本地数据中心的大多数副本节点上提交。 |
| “ONE”(默认) | 在一个副本节点上提交。 |
| “TWO” | 在两个副本节点上提交。 |
| “THREE” | 在三个副本节点上提交。 |
| “LOCAL_ONE” | 在本地数据中心的一个副本节点上提交。 |
| “ANY” | 在至少一个副本节点上提交。 |
可将一致性级别的值指定为字符向量或字符串标量。有关一致性级别的详细信息,请参阅“Configuring data consistency”。
3.6 总结
通过上述介绍,我们了解了
partitionRead
、
tablenames
和
upsert
这三个函数的功能、语法、使用示例以及输入输出参数。这些函数为我们在MATLAB中与Apache Cassandra数据库进行交互提供了便利,能够帮助我们实现数据的导入、查询和更新操作。在使用这些函数时,需要注意它们在未来版本中将会被移除,建议使用相应的C++接口函数替代。同时,要根据具体需求合理设置输入参数,确保数据操作的准确性和一致性。
4. 函数使用流程总结
4.1 数据导入流程
当需要从Apache Cassandra数据库导入数据时,可以按照以下步骤进行:
1.
建立数据库连接
:使用
cassandra
函数创建与Cassandra数据库的连接。
contactPoints = "localhost";
conn = cassandra(contactPoints);
-
确定键空间和表名
:可以使用
tablenames函数查看数据库中的表名。
keyspace = "employeedata";
t = tablenames(conn,keyspace);
-
导入数据
:使用
partitionRead函数导入数据,可以根据需要指定分区键值和一致性级别。
tablename = "employees_by_job";
keyValue = "IT_PROG";
level = "QUORUM";
results = partitionRead(conn,keyspace,tablename,keyValue, 'ConsistencyLevel',level);
-
关闭数据库连接
:操作完成后,使用
close函数关闭连接。
close(conn);
4.2 数据插入或更新流程
当需要向Apache Cassandra数据库插入或更新数据时,可以按照以下步骤进行:
1.
建立数据库连接
:同数据导入流程的第一步。
contactPoints = "localhost";
conn = cassandra(contactPoints);
- 确定键空间和表名 :同数据导入流程的第二步。
keyspace = "employeedata";
t = tablenames(conn,keyspace);
- 准备数据 :将需要插入或更新的数据整理成表的形式。
varnames = ["job_id" "hire_date" "employee_id" ...
"commission_pct" "department_id" "email" "first_name" ...
"last_name" "manager_id" "office" "performance_ratings" ...
"phone_number" "salary"];
office = table("South",160, ...
'VariableNames',["building" "room"]);
data = table("IT_ADMIN",datetime('today'),301,0.25,30,"SMITH123", ...
"Alex","Smith",114,office,{[4 5]},"515.123.2345",3000);
data.Properties.VariableNames = varnames;
-
插入或更新数据
:使用
upsert函数插入或更新数据,可以根据需要指定一致性级别。
tablename = "employees_by_job";
level = "QUORUM";
upsert(conn,keyspace,tablename,data,'ConsistencyLevel',level);
- 关闭数据库连接 :同数据导入流程的第四步。
close(conn);
4.3 函数使用流程的mermaid流程图
graph LR
classDef startend fill:#F5EBFF,stroke:#BE8FED,stroke-width:2px;
classDef process fill:#E5F6FF,stroke:#73A6FF,stroke-width:2px;
classDef decision fill:#FFF6CC,stroke:#FFBC52,stroke-width:2px;
A([开始]):::startend --> B(建立数据库连接):::process
B --> C{操作类型}:::decision
C -->|导入数据| D(确定键空间和表名):::process
D --> E(导入数据):::process
E --> F(关闭数据库连接):::process
C -->|插入或更新数据| G(确定键空间和表名):::process
G --> H(准备数据):::process
H --> I(插入或更新数据):::process
I --> F
F --> J([结束]):::startend
5. 注意事项和常见问题
5.1 函数移除问题
需要注意的是,
partitionRead
、
tablenames
和
upsert
这三个函数在未来版本中将会被移除,建议使用Apache Cassandra® Database C++接口的相应函数替代。在开发新的应用程序时,尽量避免使用这些即将被移除的函数,以免在后续版本升级时出现兼容性问题。
5.2 输入参数问题
-
键空间和表名
:在使用这些函数时,键空间和表名必须准确无误。如果不知道键空间或表名,可以使用相应的函数进行查询。例如,使用
tablenames函数可以查看数据库中的表名。 - 分区键值 :分区键值的数据类型必须与Cassandra数据库中的分区键类型兼容。不同的分区键类型对应不同的MATLAB有效数据类型,具体可参考前面的表格。
- 一致性级别 :一致性级别会影响数据操作的性能和可靠性。在选择一致性级别时,需要根据具体的应用场景进行权衡。例如,如果对数据的实时性要求较高,可以选择较低的一致性级别;如果对数据的准确性要求较高,则需要选择较高的一致性级别。
5.3 数据类型转换问题
表中变量的数据类型必须与Cassandra列的CQL数据类型兼容。在进行数据插入或更新操作时,需要确保数据类型的一致性。有关CQL数据类型如何转换为MATLAB数据类型的详细信息,请参阅“Convert CQL Data Types to MATLAB Data Types”。
6. 总结
本文详细介绍了与Apache Cassandra数据库交互的三个重要函数:
partitionRead
、
tablenames
和
upsert
。通过这些函数,我们可以在MATLAB中方便地实现数据的导入、查询和更新操作。具体内容总结如下:
-
partitionRead
函数
:用于从Cassandra数据库表的分区中导入数据,可以指定分区键值和一致性级别。
-
tablenames
函数
:用于列出Cassandra数据库中的数据库表名,可以指定键空间。
-
upsert
函数
:用于在Cassandra数据库中插入或更新数据,可以指定一致性级别。
同时,我们还总结了函数的使用流程、注意事项和常见问题。在使用这些函数时,需要注意它们在未来版本中将会被移除,建议使用相应的C++接口函数替代。此外,要根据具体需求合理设置输入参数,确保数据操作的准确性和一致性。希望本文能够帮助读者更好地使用这些函数,实现与Apache Cassandra数据库的高效交互。
超级会员免费看
707

被折叠的 条评论
为什么被折叠?



