全部產品
Search
文件中心

Tablestore:使用二級索引讀取資料

更新時間:Jun 30, 2024

Tablestore提供了單行讀取和範圍讀取的查詢方式用於讀取索引表中資料。當返回的屬性列在索引表中時,您可以直接讀取索引表擷取資料,否則請自行反查資料表擷取資料。

前提條件

注意事項

  • 索引表只能用於讀取資料。

  • 本地二級索引表的第一列主鍵必須與資料表的第一列主鍵相同。

  • 當需要返回的屬性列不在索引表中時,您需要自行反查資料表來擷取資料。

單行讀取資料

調用GetRow介面讀取一行資料。更多資訊,請參見讀取單行資料

參數

使用GetRow介面讀取索引表中資料時有如下注意事項:

  • tableName需要設定為索引表名稱。

  • 由於系統會自動將未出現在索引列中的資料表主鍵補齊到索引表主鍵中,所以設定行的主鍵時,需要同時設定索引表索引列和補齊的資料表主鍵。

樣本

使用全域二級索引

以下樣本用於讀取全域二級索引表中指定主鍵的行資料。

var TableStore = require('./index.js');
var Long = TableStore.Long;
var client = require('./client');

var params = {
  //設定索引表名稱。
  tableName: "<INDEX_NAME>",  
  //設定索引表主鍵資訊。
  primaryKey: [{ 'col1': Long.fromNumber(2) }, { 'pk1': Long.fromNumber(2) }, { 'pk2': Long.fromNumber(1) }]
};

client.getRow(params, function (err, data) {
  if (err) {
    console.log('error:', err);
    return;
  }
  console.log('success:', JSON.stringify(data.row, null, 2));
});

使用本地二級索引

以下樣本用於讀取本地二級索引表中指定主鍵的行資料。

var TableStore = require('./index.js');
var Long = TableStore.Long;
var client = require('./client');

var params = {
  //設定索引表名稱。
  tableName: "<INDEX_NAME>", 
  //設定索引表主鍵資訊。索引表的第一列主鍵必須和資料表的第一列主鍵相同。
  primaryKey: [{ 'pk1': Long.fromNumber(1) }, { 'col1': Long.fromNumber(2) }, { 'pk2': Long.fromNumber(2) }]
};

client.getRow(params, function (err, data) {
  if (err) {
    console.log('error:', err);
    return;
  }
  console.log('success:', JSON.stringify(data.row, null, 2));
});

範圍讀取資料

調用GetRange介面讀取一個範圍內的資料。更多資訊,請參見範圍讀取資料

參數

使用GetRange介面讀取索引表中資料時有如下注意事項:

  • tableName需要設定為索引表名稱。

  • 由於系統會自動將未出現在索引列中的資料表主鍵補齊到索引表主鍵中,所以設定起始主鍵和結束主鍵時,需要同時設定索引表索引列和補齊的資料表主鍵。

樣本

使用全域二級索引

以下樣本用於讀取全域二級索引表中指定主鍵範圍內的資料。其中第一列主鍵col1的列值為1。

var TableStore = require('./index.js');
var Long = TableStore.Long;
var client = require('./client');

var params = {
  //設定索引表名稱。假定col1是索引表的第一個主鍵列。pk1和pk2是資料表的主鍵,系統會自動將資料表的主鍵補齊到索引表的主鍵中。
  tableName: "<INDEX_NAME>", 
  //設定讀取方向為正序讀取。
  direction: TableStore.Direction.FORWARD,
  //設定最大版本數。
  maxVersions: 10,
  //設定起始主鍵和結束主鍵。主鍵範圍為左閉右開的區間。其中INF_MIN表示無窮小,INF_MAX表示無窮大。
  inclusiveStartPrimaryKey: [{ "col1": Long.fromNumber(1) }, { "pk1": TableStore.INF_MIN }, { "pk2": TableStore.INF_MIN }],
  exclusiveEndPrimaryKey: [{ "col1": Long.fromNumber(1) }, { "pk1": TableStore.INF_MAX }, { "pk2": TableStore.INF_MAX }],
  //設定最多返回的資料行數。
  limit: 2
};

var resultRows = []

var getRange = function () {
  client.getRange(params, function (err, data) {
    if (err) {
      console.log('error:', err);
      return;
    }
    resultRows = resultRows.concat(data.rows)

    //如果data.next_start_primary_key不為空白,則繼續讀取資料。
    if (data.nextStartPrimaryKey) {
      params.inclusiveStartPrimaryKey = [
        { "col1": data.nextStartPrimaryKey[0].value },
        { "pk1": data.nextStartPrimaryKey[1].value },
        { "pk2": data.nextStartPrimaryKey[2].value }
      ];
      getRange()
    } else {
      console.log(JSON.stringify(resultRows));
    }
  });
}

getRange()

使用本地二級索引

以下樣本用於讀取本地二級索引表中的所有行資料。

var TableStore = require('./index.js');
var Long = TableStore.Long;
var client = require('./client');

var params = {
  //設定索引表名稱。假定pk1、col1是索引表的第主鍵列。pk2是資料表的主鍵,系統會自動將資料表的主鍵補齊到索引表的主鍵中。
  tableName: "<INDEX_NAMW>", 
  //設定讀取方向為正序讀取。
  direction: TableStore.Direction.FORWARD,
  //設定最大版本數。
  maxVersions: 10,
  //設定起始主鍵和結束主鍵。主鍵範圍為左閉右開的區間。其中INF_MIN表示無窮小,INF_MAX表示無窮大。
  inclusiveStartPrimaryKey: [{ "pk1": TableStore.INF_MIN }, { "col1": TableStore.INF_MIN }, { "pk2": TableStore.INF_MIN }],
  exclusiveEndPrimaryKey: [{ "pk1": TableStore.INF_MAX }, { "col1": TableStore.INF_MAX }, { "pk2": TableStore.INF_MAX }],
  //設定一次最多返回的資料行數。
  limit: 2
};

var resultRows = []

var getRange = function () {
  client.getRange(params, function (err, data) {
    if (err) {
      console.log('error:', err);
      return;
    }
    resultRows = resultRows.concat(data.rows)

    //如果data.next_start_primary_key不為空白,則繼續讀取資料。
    if (data.nextStartPrimaryKey) {
      params.inclusiveStartPrimaryKey = [
        { "pk1": data.nextStartPrimaryKey[0].value },
        { "col1": data.nextStartPrimaryKey[1].value },
        { "pk2": data.nextStartPrimaryKey[2].value }
      ];
      getRange()
    } else {
      console.log(JSON.stringify(resultRows));
    }
  });
}

getRange()

常見問題

相關文檔

  • 當日常業務中有非主鍵列查詢、多列組合查詢、模糊查詢等多維查詢需求以及求最值、統計行數、資料分組等資料分析需求時,您可以將這些屬性作為多元索引中的欄位並使用多元索引查詢與分析資料。 更多資訊,請參見多元索引

  • 如果需要使用SQL查詢和分析資料,您可以使用SQL查詢功能實現。更多資訊,請參見SQL查詢