簡體   English   中英

通過astyanax從組合鍵中檢索數據

[英]Retrieving data from composite key via astyanax

我對卡桑德拉(Cassandra)非常天真,並且正在使用astyanax

創建表員工(empID int,deptID int,first_name varchar,last_name varchar,PRIMARY KEY(empID,deptID));

我想獲取查詢的值:從empID = 2和deptID = 800的雇員中選擇*;

     public void read(Integer empID, String deptID) {
    OperationResult<ColumnList<String>> result;
    try {

        columnFamilies = ColumnFamily.newColumnFamily("employees", IntegerSerializer.get(), StringSerializer.get()); 
      result = keyspace.prepareQuery(columnFamilies).getKey(empID).execute();

      ColumnList<String> cols = result.getResult();
 //Other stuff

}

我應該如何做到這一點

據我所知,沒有超級干凈的方法可以做到這一點。 您必須通過執行cql查詢,然后遍歷各行來做到這一點。 此代碼取自astynax示例文件

public void read(int empId) {
  logger.debug("read()");
  try {
    OperationResult<CqlResult<Integer, String>> result
      = keyspace.prepareQuery(EMP_CF)
        .withCql(String.format("SELECT * FROM %s WHERE %s=%d;", EMP_CF_NAME, COL_NAME_EMPID, empId))
        .execute();
    for (Row<Integer, String> row : result.getResult().getRows()) {
      logger.debug("row: "+row.getKey()+","+row); // why is rowKey null?

      ColumnList<String> cols = row.getColumns();
      logger.debug("emp");
      logger.debug("- emp id: "+cols.getIntegerValue(COL_NAME_EMPID, null));
      logger.debug("- dept: "+cols.getIntegerValue(COL_NAME_DEPTID, null));
      logger.debug("- firstName: "+cols.getStringValue(COL_NAME_FIRST_NAME, null));
      logger.debug("- lastName: "+cols.getStringValue(COL_NAME_LAST_NAME, null));
    }
  } catch (ConnectionException e) {
    logger.error("failed to read from C*", e);
    throw new RuntimeException("failed to read from C*", e);
  }
}

您只需要調整cql查詢即可返回所需的內容。 這有點令人沮喪,因為根據文檔,您可以

Column<String> result = keyspace.prepareQuery(CF_COUNTER1)
    .getKey(rowKey)
    .getColumn("Column1")
    .execute().getResult();
Long counterValue = result.getLongValue();

但是我不知道是什么rowkey是。 我已經發布了一個關於行鍵可以是什么的問題 希望這會有所幫助

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM