Cassandra - 讀取資料



使用 SELECT 語句讀取資料

SELECT 語句用於從 Cassandra 中的表讀取資料。使用此語句,您可以讀取整個表、單個列或特定單元格。以下是 SELECT 語句的語法。

SELECT FROM <tablename>

示例

假設在名為 emp 的 keyspace 中有一個表,包含以下詳細資訊:

emp_id emp_name emp_city emp_phone emp_sal
1 ram Hyderabad 9848022338 50000
2 robin null 9848022339 50000
3 rahman Chennai 9848022330 50000
4 rajeev Pune 9848022331 30000

以下示例顯示如何使用 SELECT 語句讀取整個表。這裡我們讀取名為 emp 的表。

cqlsh:tutorialspoint> select * from emp;

 emp_id |  emp_city | emp_name |  emp_phone | emp_sal
--------+-----------+----------+------------+---------
      1 | Hyderabad |   ram    | 9848022338 | 50000
      2 | null      |   robin  | 9848022339 | 50000
      3 | Chennai   |   rahman | 9848022330 | 50000
      4 | Pune      |   rajeev | 9848022331 | 30000
		
(4 rows)

讀取所需列

以下示例顯示如何讀取表中的特定列。

cqlsh:tutorialspoint> SELECT emp_name, emp_sal from emp;

 emp_name | emp_sal
----------+---------
      ram | 50000
    robin | 50000
   rajeev | 30000
   rahman | 50000 
	
(4 rows)

WHERE 子句

使用 WHERE 子句,您可以對所需列施加約束。其語法如下:

SELECT FROM <table name> WHERE <condition>;

注意 - WHERE 子句只能用於主鍵的一部分或在其上具有二級索引的列。

在以下示例中,我們讀取工資為 50000 的員工的詳細資訊。首先,為 emp_sal 列設定二級索引。

cqlsh:tutorialspoint> CREATE INDEX ON emp(emp_sal);
cqlsh:tutorialspoint> SELECT * FROM emp WHERE emp_sal=50000;

 emp_id |  emp_city | emp_name |  emp_phone | emp_sal
--------+-----------+----------+------------+---------
      1 | Hyderabad |      ram | 9848022338 | 50000
      2 |      null |    robin | 9848022339 | 50000
      3 |   Chennai |   rahman | 9848022330 | 50000

使用 Java API 讀取資料

您可以使用 Session 類的 execute() 方法從表中讀取資料。請按照以下步驟使用 Java API 透過批處理語句執行多個語句。

步驟 1:建立 Cluster 物件

如下所示,建立 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" );

使用新的 builder 物件,建立一個 cluster 物件。為此,您在 Cluster.Builder 類中有一個名為 build() 的方法。使用以下程式碼建立 cluster 物件。

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

您可以使用一行程式碼構建 cluster 物件,如下所示。

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

步驟 2:建立 Session 物件

如下所示,使用 Cluster 類的 connect() 方法建立 Session 物件的例項。

Session session = cluster.connect( );

此方法建立一個新會話並將其初始化。如果您已經有 keyspace,則可以透過將 KeySpace 名稱以字串格式傳遞給此方法來將其設定為現有 keyspace,如下所示。

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

這裡我們使用名為 tp 的 KeySpace。因此,建立會話物件如下所示。

Session session = cluster.connect(“tp”);

步驟 3:執行查詢

您可以使用 Session 類的 execute() 方法執行 CQL 查詢。將查詢以字串格式或作為 Statement 類物件傳遞給 execute() 方法。您以字串格式傳遞給此方法的任何內容都將在 cqlsh 上執行。

在此示例中,我們從 emp 表中檢索資料。將查詢儲存在字串中,並將其傳遞給 session 類的 execute() 方法,如下所示。

String query = ”SELECT 8 FROM emp”;
session.execute(query);

使用 Session 類的 execute() 方法執行查詢。

步驟 4:獲取 ResultSet 物件

select 查詢將以 ResultSet 物件的形式返回結果,因此將結果儲存在 RESULTSET 類的物件中,如下所示。

ResultSet result = session.execute( );

以下是從表讀取資料的完整程式。

import com.datastax.driver.core.Cluster;
import com.datastax.driver.core.ResultSet;
import com.datastax.driver.core.Session;

public class Read_Data {

   public static void main(String args[])throws Exception{
    
      //queries
      String query = "SELECT * FROM emp";

      //Creating Cluster object
      Cluster cluster = Cluster.builder().addContactPoint("127.0.0.1").build();
    
      //Creating Session object
      Session session = cluster.connect("tutorialspoint");
    
      //Getting the ResultSet
      ResultSet result = session.execute(query);
    
      System.out.println(result.all());
   }
}

將上述程式儲存為類名後跟 .java,瀏覽到儲存它的位置。編譯並執行程式,如下所示。

$javac Read_Data.java
$java Read_Data

在正常情況下,它應產生以下輸出:

[Row[1, Hyderabad, ram, 9848022338, 50000], Row[2, Delhi, robin,
9848022339, 50000], Row[4, Pune, rajeev, 9848022331, 30000], Row[3,
Chennai, rahman, 9848022330, 50000]]
廣告