Introducción a la búsqueda en BigQuery

Los índices de búsqueda de BigQuery te permiten usar GoogleSQL para encontrar de forma eficiente elementos de datos únicos pedidos en el texto no estructurado y en datos JSON semiestructurados, sin tener que conocer los esquemas de tabla con anticipación.

Con los índices de búsqueda, BigQuery proporciona una potente tienda de columnas y una búsqueda de texto en una plataforma, lo que permite realizar búsquedas en filas eficientes cuando necesitas encontrar filas de datos individuales. Un caso de uso común es el análisis de registros. Por ejemplo, es posible que desees identificar las filas de datos asociadas con un usuario para los informes del Reglamento General de Protección de Datos (GDPR) o encontrar códigos de error específicos en una carga útil de texto.

BigQuery almacena y administra tus índices, de modo que, cuando los datos están disponibles en BigQuery, puedes recuperarlos de inmediato con la función SEARCH o con otros operadores y funciones, como los operadores igual (=), IN o LIKEy ciertas funciones de cadena y JSON. Para optimizar tus búsquedas, consulta las prácticas recomendadas.

Casos de uso

Los índices de búsqueda de BigQuery te ayudan a realizar las siguientes tareas:

  • Busca los registros del sistema, red o aplicaciones almacenados en tablas de BigQuery.
  • Identificar los elementos de datos que se deben borrar para cumplir con los procesos regulatorios.
  • Respalda la solución de problemas de los desarrolladores.
  • Realiza auditorías de seguridad.
  • Crea un panel que requiera filtros de búsqueda altamente selectivos.
  • Busca datos procesados con anterioridad para coincidencias exactas.

Para obtener más información, consulta Crea un índice de búsqueda y Busca con un índice.

Precios

No se aplican cargos por el procesamiento necesario para compilar y actualizar los índices de búsqueda cuando el tamaño total de las tablas indexadas en tu organización está por debajo del límite de tu región. A fin de admitir la indexación más allá de este límite, debes proporcionar tu propia reserva para controlar los trabajos de administración de índices. Los índices de búsqueda generan costos de almacenamiento cuando están activos. Puedes encontrar el tamaño del almacenamiento de índices en la vista INFORMATION_SCHEMA.SEARCH_INDEXES.

Funciones y permisos

Para crear un índice de búsqueda, necesitas el permiso de IAM bigquery.tables.createIndex en la tabla en la que creas el índice. Para descartar un índice de búsqueda, necesitas el permiso bigquery.tables.deleteIndex. Cada uno de los siguientes roles predefinidos de IAM incluye los permisos que necesitas para trabajar con índices de búsqueda:

  • Propietario de datos de BigQuery (roles/bigquery.dataOwner)
  • Editor de datos de BigQuery (roles/bigquery.dataEditor)
  • BigQuery Admin (roles/bigquery.admin)

Limitaciones

  • No puedes crear un índice de búsqueda directamente en una vista o una vista materializada, pero si llamas a la función SEARCH en una vista de una tabla indexada, se usará el índice de búsqueda subyacente.
  • Si cambias el nombre de una tabla después de crear un índice de búsqueda, el índice deja de ser válido.
  • La función SEARCH está diseñada para las búsquedas de puntos. La búsqueda parcial, la corrección de tipografía, los comodines y otros tipos de búsquedas de documentos no están disponibles.
  • Si el índice de búsqueda aún no tiene una cobertura del 100%, se te cobra por todo el almacenamiento de índices que se informa en la vista INFORMATION_SCHEMA.SEARCH_INDEXES.
  • BigQuery BI Engine no acelera las consultas que contienen la función SEARCH.
  • Los índices de búsqueda no se usan cuando una declaración DML modifica la tabla indexada, pero sí se pueden usar cuando el predicado que se puede optimizar con los índices de búsqueda forma parte de una subconsulta en una declaración DML.

    • No se usa un índice de búsqueda en la siguiente consulta:
    DELETE FROM my_dataset.indexed_table
    WHERE SEARCH(user_id, '123');
    • Se puede usar un índice de búsqueda en la siguiente consulta:
    DELETE FROM my_dataset.other_table
    WHERE
      user_id IN (
        SELECT user_id
        FROM my_dataset.indexed_table
        WHERE SEARCH(user_id, '123')
      );
  • Los índices de búsqueda no se usan cuando la consulta hace referencia a vistas materializadas.

  • Los índices de búsqueda no se usan en una consulta de transacción de varias declaraciones.

¿Qué sigue?