Le SDK Tablestore pour Java lit plusieurs lignes selon une plage de clés primaires pour un traitement hors ligne et renvoie le résultat sous forme de bloc de données dans l'encodage spécifié.
Prérequis
Installez le SDK Tablestore pour Java et initialisez le client.
Description
Cette opération analyse les lignes contiguës d'une table de données selon une plage de clés primaires. La réponse inclut les lignes dont les clés primaires sont supérieures ou égales à la clé de début et strictement inférieures à la clé de fin. Utilisez BulkExportQueryCriteria (dans le sous-package com.alicloud.openservices.tablestore.model.tunnel) pour définir les clés primaires de début et de fin, les colonnes à renvoyer, le filtre ainsi que le type d'encodage du bloc de données. La réponse renvoie les données des lignes sous forme d'octets encodés en ByteBuffer. Décodez-les en liste de lignes à l'aide de l'analyseur correspondant : DBT_PLAIN_BUFFER s'utilise avec PlainBufferBlockParser, tandis que DBT_SIMPLE_ROW_MATRIX s'utilise avec SimpleRowMatrixBlockParser. Si getNextStartPrimaryKey() renvoie une valeur non null, il reste des lignes à traiter ; poursuivez l'analyse à partir de cette clé.
public BulkExportResponse bulkExport(BulkExportRequest bulkExportRequest) throws TableStoreException, ClientException
L'exemple suivant lit les données de la table bulk_export_demo sur la plage de clés primaires [row00, row99) en un seul appel. Il utilise l'encodage DBT_PLAIN_BUFFER et décode le résultat avec l'analyseur approprié.
String tableName = "bulk_export_demo";
// Start primary key (inclusive)
PrimaryKey startPk = PrimaryKeyBuilder.createPrimaryKeyBuilder()
.addPrimaryKeyColumn("pk", PrimaryKeyValue.fromString("row00"))
.build();
// End primary key (exclusive)
PrimaryKey endPk = PrimaryKeyBuilder.createPrimaryKeyBuilder()
.addPrimaryKeyColumn("pk", PrimaryKeyValue.fromString("row99"))
.build();
// BulkExportQueryCriteria is located in the model.tunnel subpackage
BulkExportQueryCriteria criteria = new BulkExportQueryCriteria(tableName);
criteria.setInclusiveStartPrimaryKey(startPk);
criteria.setExclusiveEndPrimaryKey(endPk);
criteria.setDataBlockType(DataBlockType.DBT_PLAIN_BUFFER);
criteria.addColumnsToGet("pk");
criteria.addColumnsToGet("col1");
BulkExportRequest request = new BulkExportRequest(criteria);
BulkExportResponse response = client.bulkExport(request);
// response.getRows() returns a ByteBuffer; parse it into List<Row> using the corresponding parser
// DBT_PLAIN_BUFFER -> PlainBufferBlockParser
// DBT_SIMPLE_ROW_MATRIX -> SimpleRowMatrixBlockParser
PlainBufferBlockParser parser = new PlainBufferBlockParser(response.getRows());
List<Row> rows = parser.getRows();
System.out.println("Rows returned: " + rows.size());
for (Row row : rows) {
System.out.println(row);
}
// A non-null nextStartPrimaryKey indicates that more data remains and pagination must continue
System.out.println("Has next: " + (response.getNextStartPrimaryKey() != null));
Paramètres
Configuration de la requête
L'objet BulkExportRequest contient le paramètre suivant.
|
Nom |
Type |
Description |
|
bulkExportQueryCriteria (obligatoire) |
BulkExportQueryCriteria |
Les critères de lecture par plage. |
Critères de lecture par plage
Le champ BulkExportRequest.bulkExportQueryCriteria est de type BulkExportQueryCriteria et contient les paramètres suivants.
|
Nom |
Type |
Description |
|
tableName (obligatoire) |
String |
Le nom de la table de données. |
|
inclusiveStartPrimaryKey (obligatoire) |
PrimaryKey |
La clé primaire de début de la plage d'analyse. Si une ligne possède cette clé, elle est incluse dans la réponse. Accepte une clé primaire valide ou un point virtuel construit à partir de |
|
exclusiveEndPrimaryKey (obligatoire) |
PrimaryKey |
La clé primaire de fin de la plage d'analyse. La ligne associée à cette clé n'est jamais incluse dans la réponse, qu'elle existe ou non. Accepte une clé primaire valide ou un point virtuel construit à partir de |
|
columnsToGet (facultatif) |
Set<String> |
L'ensemble des noms de colonnes à renvoyer. Si ce paramètre n'est pas défini, toutes les colonnes de chaque ligne sont renvoyées. Lorsqu'il est défini, la réponse inclut uniquement les colonnes existantes de chaque ligne. Si une ligne ne contient aucune des colonnes spécifiées, elle est exclue de la réponse. |
|
filter (facultatif) |
Filter |
Un filtre côté serveur appliqué après la sélection des colonnes. Si vous spécifiez à la fois Pour plus d'informations sur la configuration du filtre, consultez la rubrique Utilisation des filtres. |
|
dataBlockType (facultatif) |
DataBlockType |
L'encodage du bloc de données de la réponse. Valeurs valides : |
Réponse
Résultat de la lecture
L'objet BulkExportResponse contient les champs spécifiques à l'opération suivants.
|
Nom |
Type |
Description |
|
rows |
ByteBuffer |
Les données des lignes encodées. Utilisez l'analyseur correspondant au |
|
nextStartPrimaryKey |
PrimaryKey |
La clé primaire de début pour la lecture suivante. Une valeur |
|
dataBlockType |
DataBlockType |
L'encodage des données des lignes renvoyées. |
|
bodyBytes |
long |
Le nombre d'octets dans le corps de la réponse. |
Exemples
Parcourir une table entière par pagination
Un seul appel bulkExport renvoie souvent seulement une partie de la plage. Pour analyser la table entière, transmettez la valeur nextStartPrimaryKey de chaque réponse comme clé primaire de début de l'appel suivant. Arrêtez lorsque nextStartPrimaryKey est null.
String tableName = "bulk_export_demo";
PrimaryKey startPk = PrimaryKeyBuilder.createPrimaryKeyBuilder()
.addPrimaryKeyColumn("pk", PrimaryKeyValue.fromString("row00"))
.build();
PrimaryKey endPk = PrimaryKeyBuilder.createPrimaryKeyBuilder()
.addPrimaryKeyColumn("pk", PrimaryKeyValue.fromString("row99"))
.build();
int totalRows = 0;
while (startPk != null) {
BulkExportQueryCriteria criteria = new BulkExportQueryCriteria(tableName);
criteria.setInclusiveStartPrimaryKey(startPk);
criteria.setExclusiveEndPrimaryKey(endPk);
criteria.setDataBlockType(DataBlockType.DBT_PLAIN_BUFFER);
BulkExportResponse response = client.bulkExport(new BulkExportRequest(criteria));
PlainBufferBlockParser parser = new PlainBufferBlockParser(response.getRows());
List<Row> rows = parser.getRows();
totalRows += rows.size();
// A null nextStartPrimaryKey indicates that all data has been read
startPk = response.getNextStartPrimaryKey();
}
System.out.println("Total rows scanned: " + totalRows);