O Tablestore fornece a API GetRow para ler uma única linha de dados e as APIs BatchGetRow e GetRange para ler várias linhas de dados.
Métodos de consulta
O Tablestore fornece as operações GetRow, BatchGetRow e GetRange para leitura de dados. Antes de ler os dados, selecione o método de consulta adequado com base no cenário real.
Para ler dados de uma tabela que contém uma coluna de chave primária de autoincremento, certifique-se de ter consultado os valores de todas as colunas de chave primária, incluindo os valores da coluna de chave primária de autoincremento. Para mais informações, consulte Configurar uma coluna de chave primária de autoincremento. Se nenhum valor estiver registrado na coluna de chave primária de autoincremento, chame a operação GetRange para especificar o intervalo de leitura de dados com base nos valores de chave primária a partir da primeira coluna de chave primária.
Método de consulta | Descrição | Cenário |
Chame a operação GetRow para ler uma única linha de dados. | Indicado para cenários em que todas as colunas de chave primária de uma tabela podem ser determinadas e o número de linhas a serem lidas é pequeno. | |
Chame a operação BatchGetRow para ler várias linhas de dados de uma ou mais tabelas de uma vez. A operação BatchGetRow consiste em várias operações GetRow. O processo de construção de uma suboperação é o mesmo do processo de chamada da operação GetRow. | Indicado para cenários em que todas as colunas de chave primária de uma tabela podem ser determinadas e o número de linhas a serem lidas é grande, ou quando os dados devem ser lidos de várias tabelas. | |
Ler dados cujos valores de chave primária estejam em um intervalo específico | Chame a operação GetRange para ler dados cujos valores de chave primária estejam no intervalo especificado. A operação GetRange permite ler dados cujos valores de chave primária estejam no intervalo especificado na direção progressiva ou regressiva. Também é possível especificar o número de linhas a serem lidas. Se o intervalo for grande e o número de linhas verificadas ou o volume de dados verificados exceder o limite superior, a verificação será interrompida, e as linhas lidas e as informações sobre a chave primária da próxima linha serão retornadas. Inicie uma nova solicitação a partir da posição em que a última operação parou e leia as linhas restantes com base nas informações da chave primária da próxima linha retornadas pela operação anterior. | Indicado para cenários em que o intervalo de todas as colunas de chave primária de uma tabela ou o prefixo das colunas de chave primária pode ser determinado. null Se não for possível determinar o prefixo das colunas de chave primária, especifique a coluna de chave primária inicial cujos dados são do tipo INF_MIN e a coluna de chave primária final cujos dados são do tipo INF_MAX para determinar o intervalo de todas as colunas de chave primária da tabela. Esta operação verifica todos os dados da tabela, mas consome uma grande quantidade de recursos computacionais. Prossiga com cautela. |
Pré-requisitos
-
Uma instância do OTSClient foi inicializada. Para mais informações, consulte Inicializar uma instância do OTSClient.
-
Uma tabela de dados foi criada e dados foram gravados nela.
Ler uma única linha de dados
Chame a operação GetRow para ler uma única linha de dados. Após chamar a operação GetRow, um dos seguintes resultados pode ser retornado:
Se a linha existir, as colunas de chave primária e as colunas de atributo da linha serão retornadas.
Se a linha não existir, nenhuma linha será retornada e nenhum erro será reportado.
Operação de API
// Return a row of data in a table.
// @param GetRowRequest Encapsulate the parameters required to call the GetRow operation.
// @return GetRowResponse The content of the response to the GetRow operation.
GetRow(request *GetRowRequest) (*GetRowResponse, error) Parâmetros
Parâmetro | Descrição |
TableName | O nome da tabela. |
PrimaryKey | As informações de chave primária da linha. As informações de chave primária consistem no nome da coluna de chave primária, tipo da chave primária e valor da chave primária. null O número e os tipos das colunas de chave primária especificados devem ser iguais ao número e aos tipos reais das colunas de chave primária na tabela. |
ColumnsToGet | As colunas que você deseja ler. É possível especificar nomes de colunas de chave primária ou colunas de atributo.
null
|
MaxVersion | O número máximo de versões de dados que podem ser lidas. null Especifique pelo menos um dos parâmetros MaxVersion e TimeRange.
|
TimeRange | O intervalo de tempo das versões ou uma versão específica a ser lida. Para mais informações, consulte TimeRange. null Especifique pelo menos um dos parâmetros MaxVersion e TimeRange.
Somente um entre specific_time e Valores válidos do parâmetro TimeRange: 0 a INT64.MAX. Unidade: milissegundo. |
Filter | O filtro a ser usado para filtrar os resultados da consulta no lado do servidor. Somente as linhas que atendem às condições do filtro serão retornadas. Para mais informações, consulte Filtros. null Se os parâmetros ColumnsToGet e Filter forem especificados, o Tablestore consultará as colunas indicadas pelo parâmetro ColumnsToGet e retornará as linhas que atendem às condições do filtro. |
Código de exemplo
O código de exemplo a seguir demonstra como ler uma linha de dados:
getRowRequest := new(tablestore.GetRowRequest)
criteria := new(tablestore.SingleRowQueryCriteria);
putPk := new(tablestore.PrimaryKey)
putPk.AddPrimaryKeyColumn("pk1", "pk1value1")
putPk.AddPrimaryKeyColumn("pk2", int64(2))
putPk.AddPrimaryKeyColumn("pk3", []byte("pk3"))
criteria.PrimaryKey = putPk
getRowRequest.SingleRowQueryCriteria = criteria
getRowRequest.SingleRowQueryCriteria.TableName = tableName
getRowRequest.SingleRowQueryCriteria.MaxVersion = 1
getResp, err := client.GetRow(getRowRequest)
if err != nil {
fmt.Println("getrow failed with error:", err)
} else {
fmt.Println("get row col0 result is ",getResp.Columns[0].ColumnName, getResp.Columns[0].Value,)
} Para consultar o código de exemplo detalhado, acesse GetRow@GitHub.
Ler várias linhas de dados de uma vez
Chame a operação BatchGetRow para ler várias linhas de dados de uma ou mais tabelas ao mesmo tempo. A operação BatchGetRow consiste em várias operações GetRow. Ao chamar a operação BatchGetRow, o processo de construção de cada operação GetRow é o mesmo do processo de construção ao chamar a operação GetRow individualmente.
Ao chamar a operação BatchGetRow, cada operação GetRow é executada separadamente. O Tablestore retorna a resposta de cada operação GetRow separadamente.
Observações de uso
Ao chamar a operação BatchGetRow para ler várias linhas de uma vez, a leitura de algumas linhas pode falhar. Nesse caso, o Tablestore não retorna exceções, mas retorna BatchGetRowResponse com as informações das linhas que falharam. Portanto, ao chamar a operação BatchGetRow, verifique os valores retornados para determinar se os dados de cada linha foram lidos com êxito.
A operação BatchGetRow usa as mesmas configurações de parâmetros para todas as linhas. Por exemplo, se o parâmetro
ColumnsToGetestiver definido como [colA], somente o valor da coluna colA será lido de todas as linhas.A operação BatchGetRow permite ler no máximo 100 linhas de uma vez.
Parâmetros
Para mais informações sobre parâmetros, consulte a tabela de Parâmetros na seção "Ler uma única linha de dados".
Operação de API
// Return multiple rows of data from a table.
// @param BatchGetRowRequest Encapsulate the parameters required to call the BatchGetRow operation.
// @return BatchGetRowResponse The content of the response to the BatchGetRow operation.
BatchGetRow(request *BatchGetRowRequest) (*BatchGetRowResponse, error) Código de exemplo
O código de exemplo a seguir demonstra como ler 10 linhas de dados de uma vez:
batchGetReq := &tablestore.BatchGetRowRequest{}
mqCriteria := &tablestore.MultiRowQueryCriteria{}
for i := 0; i < 10; i++ {
pkToGet := new(tablestore.PrimaryKey)
pkToGet.AddPrimaryKeyColumn("pk1", "pk1value1")
pkToGet.AddPrimaryKeyColumn("pk2", int64(i))
pkToGet.AddPrimaryKeyColumn("pk3", []byte("pk3"))
mqCriteria.AddRow(pkToGet)
mqCriteria.MaxVersion = 1
}
mqCriteria.TableName = tableName
batchGetReq.MultiRowQueryCriteria = append(batchGetReq.MultiRowQueryCriteria, mqCriteria)
batchGetResponse, err := client.BatchGetRow(batchGetReq)
if err != nil {
fmt.Println("batchget failed with error:", err)
} else {
fmt.Println("batchget finished")
} Para consultar o código de exemplo detalhado, acesse BatchGetRow@GitHub.
Ler dados cujos valores de chave primária estejam em um intervalo específico
Chame a operação GetRange para ler dados cujos valores de chave primária estejam no intervalo especificado.
A operação GetRange permite ler dados cujos valores de chave primária estejam no intervalo especificado na direção progressiva ou regressiva. Também é possível especificar o número de linhas a serem lidas. Se o intervalo for grande e o número de linhas verificadas ou o volume de dados verificados exceder o limite superior, a verificação será interrompida, e as linhas lidas e as informações sobre a chave primária da próxima linha serão retornadas. Inicie uma nova solicitação a partir da posição em que a última operação parou e leia as linhas restantes com base nas informações da chave primária da próxima linha retornadas pela operação anterior.
Nas tabelas do Tablestore, todas as linhas são ordenadas por chave primária. A chave primária de uma tabela consiste sequencialmente em todas as colunas de chave primária. Portanto, as linhas não são ordenadas com base em uma coluna de chave primária específica.
Observações de uso
A operação GetRange segue o princípio de correspondência mais à esquerda. O Tablestore compara valores sequencialmente, da primeira coluna de chave primária até a última, para ler dados cujos valores de chave primária estejam no intervalo especificado. Por exemplo, a chave primária de uma tabela de dados consiste nas seguintes colunas de chave primária: PK1, PK2 e PK3. Ao ler os dados, o Tablestore primeiro verifica se o valor de PK1 de uma linha está no intervalo especificado para a primeira coluna de chave primária. Se o valor de PK1 estiver no intervalo, o Tablestore para de verificar os valores das demais colunas de chave primária da linha e retorna a linha. Se o valor de PK1 não estiver no intervalo, o Tablestore continua verificando os valores das demais colunas de chave primária da linha da mesma forma que para PK1.
Se uma das condições a seguir for atendida, a operação GetRange poderá parar e retornar dados:
-
O volume de dados verificados atinge 4 MB.
-
O número de linhas verificadas atinge 5.000.
-
O número de linhas retornadas atinge o limite superior.
-
O throughput de leitura é insuficiente para ler a próxima linha de dados porque todo o throughput de leitura reservado foi consumido.
Operação de API
// Query multiple rows of data whose primary key values are in the specified range in a table.
// @param GetRangeRequest Encapsulate the parameters required to call the GetRange operation.
// @return GetRangeResponse The content of the response to the GetRange operation.
GetRange(request *GetRangeRequest) (*GetRangeResponse,error) Parâmetros
Parâmetro | Descrição |
TableName | O nome da tabela. |
Direction | A ordem de classificação das linhas na resposta.
Por exemplo, uma tabela possui dois valores de chave primária A e B, sendo o Valor A menor que o Valor B. Se o parâmetro Direction for definido como FORWARD e um intervalo |
StartPrimaryKey | As informações de chave primária inicial e final do intervalo de leitura. As colunas de chave primária inicial e final devem ser colunas de chave primária válidas ou colunas virtuais cujos dados sejam do tipo INF_MIN e INF_MAX. O número de colunas no intervalo especificado por colunas virtuais deve ser igual ao número de colunas de chave primária da tabela especificada. INF_MIN indica um valor infinitamente pequeno. Todos os valores de outros tipos são maiores que um valor do tipo INF_MIN. INF_MAX indica um valor infinitamente grande. Todos os valores de outros tipos são menores que um valor do tipo INF_MAX.
As linhas da tabela são ordenadas de forma crescente com base nos valores de chave primária. O intervalo de leitura de dados é um intervalo fechado à esquerda e aberto à direita. Na leitura em direção progressiva, as linhas cujos valores de chave primária sejam maiores ou iguais ao valor de chave primária inicial e menores que o valor de chave primária final serão retornadas. |
EndPrimaryKey | |
Limit | O número máximo de linhas que podem ser retornadas. O valor deste parâmetro deve ser maior que 0. O Tablestore interrompe uma operação quando o número máximo de linhas retornáveis na direção progressiva ou regressiva é atingido, mesmo que algumas linhas no intervalo especificado não tenham sido retornadas. Use o valor do parâmetro NextStartPrimaryKey retornado na resposta para ler dados na próxima solicitação. |
ColumnsToGet | As colunas que você deseja ler. É possível especificar nomes de colunas de chave primária ou colunas de atributo.
null
|
MaxVersions | O número máximo de versões de dados que podem ser lidas. null Especifique pelo menos um dos parâmetros MaxVersion e TimeRange.
|
TimeRange | O intervalo de tempo das versões ou uma versão específica a ser lida. Para mais informações, consulte TimeRange. null Especifique pelo menos um dos parâmetros MaxVersion e TimeRange.
Somente um entre specific_time e Valores válidos do parâmetro TimeRange: 0 a |
Filter | O filtro a ser usado para filtrar os resultados da consulta no lado do servidor. Somente as linhas que atendem às condições do filtro serão retornadas. Para mais informações, consulte Filtros. null Se os parâmetros ColumnsToGet e Filter forem especificados, o Tablestore consultará as colunas indicadas pelo parâmetro ColumnsToGet e retornará as linhas que atendem às condições do filtro. |
NextStartPrimaryKey | As informações de chave primária inicial da próxima solicitação de leitura. O valor do parâmetro NextStartPrimaryKey pode ser usado para determinar se todos os dados foram lidos.
|
Código de exemplo
O código de exemplo a seguir demonstra como ler dados cujos valores de chave primária estejam no intervalo especificado:
getRangeRequest := &tablestore.GetRangeRequest{}
rangeRowQueryCriteria := &tablestore.RangeRowQueryCriteria{}
rangeRowQueryCriteria.TableName = tableName
startPK := new(tablestore.PrimaryKey)
startPK.AddPrimaryKeyColumnWithMinValue("pk1")
startPK.AddPrimaryKeyColumnWithMinValue("pk2")
startPK.AddPrimaryKeyColumnWithMinValue("pk3")
endPK := new(tablestore.PrimaryKey)
endPK.AddPrimaryKeyColumnWithMaxValue("pk1")
endPK.AddPrimaryKeyColumnWithMaxValue("pk2")
endPK.AddPrimaryKeyColumnWithMaxValue("pk3")
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)
}
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)
}
fmt.Println("continue to query rows")
}
fmt.Println("range get row finished")Para consultar o código de exemplo detalhado, acesse GetRange@GitHub.