日本熟妇hd丰满老熟妇,中文字幕一区二区三区在线不卡 ,亚洲成片在线观看,免费女同在线一区二区

讀取數據

表格存儲提供了GetRow接口用于讀取單行數據以及BatchGetRow、GetRange等接口用于讀取多行數據。

如果需要了解表格存儲各場景的應用案例,請參見快速玩轉Tablestore入門與實戰

查詢方式

表格存儲提供的數據讀取接口包括GetRow、BatchGetRowGetRange。讀取數據時,請根據實際查詢場景使用相應查詢方式讀取數據。

重要

當要讀取帶有自增主鍵列的表數據時,請確保已獲取到包含自增主鍵列值在內的完整主鍵。更多信息,請參見主鍵列自增。如果未記錄自增主鍵列的值,您可以使用范圍讀取數據按照第一個主鍵列確定范圍讀取數據。

查詢方式

說明

適用場景

讀取單行數據

調用GetRow接口讀取一行數據。

適用于能確定完整主鍵且要讀取行數較少的場景。

批量讀取數據

調用BatchGetRow接口一次請求讀取多行數據或者一次對多張表進行讀取。

BatchGetRow操作由多個GetRow子操作組成,構造子操作的過程與使用GetRow接口時相同。

適用于能確定完整主鍵,且要讀取行數較多或者要讀取多個表中數據的場景。

范圍讀取數據

調用GetRange接口讀取一個范圍內的數據。

GetRange操作支持按照確定范圍進行正序讀取和逆序讀取,可以設置要讀取的行數。如果范圍較大,已掃描的行數或者數據量超過一定限制,會停止掃描,并返回已獲取的行和下一個主鍵信息。您可以根據返回的下一個主鍵信息,繼續發起請求,獲取范圍內剩余的行。

適用于能確定完整主鍵范圍或者主鍵前綴的場景。

重要

如果不能確定主鍵前綴,您也可以通過設置完整主鍵范圍均為虛擬點INF_MININF_MAX進行全表數據掃描,但是執行此操作會消耗較多計算資源,請謹慎使用。

前提條件

  • 已初始化Client,詳情請參見初始化
  • 已創建數據表并寫入數據。

讀取單行數據

調用GetRow接口讀取一行數據。讀取的結果可能有如下兩種:

  • 如果該行存在,則返回該行的各主鍵列以及屬性列。

  • 如果該行不存在,則返回中不包含行,并且不會報錯。

接口

/*
 * 根據給定的主鍵讀取單行數據。
 */
getRow(params, callback)

參數

參數

說明

tableName

數據表名稱。

primaryKey

行的主鍵。主鍵包括主鍵列名、主鍵類型和主鍵值。

重要

設置的主鍵個數和類型必須和數據表的主鍵個數和類型一致。

columnsToGet

讀取的列集合,列名可以是主鍵列或屬性列。

  • 如果不設置返回的列名,則返回整行數據。

  • 如果設置了返回的列名,當某行中指定的列均不存在時,則不返回該行,即返回值為null;當某行中存在部分指定的列時,則返回該行且只返回存在的列。

說明
  • 查詢一行數據時,默認返回此行所有列的數據。如果需要只返回特定列,可以通過設置columnsToGet參數限制。如果將col0col1加入到columnsToGet中,則只返回col0col1列的值。

  • columnsToGetcolumnFilter同時使用時,執行順序是先獲取columnsToGet指定的列,再在返回的列中進行條件過濾。

maxVersions

最多讀取的版本數。

重要

maxVersionstimeRange必須至少設置一個。

  • 如果僅設置maxVersions,則最多返回所有版本中從新到舊指定數量版本的數據。

  • 如果僅設置timeRange,則返回該范圍內所有數據或指定版本數據。

  • 如果同時設置maxVersionstimeRange,則最多返回版本號范圍內從新到舊指定數量版本的數據。

timeRange

讀取版本號范圍或特定版本號的數據。更多信息,請參見TimeRange

重要

maxVersionstimeRange必須至少設置一個。

  • 如果僅設置maxVersions,則最多返回所有版本中從新到舊指定數量版本的數據。

  • 如果僅設置timeRange,則返回該范圍內所有數據或指定版本數據。

  • 如果同時設置maxVersionstimeRange,則最多返回版本號范圍內從新到舊指定數量版本的數據。

  • 如果要查詢一個范圍的數據,則需要設置startTimeendTime。startTimeendTime分別表示起始時間戳和結束時間戳,范圍為前閉后開區間,即[startTime, endTime)

  • 如果要查詢特定版本號的數據,則需要設置specificTime。specificTime表示特定的時間戳。

specificTime[startTime, endTime)中只需要設置一個。

時間戳的單位為毫秒,最小值為0,最大值為Long.MAX_VALUE

columnFilter

使用過濾器,在服務端對讀取結果再進行一次過濾,只返回符合過濾器中條件的數據行。更多信息,請參見過濾器

說明

columnsToGetcolumnFilter同時使用時,執行順序是先獲取columnsToGet指定的列,再在返回的列中進行條件過濾。

示例

讀取一行數據。

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

var params = {
  tableName: "sampleTable",
  primaryKey: [{ 'gid': Long.fromNumber(20004) }, { 'uid': Long.fromNumber(20004) }],
  maxVersions: 2 //最多可讀取的版本數,設置為2即代表最多可讀取2個版本。
};
var condition = new TableStore.CompositeCondition(TableStore.LogicalOperator.AND);
condition.addSubCondition(new TableStore.SingleColumnCondition('name', 'john', TableStore.ComparatorType.EQUAL));
condition.addSubCondition(new TableStore.SingleColumnCondition('addr', 'china', TableStore.ComparatorType.EQUAL));

params.columnFilter = condition;

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

詳細代碼請參見GetRow@GitHub

批量讀取數據

調用BatchGetRow接口一次請求讀取多行數據,也支持一次對多張表進行讀取。BatchGetRow由多個GetRow子操作組成。構造子操作的過程與使用GetRow接口時相同。

BatchGetRow的各個子操作獨立執行,表格存儲會分別返回各個子操作的執行結果。

注意事項

  • 由于批量讀取可能存在部分行失敗的情況,失敗行的錯誤信息在返回的BatchGetRowResponse中,但并不拋出異常。因此調用BatchGetRow接口時,需要檢查返回值,判斷每行的狀態是否成功。

  • 批量讀取的所有行采用相同的參數條件,例如ColumnsToGet=[colA],表示要讀取的所有行都只讀取colA列。

  • BatchGetRow操作單次支持讀取的最大行數為100行。

接口

/**
 * 批量讀取一個或多個表中的若干行數據。
 */
batchGetRow(params, callback)  

參數

BatchGetRowGetRow的區別如下:

  • 增加了數據表的層級結構,可以一次讀取多個數據表的數據。

    tables以數據表為單位組織,后續為各個數據表的操作,設置了需要讀取的行信息。

  • primaryKey支持設置多行的主鍵,可以一次讀取多行數據。

    說明

    設置主鍵時,需要指定行數據的完整主鍵(包括主鍵名、主鍵類型和主鍵值),并確保對應主鍵在表中存在。如果表中不存在該主鍵,則返回結果中該主鍵對應行數據為空。

示例

批量一次讀取多個數據表中的數據,并在出錯時進行重試。

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

var params = {
    tables: [{
        tableName: 'sampleTable',
        primaryKey: [
            [{ 'gid': Long.fromNumber(20013) }, { 'uid': Long.fromNumber(20013) }],
            [{ 'gid': Long.fromNumber(20015) }, { 'uid': Long.fromNumber(20015) }]
        ],
        startColumn: "col2",
        endColumn: "col4"
    },
    {
        tableName: 'notExistTable',
        primaryKey: [
            [{ 'gid': Long.fromNumber(10001) }, { 'uid': Long.fromNumber(10001) }]
        ]
    }
    ],
};

var maxRetryTimes = 3;
var retryCount = 0;

function batchGetRow(params) {
    client.batchGetRow(params, function (err, data) {
        if (err) {
            console.log('error:', err);
            return;
        }

        var isAllSuccess = true;
        var retryRequest = { tables: [] };
        for (var i = 0; i < data.tables.length; i++) {
            var failedRequest = { tableName: data.tables[i][0].tableName, primaryKey: [] };

            for (var j = 0; j < data.tables[i].length; j++) {
                if (!data.tables[i][j].isOk && null != data.tables[i][j].primaryKey) {
                    isAllSuccess = false;
                    var pks = [];
                    for (var k in data.tables[i][j].primaryKey) {
                        var name = data.tables[i][j].primaryKey[k].name;
                        var value = data.tables[i][j].primaryKey[k].value;
                        var kp = {};
                        kp[name] = value;
                        pks.push(kp);
                    }
                    failedRequest.primaryKey.push(pks);

                } else {
                    // get success data
                }
            }

            if (failedRequest.primaryKey.length > 0) {
                retryRequest.tables.push(failedRequest);
            }
        }

        if (!isAllSuccess && retryCount++ < maxRetryTimes) {
            batchGetRow(retryRequest);
        }

        console.log('success:', data);
    });
}

batchGetRow(params, maxRetryTimes);                    

詳細代碼請參見BatchGetRow@GitHub

范圍讀取數據

調用GetRange接口讀取一個范圍內的數據。

GetRange操作支持按照確定范圍進行正序讀取和逆序讀取,可以設置要讀取的行數。如果范圍較大,已掃描的行數或者數據量超過一定限制,會停止掃描,并返回已獲取的行和下一個主鍵信息。您可以根據返回的下一個主鍵信息,繼續發起請求,獲取范圍內剩余的行。

說明

表格存儲表中的行都是按照主鍵排序的,而主鍵是由全部主鍵列按照順序組成的,所以不能理解為表格存儲會按照某列主鍵排序,這是常見的誤區。

注意事項

GetRange操作遵循最左匹配原則,讀取數據時,依次比較第一主鍵列到第四主鍵列。例如表的主鍵包括PK1、PK2、PK3三個主鍵列,讀取數據時,優先比較PK1是否在開始主鍵與結束主鍵的范圍內,如果PK1在設置的主鍵范圍內,則不會再比較其他的主鍵,返回在PK1主鍵范圍內的數據;如果PK1在設置的主鍵邊界上,則繼續比較PK2是否在開始主鍵與結束主鍵的范圍內,以此類推。關于范圍查詢原理的更多信息,請參見GetRange范圍查詢詳解

GetRange操作可能在如下情況停止執行并返回數據。

  • 掃描的行數據大小之和達到4 MB。

  • 掃描的行數等于5000。

  • 返回的行數等于最大返回行數。

  • 當前剩余的預留讀吞吐量已全部使用,余量不足以讀取下一條數據。

當使用GetRange掃描的數據量較大時,表格存儲每次請求僅會掃描一次(行數大于5000或者大小大于4 MB停止掃描),超過限制的數據不會繼續返回,需要通過翻頁繼續獲取后面的數據。

接口

/**
 * 讀取指定主鍵范圍內的數據。
 */
getRange(params, callback)                   

參數

參數

說明

tableName

數據表名稱。

direction

讀取方向。

  • 如果值為正序(FORWARD),則起始主鍵必須小于結束主鍵,返回的行按照主鍵由小到大的順序進行排列。

  • 如果值為逆序(BACKWARD),則起始主鍵必須大于結束主鍵,返回的行按照主鍵由大到小的順序進行排列。

假設同一表中有兩個主鍵AB,A小于B,如果正序讀取[A, B),則按從AB的順序返回主鍵大于等于A且小于B的行;如果逆序讀取[B, A),則按從BA的順序返回大于A且小于等于B的數據。

inclusiveStartPrimaryKey

本次范圍讀的起始主鍵和結束主鍵,起始主鍵和結束主鍵需要是有效的主鍵或者是由INF_MININF_MAX類型組成的虛擬點,虛擬點的列數必須與主鍵相同。

其中INF_MIN表示無限小,任何類型的值都比它大;INF_MAX表示無限大,任何類型的值都比它小。

  • inclusiveStartPrimaryKey表示起始主鍵,如果該行存在,則返回結果中一定會包含此行。

  • exclusiveEndPrimaryKey表示結束主鍵,無論該行是否存在,返回結果中都不會包含此行。

數據表中的行按主鍵從小到大排序,讀取范圍是一個左閉右開的區間,正序讀取時,返回的是大于等于起始主鍵且小于結束主鍵的所有的行。

exclusiveEndPrimaryKey

limit

數據的最大返回行數,此值必須大于0。

表格存儲按照正序或者逆序返回指定的最大返回行數后即結束該操作的執行,即使該區間內仍有未返回的數據。此時可以通過返回結果中的nextStartPrimaryKey記錄本次讀取到的位置,用于下一次讀取。

columnsToGet

讀取的列集合,列名可以是主鍵列或屬性列。

  • 如果不設置返回的列名,則返回整行數據。

  • 如果設置了返回的列名,當某行中指定的列均不存在時,則不返回該行,即返回值為null;當某行中存在部分指定的列時,則返回該行且只返回存在的列。

說明
  • 查詢一行數據時,默認返回此行所有列的數據。如果需要只返回特定列,可以通過設置columnsToGet參數限制。如果將col0col1加入到columnsToGet中,則只返回col0col1列的值。

  • 如果某行數據的主鍵屬于讀取范圍,但是該行數據不包含指定返回的列,那么返回結果中不包含該行數據。

  • columnsToGetcolumnFilter同時使用時,執行順序是先獲取columnsToGet指定的列,再在返回的列中進行條件過濾。

maxVersions

最多讀取的版本數。

重要

maxVersionstimeRange必須至少設置一個。

  • 如果僅設置maxVersions,則最多返回所有版本中從新到舊指定數量版本的數據。

  • 如果僅設置timeRange,則返回該范圍內所有數據或指定版本數據。

  • 如果同時設置maxVersionstimeRange,則最多返回版本號范圍內從新到舊指定數量版本的數據。

timeRange

讀取版本號范圍或特定版本號的數據。更多信息,請參見TimeRange

重要

maxVersionstimeRange必須至少設置一個。

  • 如果僅設置maxVersions,則最多返回所有版本中從新到舊指定數量版本的數據。

  • 如果僅設置timeRange,則返回該范圍內所有數據或指定版本數據。

  • 如果同時設置maxVersionstimeRange,則最多返回版本號范圍內從新到舊指定數量版本的數據。

  • 如果要查詢一個范圍的數據,則需要設置startTimeendTime。startTimeendTime分別表示起始時間戳和結束時間戳,范圍為前閉后開區間,即[startTime, endTime)

  • 如果要查詢特定版本號的數據,則需要設置specificTime。specificTime表示特定的時間戳。

specificTime[startTime, endTime)中只需要設置一個。

時間戳的單位為毫秒,最小值為0,最大值為Long.MAX_VALUE

columnFilter

使用過濾器,在服務端對讀取結果再進行一次過濾,只返回符合過濾器中條件的數據行。更多信息,請參見過濾器

說明

columnsToGetcolumnFilter同時使用時,執行順序是先獲取columnsToGet指定的列,再在返回的列中進行條件過濾。

nextStartPrimaryKey

根據返回結果中的nextStartPrimaryKey判斷數據是否全部讀取。

  • 當返回結果中nextStartPrimaryKey不為空時,可以使用此返回值作為下一次GetRange操作的起始點繼續讀取數據。

  • 當返回結果中nextStartPrimaryKey為空時,表示讀取范圍內的數據全部返回。

示例

按照范圍讀取數據。

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

var params = {
  tableName: "sampleTable",
  direction: TableStore.Direction.FORWARD,
  inclusiveStartPrimaryKey: [{ "gid": TableStore.INF_MIN }, { "uid": TableStore.INF_MIN }],
  exclusiveEndPrimaryKey: [{ "gid": TableStore.INF_MAX }, { "uid": TableStore.INF_MAX }],
  limit: 50
};

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

  //如果data.next_start_primary_key不為空,則繼續讀取。
  if (data.next_start_primary_key) {

  }

  console.log('success:', data);
});                  

詳細代碼請參見GetRange@GitHub