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

使用二級(jí)索引讀取數(shù)據(jù)

更新時(shí)間:

表格存儲(chǔ)提供了單行讀取和范圍讀取的查詢(xún)方式用于讀取索引表中數(shù)據(jù)。當(dāng)返回的屬性列在索引表中時(shí),您可以直接讀取索引表獲取數(shù)據(jù),否則請(qǐng)自行反查數(shù)據(jù)表獲取數(shù)據(jù)。

前提條件

注意事項(xiàng)

  • 索引表只能用于讀取數(shù)據(jù)。

  • 本地二級(jí)索引表的第一列主鍵必須與數(shù)據(jù)表的第一列主鍵相同。

  • 當(dāng)需要返回的屬性列不在索引表中時(shí),您需要自行反查數(shù)據(jù)表來(lái)獲取數(shù)據(jù)。

單行讀取數(shù)據(jù)

調(diào)用GetRow接口讀取一行數(shù)據(jù)。更多信息,請(qǐng)參見(jiàn)讀取單行數(shù)據(jù)

參數(shù)

使用GetRow接口讀取索引表中數(shù)據(jù)時(shí)有如下注意事項(xiàng):

  • TableName需要設(shè)置為索引表名稱(chēng)。

  • 由于系統(tǒng)會(huì)自動(dòng)將未出現(xiàn)在索引列中的數(shù)據(jù)表主鍵補(bǔ)齊到索引表主鍵中,所以設(shè)置行的主鍵時(shí),需要同時(shí)設(shè)置索引表索引列和補(bǔ)齊的數(shù)據(jù)表主鍵。

示例

以下示例用于讀取索引表中指定主鍵的行數(shù)據(jù)。

func GetRowFromIndex(client *tablestore.TableStoreClient, indexName string) {
    getRowRequest := new(tablestore.GetRowRequest)
    criteria := new(tablestore.SingleRowQueryCriteria);
    //構(gòu)造主鍵。如果讀取本地二級(jí)索引中的數(shù)據(jù),索引表的第一列主鍵必須與數(shù)據(jù)表的第一列主鍵相同。
    putPk := new(tablestore.PrimaryKey)
    putPk.AddPrimaryKeyColumn("definedcol1", "value1")
    putPk.AddPrimaryKeyColumn("pk1", int64(2))
    putPk.AddPrimaryKeyColumn("pk2", []byte("pk2"))
    criteria.PrimaryKey = putPk
  
    getRowRequest.SingleRowQueryCriteria = criteria
    getRowRequest.SingleRowQueryCriteria.TableName = indexName 
    getRowRequest.SingleRowQueryCriteria.MaxVersion = 1  
    getResp, err := client.GetRow(getRowRequest)
    if err != nil {
        fmt.Println("getrow failed with error:", err)
    } else {
        fmt.Println("get row", getResp.Columns[0].ColumnName,"result is ", getResp.Columns[0].Value,)
    }                   
}

范圍讀取數(shù)據(jù)

調(diào)用GetRange接口讀取一個(gè)范圍內(nèi)的數(shù)據(jù)。更多信息,請(qǐng)參見(jiàn)范圍讀取數(shù)據(jù)

參數(shù)

使用GetRange接口讀取索引表中數(shù)據(jù)時(shí)有如下注意事項(xiàng):

  • TableName需要設(shè)置為索引表名稱(chēng)。

  • 由于系統(tǒng)會(huì)自動(dòng)將未出現(xiàn)在索引列中的數(shù)據(jù)表主鍵補(bǔ)齊到索引表主鍵中,所以設(shè)置起始主鍵和結(jié)束主鍵時(shí),需要同時(shí)設(shè)置索引表索引列和補(bǔ)齊的數(shù)據(jù)表主鍵。

示例

使用全局二級(jí)索引

以下示例用于讀取全局二級(jí)索引表中指定主鍵范圍內(nèi)的數(shù)據(jù)。其中第一列主鍵definedcol1列值為value1。

func GetRangeFromGlobalIndex(client *tablestore.TableStoreClient, indexName string) {
    getRangeRequest := &tablestore.GetRangeRequest{}
    rangeRowQueryCriteria := &tablestore.RangeRowQueryCriteria{}
    rangeRowQueryCriteria.TableName = indexName

    //構(gòu)造起始主鍵。主鍵范圍為左閉右開(kāi)的區(qū)間。
    startPK := new(tablestore.PrimaryKey)
    //索引表的第一主鍵列。
    startPK.AddPrimaryKeyColumn("definedcol1", "value1") 
    //索引表的第二主鍵列,此主鍵列為自動(dòng)補(bǔ)齊的數(shù)據(jù)表主鍵列。
    startPK.AddPrimaryKeyColumnWithMinValue("pk1") 
    //索引表的第三主鍵列,此主鍵列為自動(dòng)補(bǔ)齊的數(shù)據(jù)表主鍵列。
    startPK.AddPrimaryKeyColumnWithMinValue("pk2") 

    endPK := new(tablestore.PrimaryKey)
    endPK.AddPrimaryKeyColumn("definedcol1", "value1")
    endPK.AddPrimaryKeyColumnWithMaxValue("pk1")  
    endPK.AddPrimaryKeyColumnWithMaxValue("pk2")
    rangeRowQueryCriteria.StartPrimaryKey = startPK
    rangeRowQueryCriteria.EndPrimaryKey = endPK
    rangeRowQueryCriteria.Direction = tablestore.FORWARD
    rangeRowQueryCriteria.MaxVersion = 1
    rangeRowQueryCriteria.Limit = 10
    getRangeRequest.RangeRowQueryCriteria = rangeRowQueryCriteria

    getRangeResp, err := client.GetRange(getRangeRequest)

    fmt.Println("get range result is ", getRangeResp)

    for {
        if err != nil {
            fmt.Println("get range failed with error:", err)
        }
        if len(getRangeResp.Rows) > 0 {
            for _, row := range getRangeResp.Rows {
                fmt.Println("range get row with key", row.PrimaryKey.PrimaryKeys[0].Value, row.PrimaryKey.PrimaryKeys[1].Value, row.PrimaryKey.PrimaryKeys[2].Value)
            }
            if getRangeResp.NextStartPrimaryKey == nil {
                break
            } else {
                fmt.Println("next pk is :", getRangeResp.NextStartPrimaryKey.PrimaryKeys[0].Value, getRangeResp.NextStartPrimaryKey.PrimaryKeys[1].Value, getRangeResp.NextStartPrimaryKey.PrimaryKeys[2].Value)
                getRangeRequest.RangeRowQueryCriteria.StartPrimaryKey = getRangeResp.NextStartPrimaryKey
                getRangeResp, err = client.GetRange(getRangeRequest)
            }
        } else {
            break
        }

        fmt.Println("continue to query rows")
    }
    fmt.Println("getrow finished")
}

使用本地二級(jí)索引

以下示例用于讀取本地二級(jí)索引表中的所有行數(shù)據(jù)。

func GetRangeFromLocalIndex(client *tablestore.TableStoreClient, indexName string) {
    getRangeRequest := &tablestore.GetRangeRequest{}
    rangeRowQueryCriteria := &tablestore.RangeRowQueryCriteria{}
    rangeRowQueryCriteria.TableName = indexName
  
    //構(gòu)造起始主鍵。主鍵范圍為左閉右開(kāi)的區(qū)間。
    startPK := new(tablestore.PrimaryKey)
    //索引表的第一主鍵列。
    startPK.AddPrimaryKeyColumnWithMinValue("pk1")
    //索引表的第二主鍵列。
    startPK.AddPrimaryKeyColumnWithMinValue("definedcol1") 
    //索引表的第三主鍵列,此主鍵列為自動(dòng)補(bǔ)齊的數(shù)據(jù)表主鍵列。
    startPK.AddPrimaryKeyColumnWithMinValue("pk2") 
   
    //構(gòu)造結(jié)束主鍵。
    endPK := new(tablestore.PrimaryKey)
    endPK.AddPrimaryKeyColumnWithMaxValue("pk1")
    endPK.AddPrimaryKeyColumnWithMaxValue("definedcol1")  
    endPK.AddPrimaryKeyColumnWithMaxValue("pk2")
    rangeRowQueryCriteria.StartPrimaryKey = startPK
    rangeRowQueryCriteria.EndPrimaryKey = endPK
    rangeRowQueryCriteria.Direction = tablestore.FORWARD
    rangeRowQueryCriteria.MaxVersion = 1
    rangeRowQueryCriteria.Limit = 10
    getRangeRequest.RangeRowQueryCriteria = rangeRowQueryCriteria

    getRangeResp, err := client.GetRange(getRangeRequest)

    fmt.Println("get range result is ", getRangeResp)

    for {
        if err != nil {
            fmt.Println("get range failed with error:", err)
        }
        if len(getRangeResp.Rows) > 0 {
            for _, row := range getRangeResp.Rows {
                fmt.Println("range get row with key", row.PrimaryKey.PrimaryKeys[0].Value, row.PrimaryKey.PrimaryKeys[1].Value, row.PrimaryKey.PrimaryKeys[2].Value)
                //如果需要返回索引表的屬性列,請(qǐng)參照如下示例編寫(xiě)代碼。
                //fmt.Println("get row", row.Columns[0].ColumnName, "result is ", row.Columns[0].Value)
            }
            if getRangeResp.NextStartPrimaryKey == nil {
                break
            } else {
                fmt.Println("next pk is :", getRangeResp.NextStartPrimaryKey.PrimaryKeys[0].Value, getRangeResp.NextStartPrimaryKey.PrimaryKeys[1].Value, getRangeResp.NextStartPrimaryKey.PrimaryKeys[2].Value)
                getRangeRequest.RangeRowQueryCriteria.StartPrimaryKey = getRangeResp.NextStartPrimaryKey
                getRangeResp, err = client.GetRange(getRangeRequest)
            }
        } else {
            break
        }

        fmt.Println("continue to query rows")
    }
    fmt.Println("getrow finished")
}

常見(jiàn)問(wèn)題

相關(guān)文檔

  • 當(dāng)日常業(yè)務(wù)中有非主鍵列查詢(xún)、多列組合查詢(xún)、模糊查詢(xún)等多維查詢(xún)需求以及求最值、統(tǒng)計(jì)行數(shù)、數(shù)據(jù)分組等數(shù)據(jù)分析需求時(shí),您可以將這些屬性作為多元索引中的字段并使用多元索引查詢(xún)與分析數(shù)據(jù)。 更多信息,請(qǐng)參見(jiàn)多元索引

  • 如果需要使用SQL查詢(xún)和分析數(shù)據(jù),您可以使用SQL查詢(xún)功能實(shí)現(xiàn)。更多信息,請(qǐng)參見(jiàn)SQL查詢(xún)