Si no requiere un orden específico en los resultados de consulta, utilice la función de exploración paralela para obtenerlos de manera eficiente.
Requisitos previos
Una instancia de OTSClient inicializada. Para más información, consulte Initialize an OTSClient instance.
Una tabla de datos creada con información escrita en ella. Para más información, consulte Create data tables y Write data.
Un índice de búsqueda creado para la tabla de datos. Para más información, consulte Create a search index.
Parámetros
|
Parámetro |
Descripción |
|
|
tableName |
Nombre de la tabla de datos. |
|
|
indexName |
Nombre del índice de búsqueda. |
|
|
scanQuery |
query |
Instrucción de consulta para el índice de búsqueda. La operación admite consultas por término, consultas difusas, consultas por rango, consultas geográficas y consultas anidadas, similares a las de la operación Search. |
|
limit |
Número máximo de filas que devuelve cada llamada a ParallelScan. |
|
|
maxParallel |
Cantidad máxima de tareas de exploración paralela por solicitud. Este valor varía según el volumen de datos; a mayor volumen, se requieren más tareas paralelas. Utilice la operación ComputeSplits para consultar el límite máximo permitido por solicitud. |
|
|
currentParallelId |
Identificador de la tarea de exploración paralela en la solicitud. Valores válidos: [0, Valor de maxParallel). |
|
|
token |
Token utilizado para paginar los resultados de la consulta. La respuesta de ParallelScan incluye el token correspondiente a la página siguiente, el cual permite recuperar dicha página. |
|
|
aliveTime |
Periodo de validez de la tarea de exploración paralela actual, que coincide con la vigencia del token. Unidad: segundos. Valor predeterminado: 60. Se recomienda mantener este valor. Si no se envía una nueva solicitud dentro del periodo establecido, ya no será posible consultar más datos. El tiempo de validez del token se renueva con cada solicitud enviada. Nota
Las sesiones caducan antes de lo previsto si se modifican dinámicamente los índices de conmutación en los esquemas, falla un servidor individual o se ejecuta un balanceo de carga en el lado del servidor. En estos casos, debe recrear las sesiones. |
|
|
columnsToGet |
Nombre de la columna que se devolverá en el resultado de agrupación. Agregue el nombre de la columna a Columns. Si desea devolver todas las columnas del índice de búsqueda, utilice la operación ReturnAllFromIndex, que ofrece una sintaxis más concisa. Importante
No es posible usar ReturnAll en este contexto. |
|
|
sessionId |
Identificador de sesión de la tarea de exploración paralela. Llame a la operación ComputeSplits para crear una sesión y consultar la cantidad máxima de tareas paralelas admitidas en la solicitud. |
|
Ejemplos
A continuación se muestra un código de ejemplo para realizar una exploración paralela:
// 1. Obtain the session ID.
let computeSplits = await new Promise((resolve, reject) => {
client.computeSplits({
tableName: tableName,
searchIndexSplitsOptions: {
indexName: indexName,
}
}, function (err, data) {
if (err) {
console.log('computeSplits error:', err.toString());
reject(err);
} else {
console.log('computeSplits success:', data);
resolve(data)
}
})
})
// 2. Specify query conditions.
const scanQuery = {
query: {
queryType: TableStore.QueryType.MATCH_ALL_QUERY,
},
limit: 1000,
aliveTime: 30,
token: undefined,
currentParallelId: 0,
maxParallel: 1,
}
// 3. Create a ParallelScan request. In this example, a synchronous request is created. You can create an asynchronous request based on your business requirement.
const parallelScanPromise = function () {
return new Promise(function (resolve, reject) {
client.parallelScan({
tableName: tableName,
indexName: indexName,
columnToGet: {
returnType: TableStore.ColumnReturnType.RETURN_ALL_FROM_INDEX,
},
sessionId: computeSplits.sessionId,
scanQuery: scanQuery,
}, function (err, data) {
if (err) {
console.log('parallelScan error:', err.toString());
reject(err);
} else {
console.log("parallelScan, rows:", data.rows.length)
resolve(data)
}
});
})
}
let totalCount = 0 // Specify that the total number of rows that meet the query conditions is returned.
let parallelScanResponse = await parallelScanPromise()
totalCount = totalCount + parallelScanResponse.rows.length
// 4. Pull data by using an iterator until all data is pulled.
while (parallelScanResponse.nextToken !== null && parallelScanResponse.nextToken.length > 0) {
scanQuery.token = parallelScanResponse.nextToken
parallelScanResponse = await parallelScanPromise()
totalCount += parallelScanResponse.rows.length
}
console.log("total rows:", totalCount)
Preguntas frecuentes
What do I do if no data can be found by calling the Search operation?
Referencias
-
Los índices de búsqueda admiten los siguientes tipos de consulta: term query, terms query, match all query, match query, match phrase query, prefix query, range query, wildcard query, Boolean query, geo query, nested query, vector query y exists query. Seleccione el tipo adecuado según sus necesidades empresariales.
Para ordenar o paginar las filas que cumplen con los criterios de consulta, utilice la función de ordenamiento y paginación. Para más información, consulte Sorting and paging.
Si necesita reducir el conjunto de resultados con base en una columna específica, emplee la función de colapso (distinct). De esta forma, los datos del tipo especificado aparecerán solo una vez en los resultados. Para más información, consulte Collapse (distinct).
Para analizar datos en una tabla, como obtener valores extremos, sumas o el número total de filas, ejecute operaciones de agregación o instrucciones SQL. Para más información, consulte Aggregation y SQL query.
Si requiere obtener rápidamente todas las filas que cumplen con los criterios sin necesidad de ordenarlas, llame a las operaciones ParallelScan y ComputeSplits para aprovechar la exploración paralela. Para más información, consulte Parallel scan.