Crea un índice secundario global
Puedes usar vistas materializadas continuas como índices secundarios globales para las tablas.
Antes de leer esta página, familiarízate con las vistas materializadas continuas.
Por lo general, los datos de una tabla de Bigtable se indexan por claves de fila. Sin embargo, puedes crear una vista materializada continua a partir de una tabla de origen y usarla como un índice secundario global. Esto te permite recuperar los mismos datos con diferentes patrones de búsqueda de consultas consultando la vista materializada.
Un índice secundario global es una vista materializada continua que contiene un subconjunto de columnas de una tabla de origen, junto con una clave de fila que es diferente de la clave de fila de la tabla de origen. Estas claves de fila pueden basarse en las siguientes transformaciones que permiten que tu aplicación recupere los mismos datos según diferentes patrones de búsqueda de consultas:
- Son los atributos dentro de la tabla de origen, como los calificadores de columna, los valores de columna o las partes de la clave de fila de origen.
- Es un cambio de formato de la clave de fila.
- Es una transformación que combina la clave de fila con un atributo.
Bigtable sincroniza los índices secundarios globales con la tabla de origen automáticamente de una manera eventualmente coherente.
Cuándo usar un índice secundario global
A menudo, las aplicaciones necesitan consultar los mismos datos con diferentes patrones o atributos de búsqueda. Por ejemplo, considera una aplicación que recupera información del usuario por la dirección de correo electrónico o un número de teléfono. Es posible que desees el mismo nivel de rendimiento en ambos patrones de búsqueda. Si conviertes la dirección de correo electrónico en la clave de fila de Bigtable y almacenas los números de teléfono en una columna, el rendimiento de la búsqueda de números de teléfono será más lento porque requiere un análisis completo de la tabla.
Para mejorar el rendimiento de las consultas cuando se busca por número de teléfono, puedes crear una vista materializada continua con una instrucción de SQL. La instrucción de SQL le indica a Bigtable cómo reestructurar tus datos con una clave de fila diferente. Una vista materializada continua actúa como una tabla que puedes consultar. Luego, usa la vista como un índice secundario global. Esto le brinda a tu aplicación otra ruta de acceso a los mismos datos. Cada ruta usa una clave de fila diferente, por lo que puedes elegir una ruta alternativa para cada búsqueda. Para elegir la mejor ruta para tu consulta, comprende la estructura de la clave de fila de cada tabla y los datos que almacena cada tabla.
Usar una vista materializada continua como índice secundario global puede mejorar el rendimiento de las consultas en los siguientes casos de uso:
- Cambio de clave de tus datos: Si necesitas consultar tus datos con una clave diferente de las claves de fila de la tabla de origen, puedes crear una vista materializada continua con la clave alternativa y realizar consultas en esa vista.
- Filtrado de datos: Si deseas filtrar la tabla de origen y propagar solo filas específicas de datos en el índice secundario global, proporciona una cláusula
WHERE
en la consulta en SQL que define la vista. - Claves de atributos: Si necesitas consultar tus datos en función de un atributo que no sea clave, como un calificador o un valor de columna, puedes incluirlo en tu cláusula
ORDER BY
.
Acerca de los índices secundarios globales
Para usar una vista materializada continua en Bigtable como un índice secundario global, ten en cuenta los siguientes requisitos:
- La clave de fila de un nuevo índice secundario global debe incluir la clave de fila de la tabla de origen para garantizar una asignación uno a uno entre las filas de la tabla de origen y las filas del índice secundario global de la vista materializada continua.
- El índice secundario global no tiene que tener el mismo esquema o atributos que la tabla de origen. En la parte
SELECT
de la consulta en SQL, debes especificar qué columnas de la tabla son necesarias y qué transformaciones de SQL de los datos deseas aplicar. - El índice secundario global solo necesita copiar los datos que necesitas para el patrón de búsqueda. No es necesario proporcionar todos los datos de origen en la tabla de origen.
- En Bigtable, la clave de fila que elijas proporciona el orden de clasificación predeterminado.
Para consultar índices secundarios globales, ten en cuenta los siguientes requisitos:
- Todas las columnas de la cláusula
ORDER BY
también deben incluirse en la cláusulaSELECT
. - Una vez que definas el índice secundario global, tu aplicación debe poder elegir entre consultar la tabla de origen o la vista materializada que representa el índice secundario global.
- Las aplicaciones no escriben directamente en el índice, que se sincroniza continuamente con la tabla de origen. Siempre escribe en la tabla de origen.
- El índice secundario global es coherente de forma eventual: los datos se escriben primero en la tabla de origen y, luego, se transforman al formato del índice secundario global.
- Te recomendamos que crees un índice de cobertura. Para obtener más información, consulta la sección Índices de cobertura de este documento.
- La cláusula
ORDER BY
debe contener la clave de fila sin modificar de la tabla de origen, y todos los datos deben ordenarse de forma ascendente. La clave de fila en la tabla de origen siempre se proyecta en la vista materializada; sin embargo, se puede combinar con otros atributos. - Las columnas de la cláusula
ORDER BY
pasan a formar parte de la clave de fila estructurada del índice secundario global. Todos los demás valores de las columnas seleccionadas se convierten en valores de columnas no clave en el índice secundario global. Si conviertes un valor en la cláusulaORDER BY
a un tipo de datos específico de GoogleSQL para Bigtable, este conservará su tipo de datos en la clave de fila estructurada del índice secundario global.
Índices de cobertura
Un índice de cobertura incluye todas las columnas que necesitan tus consultas. Cuando consultas un índice de cobertura, Bigtable puede recuperar todos los datos necesarios directamente del índice, sin tener que acceder a la tabla de origen. Recomendamos este enfoque para obtener un rendimiento óptimo, ya que minimiza la cantidad de lecturas de disco. Para crear un índice de cobertura, asegúrate de que tu instrucción SELECT
especifique todas las columnas que necesitas en tus consultas.
Cuando desees crear un índice no de cobertura, consulta el índice y, luego, usa los resultados para buscar las columnas adicionales que necesites de la tabla de origen.
Cómo definir un índice secundario global
Para crear un índice secundario global, crea una vista materializada continua con una consulta en SQL que defina el índice secundario global.
En el siguiente ejemplo, la consulta en SQL crea un índice secundario global que te permite consultar los datos de las interacciones de los usuarios. La cláusula ORDER BY
define la clave de fila estructurada del índice secundario global, con una combinación del número de teléfono, el ID de usuario y la dirección de correo electrónico del usuario. También asigna el nombre interactions
a la familia de columnas activity
:
SELECT
user['phone'] AS phone,
CAST(user['id'] AS INT64) AS user_id,
_key AS email,
activity AS interactions
FROM CLICKS_TABLE
ORDER BY 1, 2, 3;
En la siguiente tabla, se explica cómo se crea el índice comparando la vista de la misma fila en la tabla de origen con el índice secundario global correspondiente:
Fila de la tabla de origen | Fila del índice secundario global |
---|---|
Clave de fila: _key : user1@example.com Atributos: user : {id: "123", phone: "555-123-4567"} activity : {action: "CLICKED_PRODUCT_A"} |
Clave de fila estructurada: phone : 555-123-4567 user_id : 123 email : user1@example.com Atributo: interactions : {action: "CLICKED_PRODUCT_A"} |
Clave de fila: _key : user2@example.com Atributos: user : {id: "456", phone: "555-987-6543"} activity : {action: "VIEWED_PRODUCT_B"} |
Clave de fila estructurada: phone : 555-987-6543 user_id : 456 email : user2@example.com Atributo: interactions : {action: "VIEWED_PRODUCT_B"} |
Clave de fila: _key : user3@example.com Atributos: user : {id: "1000", phone: "555-111-2222"} activity : {action: "ADDED_TO_CART_PRODUCT_C"} |
Clave de fila estructurada: phone : 555-111-2222 user_id : 1000 email : user3@example.com Atributo: interactions : {action: "ADDED_TO_CART_PRODUCT_C"} |
Limitaciones
- Para leer la clave de salida, que es la clave del índice secundario global, solo puedes usar consultas de SQL.
¿Qué sigue?
- Consultas de vistas materializadas continuas
- Crea y administra vistas materializadas continuas
- Prácticas recomendadas sobre el diseño del esquema
- Administra clave de fila de fila
- Recuento distribuido en Bigtable