Crea un índice secundario asíncrono

Puedes usar vistas materializadas continuas como índices secundarios asíncronos para 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 asíncrono. Esto te permite recuperar los mismos datos con diferentes patrones de búsqueda de consultas mediante la consulta de la vista materializada.

Un índice secundario asíncrono 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:

  • Atributos dentro de la tabla de origen, como calificadores de columna, valores de columna o partes de la clave de fila de origen
  • Un cambio de formato de la clave de fila
  • Una transformación que combina la clave de fila con un atributo

Bigtable sincroniza los índices secundarios asíncronos con la tabla de origen automáticamente de una manera que es coherente en algún momento.

Cuándo usar un índice secundario asíncrono

Las aplicaciones suelen necesitar 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 consulta. Si conviertes la dirección de correo electrónico en tu clave de fila de Bigtable y almacenas números de teléfono en una columna, el rendimiento de la búsqueda de números de teléfono es más lento porque requiere un análisis completo de la tabla.

Para mejorar el rendimiento de las consultas cuando se busca por un 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, usas la vista como un índice secundario asíncrono. 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 consulta. Para elegir la mejor ruta para tu consulta, comprende la estructura de la clave de fila para cada tabla y los datos que almacena cada tabla.

El uso de una vista materializada continua como un índice secundario asíncrono 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 asíncrono, proporciona una WHERE cláusula en la consulta en SQL que define la vista.
  • Claves de atributo: Si necesitas consultar tus datos en función de un atributo que no sea clave, como un calificador de columna o valor, puedes incluirlo en tu ORDER BY cláusula.

Acerca de los índices secundarios asíncronos

Para usar una vista materializada continua en Bigtable como un índice secundario asíncrono, considera los siguientes requisitos:

  • La clave de fila de un índice secundario asíncrono nuevo debe incluir la clave de fila de la tabla de origen para ayudar a garantizar una asignación de uno a uno entre las filas de la tabla de origen y las filas del índice secundario asíncrono de la vista materializada continua.
  • El índice secundario asíncrono no tiene que tener el mismo esquema ni los mismos 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 las transformaciones de SQL de los datos que deseas aplicar.
  • El índice secundario asíncrono solo necesita copiar los datos que necesitas para el patrón de consulta. 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 asíncronos, considera los siguientes requisitos:

  • Cada columna de la cláusula ORDER BY también debe incluirse en la cláusula SELECT.
  • Una vez que definas el índice secundario asíncrono, tu aplicación debe poder elegir entre consultar la tabla de origen o la vista materializada que representa el índice secundario asíncrono.
  • 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 asíncrono es coherente en algún momento; los datos se escriben primero en la tabla de origen y, luego, se transforman al formato de índice secundario asíncrono.
  • 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 en orden ascendente. La clave de fila de 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 forman parte de la clave de fila estructurada del índice secundario asíncrono. Todas las demás columnas seleccionadas se convierten en valores de columna que no son clave en el índice secundario asíncrono. Si conviertes un valor en la ORDER BY cláusula a un tipo de datos específico de GoogleSQL para Bigtable, conserva su tipo de datos en la clave de fila estructurada del índice secundario asíncrono.

Í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 requeridos 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 que no sea de cobertura, consulta el índice y, luego, usa los resultados para buscar las columnas adicionales que necesitas de la tabla de origen.

Define un índice secundario asíncrono

Para crear un índice secundario asíncrono, crea una vista materializada continua con una consulta en SQL que defina el índice secundario asíncrono.

En el ejemplo que se muestra aquí, la consulta en SQL crea un índice secundario asíncrono que permite consultar los datos de interacciones de los usuarios. La cláusula ORDER BY define la clave de fila estructurada del índice secundario asíncrono, que usa 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 asíncrono correspondiente:

Fila de la tabla de origen Fila de índice secundario asíncrono
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 de índice secundario asíncrono, solo puedes usar consultas SQL.

¿Qué sigue?