Crear un índice secundario asíncrono

Puedes usar vistas materializadas continuas como índices secundarios asíncronos de tablas.

Antes de leer esta página, familiarízate con las vistas materializadas continuas.

Los datos de una tabla de Bigtable suelen indexarse por claves de fila. Sin embargo, puede crear una vista materializada continua a partir de una tabla de origen y usarla como índice secundario asíncrono. De esta forma, puedes recuperar los mismos datos usando diferentes patrones de búsqueda de consultas consultando 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 en función de diferentes patrones de búsqueda de consultas:

  • Atributos de la tabla de origen, como los calificadores de columna, los valores de columna o las partes de la clave de fila de origen.
  • Se ha reformateado la clave de fila.
  • 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 forma eventualmente coherente.

Cuándo usar un índice secundario asíncrono

Las aplicaciones suelen tener que consultar los mismos datos con diferentes patrones de búsqueda o atributos. Por ejemplo, supongamos que tienes una aplicación que obtiene información de los usuarios a través de su dirección de correo o su número de teléfono. Puede que quieras que el rendimiento sea el mismo en ambos patrones de consulta. Si usas la dirección de correo como 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 al buscar por número de teléfono, puede crear una vista materializada continua con una instrucción SQL. La instrucción SQL indica a Bigtable cómo reestructurar los datos con otra clave de fila. Una vista materializada continua funciona como una tabla que puedes consultar. Después, puedes usar la vista como índice secundario asíncrono. Proporciona 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, debes conocer 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 asíncrono puede mejorar el rendimiento de las consultas en los siguientes casos prácticos:

  • Volver a cifrar los datos: si necesitas consultar tus datos con una clave diferente a las claves de fila de la tabla de origen, puedes crear una vista materializada continua con la clave alternativa y consultar esa vista.
  • Filtrar datos: si quieres filtrar la tabla de origen y rellenar solo filas de datos específicas en el índice secundario asíncrono, proporciona una cláusula WHERE en la consulta SQL que defina la vista.
  • Claves de atributo: si necesita consultar sus datos en función de un atributo que no sea una clave, como un calificador o un valor de columna, puede incluirlo en la cláusula ORDER BY.

Acerca de los índices secundarios asíncronos

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

  • La clave de fila de un nuevo índice secundario asíncrono debe incluir la clave de fila de la tabla de origen para ayudar a asegurar una asignación individual 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 por qué tener el mismo esquema ni los mismos atributos que la tabla de origen. En la parte SELECT de la consulta SQL, debe especificar qué columnas de la tabla son necesarias y qué transformaciones de SQL quiere aplicar a los datos.
  • El índice secundario asíncrono solo necesita copiar los datos que necesites 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, ten en cuenta los siguientes requisitos:

  • Todas las columnas de la cláusula ORDER BY también deben incluirse en la cláusula SELECT.
  • Una vez que hayas definido 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. Escribir siempre en la tabla de origen.
  • El índice secundario asíncrono tiene una coherencia eventual: los datos se escriben primero en la tabla de origen y, a continuación, se transforman al formato del í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 de forma ascendente. La clave de fila de la tabla de origen siempre se proyecta en la vista materializada, pero 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 asíncrono. Todas las demás columnas seleccionadas se convierten en valores de columna no clave en el índice secundario asíncrono. Si convierte un valor de la cláusula ORDER BY a un tipo de datos específico de GoogleSQL para Bigtable, conservará 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 necesarios directamente del índice, sin tener que acceder a la tabla de origen. Recomendamos este método para obtener un rendimiento óptimo, ya que minimiza el número de lecturas de disco. Para crear un índice de cobertura, asegúrate de que la instrucción SELECT especifique todas las columnas que necesites en tus consultas.

Si quieres crear un índice no de cobertura, consulta el índice y, a continuación, usa los resultados para buscar las columnas adicionales que necesites de la tabla de origen.

Definir un índice secundario asíncrono

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

En el siguiente ejemplo, la consulta SQL crea un índice secundario asíncrono que le permite consultar 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 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 del índice secundario asíncrono, solo puedes usar consultas SQL.

Siguientes pasos