Si la API GetRange devuelve datos fuera del rango especificado, cree un índice secundario para reordenar las claves principales y consulte el índice en lugar de la tabla base.
Síntomas
Al ejecutar consultas de rango mediante la consola, un SDK, tablas externas de Tablestore o Tablestore Reader, la API GetRange devuelve filas fuera del rango especificado.
Posibles causas
La condición de consulta no cumple con la regla de coincidencia de prefijo más a la izquierda.
Tablestore ordena físicamente las filas por columnas de clave principal según el orden definido en el esquema de la tabla. Un rango establecido en una columna de clave principal solo se respeta cuando todas las columnas anteriores tienen valores exactos (no rangos). Si alguna columna anterior utiliza un rango, los rangos definidos en las columnas siguientes se ignoran sin notificación.
Regla de coincidencia de prefijo más a la izquierda: qué funciona y qué no:
Funciona: Establecer un valor exacto para la primera columna de clave principal y un rango para la segunda columna devuelve únicamente las filas donde la segunda columna se encuentra dentro de ese rango.
No funciona: Establecer un rango para la primera columna de clave principal y un rango (o valor exacto) para la segunda columna provoca que se ignore la condición de la segunda columna.
Por ejemplo, si beginPrimaryKey = INF_MIN y endPrimaryKey = INF_MAX para la primera columna, y beginPrimaryKey = 10 y endPrimaryKey = 10 para la segunda columna, la consulta devuelve todas las filas de la tabla, no solo aquellas donde la segunda columna es igual a 10. Dado que el rango de la primera columna abarca todo el espacio de claves, la condición de la segunda columna no tiene efecto.
Soluciones
Cree un índice secundario para reordenar las claves principales de modo que la columna por la cual desea filtrar se convierta en la clave principal. Consulte directamente el índice secundario en lugar de la tabla base. Esto le permite aplicar una condición de rango efectiva sin modificar el esquema de su tabla.
Elija el enfoque que mejor se adapte a su escenario:
Consultas de rango desde la consola o SDK: Sin un índice secundario, debe examinar toda la tabla y descartar las filas no deseadas. Con un índice secundario, ejecute la consulta de rango directamente sobre el índice. Para instrucciones detalladas, consulte Use a secondary index from the console o Use a secondary index with an SDK.
Consultas de tablas externas de Tablestore: Establezca el nombre de la tabla en la instrucción
CREATE TABLEcomo el nombre del índice secundario. De esta forma, la consulta de la tabla externa se enruta a través del índice y la condición de rango se aplica correctamente. Para más detalles, consulte Tablestore foreign tables.Sincronización de datos con Tablestore Reader: Configure el nombre de la tabla en el script de sincronización como el nombre del índice secundario. Así, el trabajo de sincronización leerá desde el índice y respetará el rango definido. Para más detalles, consulte Configure Tablestore (OTS) Reader.