当前位置:   article > 正文

cassandra数据库入门-2_cassandra cql select

cassandra cql select

Cassandra的安装:

请参考博客:

本章介绍 Cassandra 查询语言 shell 并解释如何使用其命令。

默认情况下,Cassandra 提供了一个提示 Cassandra 查询语言 shell (cqlsh),允许用户与其进行通信。 使用此 shell,您可以执行 Cassandra 查询语言 (CQL)。

使用 cqlsh,您可以 定义模式,插入数据,和执行查询。

[hadoop@linux bin]$ cqlsh
Connected to Test Cluster at 127.0.0.1:9042.
[cqlsh 5.0.1 | Cassandra 2.1.2 | CQL spec 3.2.0 | Native protocol v3]
Use HELP for help.
cqlsh>

启动 cqlsh
使用命令 cqlsh 启动 cqlsh,如下所示。 它提供 Cassandra cqlsh 提示符作为输出。

Cqlsh 命令
Cqlsh 有一些允许用户与之交互的命令。 下面列出了这些命令。

记录的 Shell 命令
下面给出的是 Cqlsh 记录的 shell 命令。 这些是用于执行任务的命令,例如显示帮助主题、退出 cqlsh、描述等。

HELP - 显示所有 cqlsh 命令的帮助主题。

CAPTURE - 捕获命令的输出并将其添加到文件中。

CONSISTENCY - 显示当前的一致性级别,或设置新的一致性级别。

COPY - 将数据复制到 Cassandra 或从 Cassandra 复制数据。

DESCRIBE - 描述当前的 Cassandra 集群及其对象。

EXPAND - 垂直扩展查询的输出。

EXIT - 使用此命令,您可以终止 cqlsh。

PAGING - 启用或禁用查询分页。

SHOW - 显示当前 cqlsh 会话的详细信息,例如 Cassandra 版本、主机或数据类型假设。

SOURCE - 执行包含 CQL 语句的文件。

TRACING - 启用或禁用请求跟踪。

CQL 数据定义命令
CREATE KEYSPACE - 在 Cassandra 中创建一个 KeySpace。

USE - 连接到创建的 KeySpace。

ALTER KEYSPACE - 更改 KeySpace 的属性。

DROP KEYSPACE - 删除 KeySpace

CREATE TABLE - 在 KeySpace 中创建一个表。

ALTER TABLE - 修改表的列属性。

DROP TABLE - 删除一个表。

TRUNCATE - 从表中删除所有数据。

CREATE INDEX - 在表的单个列上定义新索引。

DROP INDEX - 删除命名索引。

CQL 数据操作命令
INSERT - 为表格中的一行添加列。

UPDATE - 更新一行的列。

DELETE - 从表中删除数据。

BATCH - 一次执行多个 DML 语句。

CQL条款
SELECT - 此子句从表中读取数据

WHERE - where 子句与 select 一起使用以读取特定数据。

ORDERBY - orderby 子句与 select 一起使用以按特定顺序读取特定数据。

除了 CQL 命令之外,Cassandra 还提供了文档化的 shell 命令。 下面给出的是 Cassandra 记录的 shell 命令。

Help

Capture

此命令捕获命令的输出并将其添加到文件中。 例如,查看以下将输出捕获到名为 Outputfile 的文件的代码。

cqlsh> CAPTURE '/home/hadoop/CassandraProgs/Outputfile'

当我们在终端中键入任何命令时,输出将被给定的文件捕获。 下面给出了使用的命令和输出文件的快照。

cqlsh:tutorialspoint> select * from emp;

 您可以使用以下命令关闭捕获。

cqlsh:tutorialspoint> capture off;

Consistency

此命令显示当前的一致性级别,或设置新的一致性级别。

cqlsh:tutorialspoint> CONSISTENCY
Current consistency level is 1.

Copy

此命令将数据复制到 Cassandra 或从 Cassandra 复制到文件。 下面给出了将名为 emp 的表复制到文件 myfile 的示例。

cqlsh:tutorialspoint> COPY emp (emp_id, emp_city, emp_name, emp_phone,emp_sal) TO ‘myfile’;
4 rows exported in 0.034 seconds.

Describe

此命令描述了当前的 Cassandra 集群及其对象。 下面解释了此命令的变体。

Describe cluster - 此命令提供有关集群的信息。

  1. cqlsh:tutorialspoint> describe cluster;
  2. Cluster: Test Cluster
  3. Partitioner: Murmur3Partitioner
  4. Range ownership:
  5. -658380912249644557 [127.0.0.1]
  6. -2833890865268921414 [127.0.0.1]
  7. -6792159006375935836 [127.0.0.1]

Describe Keyspaces −此命令列出集群中的所有键空间。 下面给出了这个命令的用法。

cqlsh:tutorialspoint> describe keyspaces;

system_traces system tp tutorialspoint

Describe tables −此命令列出键空间中的所有表。 下面给出了这个命令的用法。

cqlsh:tutorialspoint> describe tables;
emp

Describe table − 此命令提供表的描述。 下面给出了这个命令的用法。

  1. cqlsh:tutorialspoint> describe table emp;
  2. CREATE TABLE tutorialspoint.emp (
  3. emp_id int PRIMARY KEY,
  4. emp_city text,
  5. emp_name text,
  6. emp_phone varint,
  7. emp_sal varint
  8. ) WITH bloom_filter_fp_chance = 0.01
  9. AND caching = '{"keys":"ALL", "rows_per_partition":"NONE"}'
  10. AND comment = ''
  11. AND compaction = {'min_threshold': '4', 'class':
  12. 'org.apache.cassandra.db.compaction.SizeTieredCompactionStrategy',
  13. 'max_threshold': '32'}
  14. AND compression = {'sstable_compression':
  15. 'org.apache.cassandra.io.compress.LZ4Compressor'}
  16. AND dclocal_read_repair_chance = 0.1
  17. AND default_time_to_live = 0
  18. AND gc_grace_seconds = 864000
  19. AND max_index_interval = 2048
  20. AND memtable_flush_period_in_ms = 0
  21. AND min_index_interval = 128
  22. AND read_repair_chance = 0.0
  23. AND speculative_retry = '99.0PERCENTILE';
  24. CREATE INDEX emp_emp_sal_idx ON tutorialspoint.emp (emp_sal);

Describe Type

此命令用于描述用户定义的数据类型。 下面给出了这个命令的用法。

  1. cqlsh:tutorialspoint> describe type card_details;
  2. CREATE TYPE tutorialspoint.card_details (
  3. num int,
  4. pin int,
  5. name text,
  6. cvv int,
  7. phone set<int>,
  8. mail text
  9. );

Describe Types

此命令列出所有用户定义的数据类型。 下面给出了这个命令的用法。 假设有两种用户定义的数据类型:card 和 card_details。

cqlsh:tutorialspoint> DESCRIBE TYPES;

card_details card

Expand

该命令用于扩展输出。 在使用此命令之前,您必须打开扩展命令。 下面给出了这个命令的用法。

  1. cqlsh:tutorialspoint> expand on;
  2. cqlsh:tutorialspoint> select * from emp;
  3. @ Row 1
  4. -----------+------------
  5. emp_id | 1
  6. emp_city | Hyderabad
  7. emp_name | ram
  8. emp_phone | 9848022338
  9. emp_sal | 50000
  10. @ Row 2
  11. -----------+------------
  12. emp_id | 2
  13. emp_city | Delhi
  14. emp_name | robin
  15. emp_phone | 9848022339
  16. emp_sal | 50000
  17. @ Row 3
  18. -----------+------------
  19. emp_id | 4
  20. emp_city | Pune
  21. emp_name | rajeev
  22. emp_phone | 9848022331
  23. emp_sal | 30000
  24. @ Row 4
  25. -----------+------------
  26. emp_id | 3
  27. emp_city | Chennai
  28. emp_name | rahman
  29. emp_phone | 9848022330
  30. emp_sal | 50000
  31. (4 rows)

注意 - 您可以使用以下命令关闭扩展选项。

cqlsh:tutorialspoint> expand off;
Disabled Expanded output.

Exit

此命令用于终止 cql shell。

Show

此命令显示当前 cqlsh 会话的详细信息,例如 Cassandra 版本、主机或数据类型假设。 下面给出了这个命令的用法。

cqlsh:tutorialspoint> show host;
Connected to Test Cluster at 127.0.0.1:9042.

cqlsh:tutorialspoint> show version;
[cqlsh 5.0.1 | Cassandra 2.1.2 | CQL spec 3.2.0 | Native protocol v3]

Source

使用此命令,您可以执行文件中的命令。 假设我们的输入文件如下 −

您可以执行包含命令的文件,如下所示。

  1. cqlsh:tutorialspoint> source '/home/hadoop/CassandraProgs/inputfile';
  2. emp_id | emp_city | emp_name | emp_phone | emp_sal
  3. --------+-----------+----------+------------+---------
  4. 1 | Hyderabad | ram | 9848022338 | 50000
  5. 2 | Delhi | robin | 9848022339 | 50000
  6. 3 | Pune | rajeev | 9848022331 | 30000
  7. 4 | Chennai | rahman | 9848022330 | 50000
  8. (4 rows)

使用 Cqlsh 创建Keyspace


Cassandra 中的键空间是定义节点上数据复制的名称空间。 一个集群的每个节点包含一个键空间。 下面给出了使用 CREATE KEYSPACE 语句创建键空间的语法。

句法

CREATE KEYSPACE <identifier> WITH <properties>
  1. CREATE KEYSPACE “KeySpace Name”
  2. WITH replication = {'class': ‘Strategy name’, 'replication_factor' : ‘No.Of replicas’};
  3. CREATE KEYSPACE “KeySpace Name”
  4. WITH replication = {'class': ‘Strategy name’, 'replication_factor' : ‘No.Of replicas’}
  5. AND durable_writes =Boolean value’;

CREATE KEYSPACE 语句有两个属性:replication 和 durable_writes。

复制


复制选项用于指定副本放置策略和所需的副本数。 下表列出了所有副本放置策略。

策略名字描述
Simple Strategy'为集群指定一个简单的复制因子。
Network Topology Strategy使用此选项,您可以为每个数据中心独立设置复制因子。
Old Network Topology Strategy这是一个遗留的复制策略。

使用此选项,您可以指示 Cassandra 是否使用 commitlog 更新当前 KeySpace。 此选项不是强制性的,默认情况下,它设置为 true。

例子
下面给出了创建 KeySpace 的示例。

在这里,我们创建了一个名为 TutorialsPoint 的 KeySpace。

我们正在使用第一个副本放置策略,即 Simple Strategy。

我们选择复制因子为 1 个副本。

cqlsh.> CREATE KEYSPACE tutorialspoint
WITH replication = {'class':'SimpleStrategy', 'replication_factor' : 3};

确认
您可以使用 Describe 命令验证表是否已创建。 如果您在键空间上使用此命令,它将显示创建的所有键空间,如下所示。

cqlsh> DESCRIBE keyspaces;

tutorialspoint system system_traces 

持久写入
默认情况下,表的 durable_writes 属性设置为 true,但也可以设置为 false。 您不能将此属性设置为单纯形策略。

例子
下面给出的示例演示了持久写入属性的用法。

  1. cqlsh> CREATE KEYSPACE test
  2. WITH REPLICATION = { 'class' : 'NetworkTopologyStrategy', 'datacenter1' : 3 }
  3. AND DURABLE_WRITES = false;

确认
您可以通过查询 System Keyspace 来验证测试 KeySpace 的 durable_writes 属性是否设置为 false。 此查询为您提供所有 KeySpaces 及其属性。

  1. cqlsh> SELECT * FROM system_schema.keyspaces;
  2. keyspace_name | durable_writes | strategy_class | strategy_options
  3. ----------------+----------------+------------------------------------------------------+----------------------------
  4. test | False | org.apache.cassandra.locator.NetworkTopologyStrategy | {"datacenter1" : "3"}
  5. tutorialspoint | True | org.apache.cassandra.locator.SimpleStrategy | {"replication_factor" : "4"}
  6. system | True | org.apache.cassandra.locator.LocalStrategy | { }
  7. system_traces | True | org.apache.cassandra.locator.SimpleStrategy | {"replication_factor" : "2"}
  8. (4 rows)

在这里您可以观察到测试 KeySpace 的 durable_writes 属性被设置为 false。

使用键空间
您可以使用关键字 USE 使用创建的 KeySpace。 其语法如下 -

Syntax:USE <identifier>

例子
在以下示例中,我们使用 KeySpace  tutorialspoint。

cqlsh> USE tutorialspoint;
cqlsh:tutorialspoint>

使用Java API完成keyspace的创建

您可以使用 Session 类的 execute() 方法创建一个 Keyspace。 按照下面给出的步骤使用 Java API 创建密钥空间。

第一步:创建集群对象
首先,创建 com.datastax.driver.core 包的 Cluster.builder 类实例,如下所示。

//Creating Cluster.Builder object

Cluster.Builder builder1 = Cluster.builder();

使用 Cluster.Builder 对象的 addContactPoint() 方法添加一个联系点(节点的 IP 地址)。 此方法返回 Cluster.Builder。

//Adding contact point to the Cluster.Builder object

Cluster.Builder builder2 = build.addContactPoint( "127.0.0.1" );

使用新的构建器对象,创建一个集群对象。 为此,您在 Cluster.Builder 类中有一个名为 build() 的方法。 以下代码显示了如何创建集群对象。

//Building a cluster
Cluster cluster = builder.build();

您可以在一行代码中构建一个集群对象,如下所示。

Cluster cluster = Cluster.builder().addContactPoint("127.0.0.1").build();

第 2 步:创建会话对象
使用 Cluster 类的 connect() 方法创建 Session 对象的实例,如下所示。

Session session = cluster.connect( );

此方法创建一个新会话并对其进行初始化。 如果您已经有一个键空间,则可以通过将字符串格式的键空间名称传递给此方法来将其设置为现有键空间,如下所示。

Session session = cluster.connect(“ Your keyspace name ” );

第 3 步:执行查询
您可以使用 Session 类的 execute() 方法执行 CQL 查询。 将查询以字符串格式或作为 Statement 类对象传递给 execute() 方法。 无论您以字符串格式传递给此方法,都将在 cqlsh 上执行。

在此示例中,我们正在创建一个名为 tp 的 KeySpace。 我们使用第一个副本放置策略,即简单策略,我们选择复制因子为 1 个副本。

您必须将查询存储在字符串变量中并将其传递给 execute() 方法,如下所示。

  1. String query = "CREATE KEYSPACE tp WITH replication "
  2. + "= {'class':'SimpleStrategy', 'replication_factor':1}; ";
  3. session.execute(query);

第四步:使用KeySpace
您可以使用 execute() 方法使用创建的 KeySpace,如下所示。

execute(“ USE tp ” );

下面给出了使用 Java API 在 Cassandra 中创建和使用密钥空间的完整程序。

  1. import com.datastax.driver.core.Cluster;
  2. import com.datastax.driver.core.Session;
  3. public class Create_KeySpace {
  4. public static void main(String args[]){
  5. //Query
  6. String query = "CREATE KEYSPACE tp WITH replication "
  7. + "= {'class':'SimpleStrategy', 'replication_factor':1};";
  8. //creating Cluster object
  9. Cluster cluster = Cluster.builder().addContactPoint("127.0.0.1").build();
  10. //Creating Session object
  11. Session session = cluster.connect();
  12. //Executing the query
  13. session.execute(query);
  14. //using the KeySpace
  15. session.execute("USE tp");
  16. System.out.println("Keyspace created");
  17. }
  18. }

更改KeySpace
ALTER KEYSPACE 可用于更改属性,例如副本数和 KeySpace 的 durable_writes。 下面给出了此命令的语法。

ALTER KEYSPACE <identifier> WITH <properties>
例子
ALTER KEYSPACE “KeySpace Name”
WITH replication = {'class': ‘Strategy name’, 'replication_factor' : ‘No.Of  replicas’};

ALTER KEYSPACE 的属性与 CREATE KEYSPACE 相同。 它有两个属性:replication 和 durable_writes。

Replication
复制选项指定副本放置策略和所需的副本数。

Durable_writes
使用此选项,您可以指示 Cassandra 是否使用 commitlog 更新当前 KeySpace。 此选项不是强制性的,默认情况下,它设置为 true。

例子
下面给出的是更改 KeySpace 的示例。

在这里,我们正在更改一个名为 TutorialsPoint 的 KeySpace。

我们正在将复制因子从 1 更改为 3。

cqlsh.> ALTER KEYSPACE tutorialspoint
WITH replication = {'class':'NetworkTopologyStrategy', 'replication_factor' : 3};

修改 Durable_writes

您还可以更改 KeySpace 的 durable_writes 属性。 下面给出的是测试 KeySpace 的 durable_writes 属性。

  1. SELECT * FROM system.schema_keyspaces;
  2. keyspace_name | durable_writes | strategy_class | strategy_options
  3. ----------------+----------------+------------------------------------------------------+----------------------------
  4. test | False | org.apache.cassandra.locator.NetworkTopologyStrategy | {"datacenter1":"3"}
  5. tutorialspoint | True | org.apache.cassandra.locator.SimpleStrategy | {"replication_factor":"4"}
  6. system | True | org.apache.cassandra.locator.LocalStrategy | { }
  7. system_traces | True | org.apache.cassandra.locator.SimpleStrategy | {"replication_factor":"2"}
  8. (4 rows)
  1. ALTER KEYSPACE test
  2. WITH REPLICATION = {'class' : 'NetworkTopologyStrategy', 'datacenter1' : 3}
  3. AND DURABLE_WRITES = true;

再一次,如果您验证 KeySpaces 的属性,它将产生以下输出。

  1. SELECT * FROM system.schema_keyspaces;
  2. keyspace_name | durable_writes | strategy_class | strategy_options
  3. ----------------+----------------+------------------------------------------------------+----------------------------
  4. test | True | org.apache.cassandra.locator.NetworkTopologyStrategy | {"datacenter1":"3"}
  5. tutorialspoint | True | org.apache.cassandra.locator.SimpleStrategy | {"replication_factor":"4"}
  6. system | True | org.apache.cassandra.locator.LocalStrategy | { }
  7. system_traces | True | org.apache.cassandra.locator.SimpleStrategy | {"replication_factor":"2"}
  8. (4 rows)

使用Java修改 Keyspace 

您可以使用 Session 类的 execute() 方法更改键空间。 按照下面给出的步骤使用 Java API 更改密钥空间

您可以使用 Session 类的 execute() 方法执行 CQL 查询。 将查询以字符串格式或作为 Statement 类对象传递给 execute() 方法。 无论您以字符串格式传递给此方法,都将在 cqlsh 上执行。

在这个例子中,

我们正在改变一个名为 tp 的键空间。 我们正在将复制选项从简单策略更改为网络拓扑策略。

我们正在将 durable_writes 更改为 false

您必须将查询存储在字符串变量中并将其传递给 execute() 方法,如下所示。

//Query
String query = "ALTER KEYSPACE tp WITH replication " + "=   {'class':'NetworkTopologyStrategy', 'datacenter1':3}" +" AND DURABLE_WRITES = false;";
session.execute(query);

下面给出了使用 Java API 在 Cassandra 中创建和使用密钥空间的完整程序。

  1. import com.datastax.driver.core.Cluster;
  2. import com.datastax.driver.core.Session;
  3. public class Alter_KeySpace {
  4. public static void main(String args[]){
  5. //Query
  6. String query = "ALTER KEYSPACE tp WITH replication " + "= {'class':'NetworkTopologyStrategy', 'datacenter1':3}"
  7. + "AND DURABLE_WRITES = false;";
  8. //Creating Cluster object
  9. Cluster cluster = Cluster.builder().addContactPoint("127.0.0.1").build();
  10. //Creating Session object
  11. Session session = cluster.connect();
  12. //Executing the query
  13. session.execute(query);
  14. System.out.println("Keyspace altered");
  15. }
  16. }

删除键空间
您可以使用命令 DROP KEYSPACE 删除 KeySpace。 下面给出了删除 KeySpace 的语法。

句法

DROP KEYSPACE <identifier>
DROP KEYSPACE “KeySpace name”

使用 Java API 删除键空间


您可以使用 Session 类的 execute() 方法创建键空间。 按照下面给出的步骤使用 Java API 删除密钥空间。

您可以使用 Session 类的 execute() 方法执行 CQL 查询。 将查询以字符串格式或作为 Statement 类对象传递给 execute() 方法。 无论您以字符串格式传递给此方法,都将在 cqlsh 上执行。

在以下示例中,我们将删除名为 tp 的键空间。 您必须将查询存储在字符串变量中并将其传递给 execute() 方法,如下所示。

String query = "DROP KEYSPACE tp; ";

session.execute(query);

下面给出了使用 Java API 在 Cassandra 中创建和使用密钥空间的完整程序。

  1. import com.datastax.driver.core.Cluster;
  2. import com.datastax.driver.core.Session;
  3. public class Drop_KeySpace {
  4. public static void main(String args[]){
  5. //Query
  6. String query = "Drop KEYSPACE tp";
  7. //creating Cluster object
  8. Cluster cluster = Cluster.builder().addContactPoint("127.0.0.1").build();
  9. //Creating Session object
  10. Session session = cluster.connect();
  11. //Executing the query
  12. session.execute(query);
  13. System.out.println("Keyspace deleted");
  14. }
  15. }

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/2023面试高手/article/detail/126491?site
推荐阅读