null
A unidade básica de uma tabela é uma linha, composta por colunas de chave primária e colunas de atributos. As colunas de chave primária são obrigatórias e seus nomes e tipos devem ser iguais para todas as linhas. As colunas de atributos são opcionais e os atributos podem ser diferentes para cada linha. Para mais informações, consulte Modelo de tabela ampla.
Observação
Ao ler dados de uma tabela que possui uma coluna de chave primária com incremento automático, você deve fornecer a chave primária completa, incluindo o valor da coluna de incremento automático. Para mais informações, consulte Coluna de chave primária com incremento automático.
null
Se você não tiver o valor da coluna de chave primária com incremento automático, execute uma consulta por intervalo na primeira coluna de chave primária para ler os dados.
Ler uma única linha de dados
Chame a operação GetRow para ler uma única linha de dados. Essa operação é útil quando você conhece a chave primária completa e precisa ler apenas algumas linhas.
Ao ler uma única linha, você pode configurar as seguintes condições para filtrar os dados.
-
Por padrão, todas as colunas são retornadas. Você pode configurar a operação para retornar apenas colunas específicas.
-
Use um filtro para retornar linhas que atendam a condições específicas de filtragem. Para mais informações, consulte Filtros.
-
Se você configurou múltiplas versões de dados para a tabela, especifique o número máximo de versões a serem lidas. Você também pode ler dados de um intervalo de tempo específico ou com um número de versão específico. Para mais informações sobre versões de dados, consulte Versões de dados e ciclo de vida.
A operação de leitura tem dois resultados possíveis:
-
Se a linha existir, a operação retorna as colunas de chave primária e as colunas de atributos da linha.
-
Se a linha não existir, o resultado não inclui a linha e nenhum erro é reportado.
Leitura de dados em lote
Chame a operação BatchGetRow para ler várias linhas em uma única solicitação ou para ler dados de várias tabelas simultaneamente. Essa operação é útil quando você conhece as chaves primárias completas e precisa ler muitas linhas ou dados de múltiplas tabelas.
Uma operação BatchGetRow consiste em várias sub-operações GetRow. O processo de construção de uma sub-operação é o mesmo da operação GetRow.
Ao ler dados em lote, você pode configurar as seguintes condições para filtrar os dados.
-
Leia dados de várias tabelas em uma única solicitação.
Uma única solicitação pode ler no máximo 100 linhas.
-
Por padrão, todas as colunas são retornadas. Você pode configurar a operação para retornar apenas colunas específicas.
Todas as linhas em uma leitura em lote utilizam as mesmas condições de parâmetro. Por exemplo, ColumnsToGet=[colA] significa que apenas a coluna colA é recuperada para todas as linhas especificadas.
-
Use um filtro para recuperar linhas que atendam a condições específicas de filtragem. Para mais informações, consulte Filtros.
-
Se você configurou múltiplas versões de dados para a tabela, especifique o número máximo de versões a serem lidas. Você também pode ler dados de um intervalo de tempo específico ou com um número de versão específico. Para mais informações sobre versões de dados, consulte Versões de dados e ciclo de vida.
As sub-operações de uma operação BatchGetRow são executadas de forma independente, e o Tablestore retorna o resultado de cada sub-operação.
Ler dados em um intervalo
Chame a operação GetRange para ler dados dentro de um intervalo especificado. Essa operação é útil quando você consegue determinar um intervalo completo de chave primária ou um prefixo de chave.
null
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.
A operação GetRange segue o princípio de correspondência pela esquerda. O Tablestore compara valores sequencialmente, da primeira até a última coluna de chave primária, 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: PK1, PK2 e PK3. Ao ler os dados, o Tablestore primeiro determina 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 de uma linha estiver no intervalo, o Tablestore para de verificar se os valores das outras colunas de chave primária dessa linha estão nos intervalos especificados e retorna a linha. Se o valor de PK1 de uma linha não estiver no intervalo, o Tablestore continua a verificar os valores das outras colunas de chave primária da mesma forma que PK1.
Ao ler dados em um intervalo, você pode configurar as seguintes condições para filtrar os dados.
-
Especifique um prefixo de chave e use os pontos virtuais INF_MIN (mínimo infinito) e INF_MAX (máximo infinito) para as outras colunas de chave primária. Você também pode especificar um intervalo completo de chave primária para ler os dados.
null
Se você não conseguir determinar o prefixo da chave, execute uma varredura completa da tabela definindo o intervalo total da chave primária de INF_MIN até INF_MAX. Essa operação consome uma grande quantidade de recursos de computação. Use com cautela.
Se o intervalo for grande, a varredura para quando o número de linhas ou o volume de dados excede um determinado limite. A operação retorna as linhas recuperadas e informações sobre a próxima chave primária. Use as informações da próxima chave primária retornada para iniciar outra solicitação e recuperar as linhas restantes do intervalo.
-
A quantidade de dados varridos atinge 4 MB.
-
O número de linhas varridas 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.
-
Leia um número máximo especificado de linhas em ordem direta ou reversa. Por exemplo, leia no máximo 5 linhas em ordem direta.
-
Por padrão, todas as colunas são retornadas. Você pode configurar a operação para retornar apenas colunas específicas.
-
Use um filtro para recuperar linhas que atendam a condições específicas de filtragem. Para mais informações, consulte Filtros.
Todas as linhas em uma leitura por intervalo utilizam as mesmas condições de parâmetro. Por exemplo, ColumnsToGet=[colA] significa que apenas a coluna colA é recuperada para todas as linhas do intervalo.
-
Se você configurou múltiplas versões de dados para a tabela, especifique o número máximo de versões a serem lidas. Você também pode ler dados de um intervalo de tempo específico ou com um número de versão específico. Para mais informações sobre versões de dados, consulte Versões de dados e ciclo de vida.
Ao usar GetRange para varrer um grande volume de dados, o Tablestore executa apenas uma varredura por solicitação. A varredura para se o número de linhas exceder 5.000 ou o tamanho dos dados exceder 4 MB. Os dados que excedem esses limites não são retornados. Use paginação para recuperar os dados subsequentes.
Como usar
Usar o console
Você pode usar o console para consultar uma única linha ou consultar dados em um intervalo.
-
Faça login no console do Tablestore.
-
Na página Overview, localize a instância e clique em Instance Management na coluna Actions.
-
Na aba Instance Details, localize a tabela na seção Data Table List e clique em Query/Search na coluna Actions.
-
Na aba Data Management, clique em Query Data. Em seguida, selecione se deseja ler uma única linha ou ler dados em um intervalo.
Ler uma única linha de dados
-
Na caixa de diálogo Query Data, defina Query Range como Single Row Query e selecione a tabela a ser consultada.
-
Por padrão, todas as colunas são retornadas. Para retornar apenas colunas de atributos específicas, desative Get All Columns e insira as colunas de atributos desejadas.
Separe múltiplas colunas de atributos com uma vírgula (,).
-
Insira o Primary Key Value da linha de destino.
A completude e a precisão do valor da chave primária afetam os resultados da consulta.
-
Insira o Max Versions para especificar o número de versões a serem retornadas.
-
Clique em OK.
Ler dados em um intervalo
-
Na caixa de diálogo Query Data, defina Query Range como Range Query e selecione a tabela a ser consultada.
-
Por padrão, todas as colunas são retornadas. Para retornar apenas colunas de atributos específicas, desative Get All Columns e insira as colunas de atributos desejadas.
Separe múltiplas colunas de atributos com uma vírgula (,).
-
Insira as colunas de chave primária inicial e final.
null
-
Uma consulta por intervalo avalia primeiro a primeira coluna de chave primária. Se os valores da primeira coluna de chave primária forem iguais, o sistema avalia a segunda coluna de chave primária. Essa regra se aplica a todas as colunas de chave primária subsequentes.
-
O intervalo de leitura é um intervalo fechado à esquerda e aberto à direita, ou seja, o início do intervalo é inclusivo e o final é exclusivo.
-
Insira o Max Versions para especificar o número de versões a serem retornadas.
-
Defina a direção de ordenação do resultado da consulta. Selecione Forward Query ou Backward Query.
-
Clique em OK.
Usar a interface de linha de comando (CLI)
Você pode usar a interface de linha de comando (CLI) para executar os seguintes comandos de leitura de dados.
-
Execute o comando get para ler uma única linha de dados. Para mais informações, consulte Ler dados.
O exemplo a seguir lê a linha em que a primeira coluna de chave primária tem o valor "86" e a segunda coluna de chave primária tem o valor 6771.
get --pk '["86",6771]'
-
Execute o comando scan para ler dados em um intervalo. Para mais informações, consulte Exportar dados.
O exemplo a seguir lê dados em ordem reversa no intervalo de chave primária entre ["86",7000] e ["86",6770], e retorna apenas a coluna pid.
scan --begin '["86",7000]' --end '["86",6770]' --backward --columns pid
Usar um SDK
Você pode usar o Java SDK, Go SDK, Python SDK, Node.js SDK, .NET SDK ou PHP SDK para ler dados. Esta seção usa o Java SDK como exemplo.
Ler uma única linha de dados
Ao ler dados, você pode especificar a versão dos dados, as colunas a serem lidas, filtros e filtros de expressão regular.
-
Ler a versão mais recente dos dados e colunas específicas
O código de exemplo a seguir demonstra como ler dados da versão mais recente das colunas especificadas de uma linha em uma tabela de dados.
private static void getRow(SyncClient client, String pkValue) {
// Construct the primary key.
PrimaryKeyBuilder primaryKeyBuilder = PrimaryKeyBuilder.createPrimaryKeyBuilder();
primaryKeyBuilder.addPrimaryKeyColumn("pk", PrimaryKeyValue.fromString(pkValue));
PrimaryKey primaryKey = primaryKeyBuilder.build();
// Specify the table name and primary key to read a row of data.
SingleRowQueryCriteria criteria = new SingleRowQueryCriteria("<TABLE_NAME>", primaryKey);
// Set the MaxVersions parameter to 1 to read the latest version of data.
criteria.setMaxVersions(1);
GetRowResponse getRowResponse = client.getRow(new GetRowRequest(criteria));
Row row = getRowResponse.getRow();
System.out.println("Read complete. Result:");
System.out.println(row);
// Specify the columns that you want to read.
criteria.addColumnsToGet("Col0");
getRowResponse = client.getRow(new GetRowRequest(criteria));
row = getRowResponse.getRow();
System.out.println("Read complete. Result:");
System.out.println(row);
}
-
Ler dados com um filtro
O código de exemplo a seguir demonstra como ler dados da versão mais recente de uma linha em uma tabela de dados e usar um filtro para filtrar dados com base no valor da coluna Col0.
private static void getRow(SyncClient client, String pkValue) {
// Construct the primary key.
PrimaryKeyBuilder primaryKeyBuilder = PrimaryKeyBuilder.createPrimaryKeyBuilder();
primaryKeyBuilder.addPrimaryKeyColumn("pk", PrimaryKeyValue.fromString(pkValue));
PrimaryKey primaryKey = primaryKeyBuilder.build();
// Specify the table name and primary key to read a row of data.
SingleRowQueryCriteria criteria = new SingleRowQueryCriteria("<TABLE_NAME>", primaryKey);
// Set the MaxVersions parameter to 1 to read the latest version of data.
criteria.setMaxVersions(1);
// Configure a filter to return a row in which the value of the Col0 column is 0.
SingleColumnValueFilter singleColumnValueFilter = new SingleColumnValueFilter("Col0",
SingleColumnValueFilter.CompareOperator.EQUAL, ColumnValue.fromLong(0));
// If the Col0 column does not exist, the row is not returned.
singleColumnValueFilter.setPassIfMissing(false);
criteria.setFilter(singleColumnValueFilter);
GetRowResponse getRowResponse = client.getRow(new GetRowRequest(criteria));
Row row = getRowResponse.getRow();
System.out.println("Read complete. Result:");
System.out.println(row);
}
-
Usar um filtro de expressão regular ao ler dados
O código de exemplo a seguir demonstra como ler os dados da coluna Col1 de uma linha em uma tabela de dados e usar uma expressão regular para filtrar dados na coluna.
private static void getRow(SyncClient client, String pkValue) {
// Specify the name of the data table.
SingleRowQueryCriteria criteria = new SingleRowQueryCriteria("<TABLE_NAME>");
// Construct the primary key.
PrimaryKey primaryKey = PrimaryKeyBuilder.createPrimaryKeyBuilder()
.addPrimaryKeyColumn("pk", PrimaryKeyValue.fromString(pkValue))
.build();
criteria.setPrimaryKey(primaryKey);
// Set the MaxVersions parameter to 1 to read the latest version of data.
criteria.setMaxVersions(1);
// Configure a filter. A row is returned when cast<int>(regex(Col1)) is greater than 100.
RegexRule regexRule = new RegexRule("t1:([0-9]+),", RegexRule.CastType.VT_INTEGER);
SingleColumnValueRegexFilter filter = new SingleColumnValueRegexFilter("Col1",
regexRule,SingleColumnValueRegexFilter.CompareOperator.GREATER_THAN, ColumnValue.fromLong(100));
criteria.setFilter(filter);
GetRowResponse getRowResponse = client.getRow(new GetRowRequest(criteria));
Row row = getRowResponse.getRow();
System.out.println("Read complete. Result:");
System.out.println(row);
}
Leitura de dados em lote
O código de exemplo a seguir demonstra como configurar as condições de versão, colunas a serem lidas e filtros para ler 10 linhas de dados.
private static void batchGetRow(SyncClient client) {
// Specify the name of the data table.
MultiRowQueryCriteria multiRowQueryCriteria = new MultiRowQueryCriteria("<TABLE_NAME>");
// Specify 10 rows that you want to read.
for (int i = 0; i < 10; i++) {
PrimaryKeyBuilder primaryKeyBuilder = PrimaryKeyBuilder.createPrimaryKeyBuilder();
primaryKeyBuilder.addPrimaryKeyColumn("pk", PrimaryKeyValue.fromString("pk" + i));
PrimaryKey primaryKey = primaryKeyBuilder.build();
multiRowQueryCriteria.addRow(primaryKey);
}
// Add conditions.
multiRowQueryCriteria.setMaxVersions(1);
multiRowQueryCriteria.addColumnsToGet("Col0");
multiRowQueryCriteria.addColumnsToGet("Col1");
SingleColumnValueFilter singleColumnValueFilter = new SingleColumnValueFilter("Col0",
SingleColumnValueFilter.CompareOperator.EQUAL, ColumnValue.fromLong(0));
singleColumnValueFilter.setPassIfMissing(false);
multiRowQueryCriteria.setFilter(singleColumnValueFilter);
BatchGetRowRequest batchGetRowRequest = new BatchGetRowRequest();
// The BatchGetRow operation allows you to read data from multiple tables. Each multiRowQueryCriteria parameter specifies query conditions for one table. You can add multiple multiRowQueryCriteria parameters to read data from multiple tables.
batchGetRowRequest.addMultiRowQueryCriteria(multiRowQueryCriteria);
BatchGetRowResponse batchGetRowResponse = client.batchGetRow(batchGetRowRequest);
System.out.println("Whether all operations are successful:" + batchGetRowResponse.isAllSucceed());
System.out.println("Read complete. Result:");
for (BatchGetRowResponse.RowResult rowResult : batchGetRowResponse.getSucceedRows()) {
System.out.println(rowResult.getRow());
}
if (!batchGetRowResponse.isAllSucceed()) {
for (BatchGetRowResponse.RowResult rowResult : batchGetRowResponse.getFailedRows()) {
System.out.println("Failed rows:" + batchGetRowRequest.getPrimaryKey(rowResult.getTableName(), rowResult.getIndex()));
System.out.println("Cause of failures:" + rowResult.getError());
}
/**
* You can use the createRequestForRetry method to construct another request to retry the operations on failed rows. In this example, only the retry request is constructed.
* We recommend that you use the custom retry policy in Tablestore SDKs as the retry method. This way, you can retry failed rows after batch operations are performed. After you specify the retry policy, you do not need to add retry code to call the operation.
*/
BatchGetRowRequest retryRequest = batchGetRowRequest.createRequestForRetry(batchGetRowResponse.getFailedRows());
}
}
Ler dados em um intervalo
-
Ler dados dentro de um intervalo definido
O código de exemplo a seguir demonstra como ler dados cujos valores de chave primária estejam no intervalo especificado na direção direta. Se o valor do parâmetro nextStartPrimaryKey estiver vazio na resposta, todos os dados cujos valores de chave primária estejam no intervalo especificado foram lidos. Caso contrário, inicie outra solicitação até que todos os dados cujos valores de chave primária estejam no intervalo especificado sejam retornados.
private static void getRange(SyncClient client, String startPkValue, String endPkValue) {
// Specify the name of the data table.
RangeRowQueryCriteria rangeRowQueryCriteria = new RangeRowQueryCriteria("<TABLE_NAME>");
// Specify the start primary key.
PrimaryKeyBuilder primaryKeyBuilder = PrimaryKeyBuilder.createPrimaryKeyBuilder();
primaryKeyBuilder.addPrimaryKeyColumn("pk", PrimaryKeyValue.fromString(startPkValue));
rangeRowQueryCriteria.setInclusiveStartPrimaryKey(primaryKeyBuilder.build());
// Specify the end primary key.
primaryKeyBuilder = PrimaryKeyBuilder.createPrimaryKeyBuilder();
primaryKeyBuilder.addPrimaryKeyColumn("pk", PrimaryKeyValue.fromString(endPkValue));
rangeRowQueryCriteria.setExclusiveEndPrimaryKey(primaryKeyBuilder.build());
rangeRowQueryCriteria.setMaxVersions(1);
System.out.println("GetRange result:");
while (true) {
GetRangeResponse getRangeResponse = client.getRange(new GetRangeRequest(rangeRowQueryCriteria));
for (Row row : getRangeResponse.getRows()) {
System.out.println(row);
}
// If the value of the nextStartPrimaryKey parameter is not null, continue the read operation.
if (getRangeResponse.getNextStartPrimaryKey() != null) {
rangeRowQueryCriteria.setInclusiveStartPrimaryKey(getRangeResponse.getNextStartPrimaryKey());
} else {
break;
}
}
}
-
Ler dados com base em um intervalo definido pela primeira coluna de chave primária
O código de exemplo a seguir demonstra como ler dados dentro do intervalo determinado pelo valor da primeira coluna de chave primária na direção direta. Neste exemplo, o valor inicial da segunda coluna de chave primária é definido como INF_MIN e o valor final da segunda coluna de chave primária é definido como INF_MAX. Se o valor do parâmetro nextStartPrimaryKey for nulo na resposta, todos os dados no intervalo especificado foram lidos. Caso contrário, inicie outra solicitação até que todos os dados dentro do intervalo determinado pelo valor da primeira coluna de chave primária sejam retornados.
private static void getRange(SyncClient client, String startPkValue, String endPkValue) {
// Specify the name of the data table.
RangeRowQueryCriteria rangeRowQueryCriteria = new RangeRowQueryCriteria("<TABLE_NAME>");
// Specify the start primary key. In this example, two primary key columns are used.
PrimaryKeyBuilder primaryKeyBuilder = PrimaryKeyBuilder.createPrimaryKeyBuilder();
primaryKeyBuilder.addPrimaryKeyColumn("pk1", PrimaryKeyValue.fromString(startPkValue));// Set the value of the first primary key column to a specific value.
primaryKeyBuilder.addPrimaryKeyColumn("pk2", PrimaryKeyValue.INF_MIN);// Set the value of the second primary key column to an infinitely small value.
rangeRowQueryCriteria.setInclusiveStartPrimaryKey(primaryKeyBuilder.build());
// Specify the end primary key.
primaryKeyBuilder = PrimaryKeyBuilder.createPrimaryKeyBuilder();
primaryKeyBuilder.addPrimaryKeyColumn("pk1", PrimaryKeyValue.fromString(endPkValue));// Set the value of the first primary key column to a specific value.
primaryKeyBuilder.addPrimaryKeyColumn("pk2", PrimaryKeyValue.INF_MAX);// Set the value of the second primary key column to an infinitely great value.
rangeRowQueryCriteria.setExclusiveEndPrimaryKey(primaryKeyBuilder.build());
rangeRowQueryCriteria.setMaxVersions(1);
System.out.println("GetRange result:");
while (true) {
GetRangeResponse getRangeResponse = client.getRange(new GetRangeRequest(rangeRowQueryCriteria));
for (Row row : getRangeResponse.getRows()) {
System.out.println(row);
}
// If the value of the nextStartPrimaryKey parameter is not null, continue the read operation.
if (getRangeResponse.getNextStartPrimaryKey() != null) {
rangeRowQueryCriteria.setInclusiveStartPrimaryKey(getRangeResponse.getNextStartPrimaryKey());
} else {
break;
}
}
}
-
Ler dados dentro de um intervalo definido e aplicar um filtro de expressão regular a uma coluna específica
O código de exemplo a seguir demonstra como ler dados cujos valores de chave primária estejam no intervalo de ["pk:2020-01-01.log", "pk:2021-01-01.log") da coluna Col1 e usar uma expressão regular para filtrar dados na coluna Col1.
private static void getRange(SyncClient client) {
// Specify the name of the data table.
RangeRowQueryCriteria criteria = new RangeRowQueryCriteria("<TABLE_NAME>");
// Specify ["pk:2020-01-01.log", "pk:2021-01-01.log") as the range of the primary key of the data that you want to read. The range is a left-closed, right-open interval.
PrimaryKey pk0 = PrimaryKeyBuilder.createPrimaryKeyBuilder()
.addPrimaryKeyColumn("pk", PrimaryKeyValue.fromString("2020-01-01.log"))
.build();
PrimaryKey pk1 = PrimaryKeyBuilder.createPrimaryKeyBuilder()
.addPrimaryKeyColumn("pk", PrimaryKeyValue.fromString("2021-01-01.log"))
.build();
criteria.setInclusiveStartPrimaryKey(pk0);
criteria.setExclusiveEndPrimaryKey(pk1);
// Set the MaxVersions parameter to 1 to read the latest version of data.
criteria.setMaxVersions(1);
// Configure a filter. A row is returned when cast<int>(regex(Col1)) is greater than 100.
RegexRule regexRule = new RegexRule("t1:([0-9]+),", RegexRule.CastType.VT_INTEGER);
SingleColumnValueRegexFilter filter = new SingleColumnValueRegexFilter("Col1",
regexRule,SingleColumnValueRegexFilter.CompareOperator.GREATER_THAN,ColumnValue.fromLong(100));
criteria.setFilter(filter);
while (true) {
GetRangeResponse resp = client.getRange(new GetRangeRequest(criteria));
for (Row row : resp.getRows()) {
// do something
System.out.println(row);
}
if (resp.getNextStartPrimaryKey() != null) {
criteria.setInclusiveStartPrimaryKey(resp.getNextStartPrimaryKey());
} else {
break;
}
}
}
Descrição do faturamento
A cobrança é realizada com base no número de Capacity Units (CUs) consumidas por uma operação. As cobranças de CUs de leitura e gravação medidas são separadas das cobranças de CUs de leitura e gravação reservadas. O tipo da instância determina se CUs medidas ou reservadas são consumidas.
A leitura de dados consome Read Capacity Units (RCUs), mas não consome Write Capacity Units (WCUs). As RCUs consumidas são calculadas da seguinte forma:
-
RCUs consumidas por uma operação GetRow
O número de RCUs consumidas é baseado no tamanho total dos dados lidos, que é a soma dos tamanhos dos dados da chave primária e das colunas de atributos recuperadas. Esse total é dividido por 4 KB e arredondado para o número inteiro mais próximo. Se a linha especificada não existir, a operação consome uma RCU.
-
RCUs consumidas por uma operação BatchGetRow
As RCUs de uma operação BatchGetRow são calculadas tratando cada RowInBatchGetRowRequest como uma operação GetRow separada.
-
RCUs consumidas por uma operação GetRange
O número de RCUs consumidas é baseado no tamanho total de todos os dados varridos, que é a soma dos tamanhos dos dados das chaves primárias e das colunas de atributos varridas para todas as linhas no intervalo. Esse total é dividido por 4 KB e arredondado para o número inteiro mais próximo. Por exemplo, se uma varredura abrange 10 linhas e o tamanho combinado da chave primária e das colunas de atributos varridas para cada linha é de 330 bytes, o tamanho total dos dados é 3,3 KB (10 linhas × 330 bytes). Essa operação consome 1 RCU.