使用 Amazon Keyspaces 中的CQLSELECT语句从表中读取数据 - Amazon Keyspaces(Apache Cassandra 兼容)

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

使用 Amazon Keyspaces 中的CQLSELECT语句从表中读取数据

在 Amazon Keyspaces 表中插入和加载数据一节中,您使用 SELECT 语句验证了已成功将数据添加到表中。在本节中,您可以细化使用 SELECT,以只显示特定列以及满足特定条件的行。

SELECT 语句的一般形式如下所示。

SELECT column_list FROM table_name [WHERE condition [ALLOW FILTERING]] ;

选择表中的所有数据

SELECT 语句最简单的形式是返回表中的所有数据。

重要

在生产环境中,运行此命令通常不是最佳实践,因为它会返回表中的所有数据。

选择表的所有数据
  1. 打开 AWS CloudShell 然后使用以下命令连接到 Amazon Keyspaces。请务必更新 us-east-1 使用您自己的区域。

    cqlsh-expansion cassandra.us-east-1.amazonaws.com 9142 --ssl
  2. 运行以下 查询。

    SELECT * FROM catalog.book_awards ;

    将通配符 (*) 用于 column_list 可选择所有列。该语句的输出类似于以下示例。

    year | award | category | rank | author | book_title | publisher ------+------------------+-------------+------+--------------------+-----------------------+--------------- 2020 | Wolf | Non-Fiction | 1 | Wang Xiulan | History of Ideas | AnyPublisher 2020 | Wolf | Non-Fiction | 2 | Ana Carolina Silva | Science Today | SomePublisher 2020 | Wolf | Non-Fiction | 3 | Shirley Rodriguez | The Future of Sea Ice | AnyPublisher 2020 | Kwesi Manu Prize | Fiction | 1 | Akua Mansa | Where did you go? | SomePublisher 2020 | Kwesi Manu Prize | Fiction | 2 | John Stiles | Yesterday | Example Books 2020 | Kwesi Manu Prize | Fiction | 3 | Nikki Wolf | Moving to the Chateau | AnyPublisher 2020 | Richard Roe | Fiction | 1 | Alejandro Rosalez | Long Summer | SomePublisher 2020 | Richard Roe | Fiction | 2 | Arnav Desai | The Key | Example Books 2020 | Richard Roe | Fiction | 3 | Mateo Jackson | Inside the Whale | AnyPublisher

选择列的子集

查询列的子集
  1. 打开 AWS CloudShell 然后使用以下命令连接到 Amazon Keyspaces。请务必更新 us-east-1 使用您自己的区域。

    cqlsh-expansion cassandra.us-east-1.amazonaws.com 9142 --ssl
  2. 要仅检索 awardcategoryyear 列,请运行以下查询。

    SELECT award, category, year FROM catalog.book_awards ;

    输出仅包含按SELECT语句中列出的顺序排列的指定列。

    award | category | year ------------------+-------------+------ Wolf | Non-Fiction | 2020 Wolf | Non-Fiction | 2020 Wolf | Non-Fiction | 2020 Kwesi Manu Prize | Fiction | 2020 Kwesi Manu Prize | Fiction | 2020 Kwesi Manu Prize | Fiction | 2020 Richard Roe | Fiction | 2020 Richard Roe | Fiction | 2020 Richard Roe | Fiction | 2020

选择行的子集

查询大型数据集时,您可能只需要满足特定条件的记录。为此,您可以在 SELECT 语句末尾追加一个 WHERE 子句。

查询行的子集
  1. 打开 AWS CloudShell 然后使用以下命令连接到 Amazon Keyspaces。请务必更新 us-east-1 使用您自己的区域。

    cqlsh-expansion cassandra.us-east-1.amazonaws.com 9142 --ssl
  2. 要仅检索给定年份的奖项记录,请运行以下查询。

    SELECT * FROM catalog.book_awards WHERE year=2020 AND award='Wolf' ;

    前面的SELECT语句返回以下输出。

    year | award | category | rank | author | book_title | publisher ------+-------+-------------+------+--------------------+-----------------------+--------------- 2020 | Wolf | Non-Fiction | 1 | Wang Xiulan | History of Ideas | AnyPublisher 2020 | Wolf | Non-Fiction | 2 | Ana Carolina Silva | Science Today | SomePublisher 2020 | Wolf | Non-Fiction | 3 | Shirley Rodriguez | The Future of Sea Ice | AnyPublisher

了解 WHERE 子句

WHERE 子句用于筛选数据,并仅返回满足指定条件的数据。指定的条件可以是简单条件或复合条件。

如何在 WHERE 子句中使用条件
  • 简单条件 – 单列

    WHERE column_name=value

    只要满足以下任何条件,便可以在 WHERE 子句中使用简单条件:

    • 该列是表中唯一的分区键列。

    • WHERE 子句中的条件后添加 ALLOW FILTERING

      请注意,使用 ALLOW FILTERING 可能会导致性能不稳定,特别是对于多分区的大型表。

  • 复合条件 – 通过 AND 连接的多个简单条件

    WHERE column_name1=value1 AND column_name2=value2 AND column_name3=value3...

    只要满足以下任何条件,便可以在 WHERE 子句中使用复合条件:

    • 可以在WHERE子句中使用的列需要包括表分区键中的所有列或列的子集。如果只想使用子WHERE句中列的子集,则必须从左到右包含一组连续的分区键列,从分区键的前导列开始。例如,如果分区键列为yearmonth、,award则可以在WHERE子句中使用以下列:

      • year

      • year AND month

      • year AND month AND award

    • WHERE 子句中的复合条件后添加 ALLOW FILTERING,如下例所示。

      SELECT * FROM my_table WHERE col1=5 AND col2='Bob' ALLOW FILTERING ;

      请注意,使用 ALLOW FILTERING 可能会导致性能不稳定,特别是对于多分区的大型表。

试试看

创建您自己的CQL查询,从您的book_awards表格中查找以下内容:

  • 查找 2020 年 Wolf 奖的获奖者,并按排名排序显示书名和作者。

  • 显示 2020 年所有奖项的一等奖得主,并显示书名和奖项名称。