表格存儲提供了單行讀取和范圍讀取的查詢方式用于讀取索引表中數據。當返回的屬性列在索引表中時,您可以直接讀取索引表獲取數據,否則請自行反查數據表獲取數據。
前提條件
已初始化Client。具體操作,請參見初始化OTSClient。
已創建二級索引。具體操作,請參見創建二級索引。
注意事項
索引表只能用于讀取數據。
當需要返回的屬性列不在索引表中時,您需要自行反查數據表來獲取數據。
單行讀取數據
調用GetRow接口讀取一行數據。更多信息,請參見讀取單行數據。
參數
使用GetRow接口讀取索引表中數據時有如下注意事項:
tableName需要設置為索引表名稱。
由于系統會自動將未出現在索引列中的數據表主鍵補齊到索引表主鍵中,所以設置行的主鍵時,需要同時設置索引表索引列和補齊的數據表主鍵。
示例
以下示例用于讀取索引表中指定主鍵的行數據。
public static void GetRowfromIndex()
{
OTSClient otsClient = Config.GetClient();
//構造主鍵。構造主鍵時必須帶上補齊到索引表中的數據表主鍵。
PrimaryKey primaryKey = new PrimaryKey
{
{ "col0", new ColumnValue(0) },
{ "pk1", new ColumnValue(0) },
{ "pk2", new ColumnValue("abc") }
};
try
{
//構造查詢請求對象,此處未指定讀取的列,默認讀取整行數據。
var request = new GetRowRequest(IndexName, primaryKey);
//調用GetRow接口查詢數據。
var response = otsClient.GetRow(request);
Console.WriteLine("Primary Key: " + response.PrimaryKey);
Console.WriteLine("Attribute Column: " + response.Columns[0]);
//如果沒有拋出異常,則說明執行成功。
Console.WriteLine("Get row succeeded.");
}
catch (Exception ex)
{
//如果拋出異常,則說明執行失敗,處理異常。
Console.WriteLine("Get row failed, exception:{0}", ex.Message);
}
}
范圍讀取數據
調用GetRange接口讀取一個范圍內的數據。更多信息,請參見范圍讀取數據。
參數
使用GetRange接口讀取索引表中數據時有如下注意事項:
tableName需要設置為索引表名稱。
由于系統會自動將未出現在索引列中的數據表主鍵補齊到索引表主鍵中,所以設置起始主鍵和結束主鍵時,需要同時設置索引表索引列和補齊的數據表主鍵。
示例
以下示例用于讀取索引表中指定主鍵范圍內的數據。其中第一列主鍵col1的列值為0。
public static void GetRangeFromIndexTable()
{
Console.WriteLine("Start getRange from index...");
OTSClient otsClient = Config.GetClient();
//指定第一主鍵Col1的值,進行掃描。
PrimaryKey inclusiveStartPrimaryKey = new PrimaryKey
{
{ "col1", new ColumnValue(0) },
{ "pk1", ColumnValue.INF_MIN },
{ "pk2", ColumnValue.INF_MIN }
};
PrimaryKey exclusiveEndPrimaryKey = new PrimaryKey
{
{ "col1", new ColumnValue(0) },
{ "pk1", ColumnValue.INF_MAX },
{ "pk2", ColumnValue.INF_MAX }
};
GetRangeRequest request = new GetRangeRequest(IndexName, GetRangeDirection.Forward, inclusiveStartPrimaryKey, exclusiveEndPrimaryKey);
GetRangeResponse response = otsClient.GetRange(request);
IList<Row> rows = response.RowDataList;
PrimaryKey nextStartPrimaryKey = response.NextPrimaryKey;
while (nextStartPrimaryKey != null)
{
request = new GetRangeRequest(TableName, GetRangeDirection.Forward, nextStartPrimaryKey, exclusiveEndPrimaryKey);
response = otsClient.GetRange(request);
nextStartPrimaryKey = response.NextPrimaryKey;
foreach (var row in response.RowDataList)
{
rows.Add(row);
}
}
foreach (var row in rows)
{
PrintRow(row);
}
Console.WriteLine("TotalRowsRead: " + rows.Count);
}
private static void PrintRow(Row row)
{
Console.WriteLine("-----------------");
foreach (KeyValuePair<string, ColumnValue> entry in row.GetPrimaryKey())
{
Console.WriteLine(entry.Key + ":" + entry.Value);
}
foreach (Column entry in row.GetColumns())
{
Console.WriteLine(entry.Name + ":" + entry.Value);
}
Console.WriteLine("-----------------");
}
常見問題
相關文檔
文檔內容是否對您有幫助?