Consulta datos de Cloud Bigtable

En esta página, se describe cómo usar BigQuery para consultar datos almacenados en Cloud Bigtable.

Cloud Bigtable es la base de datos NoSQL poco poblada de Google que puede escalar a miles de millones de filas, miles de columnas y petabytes de datos. Cloud Bigtable tiene un modelo de datos similar a Apache HBase y proporciona una biblioteca cliente compatible con HBase. Para obtener más información sobre el modelo de datos de Cloud Bigtable, consulta Modelo de almacenamiento.

Regiones y zonas compatibles

Por el momento, la consulta de datos en Cloud Bigtable está disponible solo en las regiones y zonas siguientes:
Región Zonas
us-central1

us-central1-a

us-central1-b

us-central1-c

us-central1-f

europe-west1

europe-west1-b

europe-west1-c

europe-west1-d

Recupera el URI de Cloud Bigtable

Con el fin de crear una tabla externa para una fuente de datos de Cloud Bigtable, tienes que proporcionar el URI de Cloud Bigtable. Si quieres recuperar el URI de Cloud Bigtable, sigue estos pasos:

  1. Abre la consola de Cloud Bigtable.

    Abrir la consola de Cloud Bigtable

  2. Recupera los detalles siguientes sobre tu fuente de datos de Cloud Bigtable:

    • Tu ID del proyecto
    • Tu ID de instancia de Cloud Bigtable
    • El nombre de tu tabla de Cloud Bigtable
  3. Redacta el URI de Cloud Bigtable con el formato a continuación, en el que se encuentra la siguiente información:

    • project_id es el proyecto que contiene tu instancia de Cloud Bigtable.
    • instance_id es el ID de instancia de Cloud Bigtable.
    • table_name es el nombre de la tabla que consultas.

    https://googleapis.com/bigtable/projects/project_id/instances/instance_id/tables/table_name

Controles de acceso y alcances

Controles de acceso para tablas externas permanentes

Puedes compartir el acceso a una tabla externa permanente vinculada a una fuente de datos de Cloud Bigtable. No puedes compartir acceso a una tabla externa temporal.

Puedes compartir acceso a una tabla externa permanente con usuarios (incluso a cuentas de servicio) o grupos. Para consultar la tabla externa, tus usuarios o grupos necesitan (como mínimo) lo siguiente:

  • La función bigquery.dataViewer a nivel del conjunto de datos o superior para acceder al conjunto de datos que contiene la tabla externa
  • La función bigquery.user a nivel de proyecto o superior para ejecutar trabajos de consulta
  • La función bigtable.reader en Cloud Bigtable que proporciona acceso de solo lectura a metadatos y tablas

Alcances para instancias de Compute Engine

Cuando creas una instancia de Compute Engine, puedes especificar una lista de alcances para la instancia. Los alcances controlan el acceso de la instancia a los productos de Google Cloud Platform, incluido Cloud Bigtable. Las aplicaciones que se ejecutan en la VM usan la cuenta de servicio para llamar a las API de Google Cloud Platform.

Si configuras una instancia de Compute Engine de modo que se ejecute como la cuenta de servicio, y que esa cuenta de servicio acceda a una tabla externa vinculada a una fuente de datos de Cloud Bigtable, debes agregar a la instancia el nivel de acceso a los datos de solo lectura de Cloud Bigtable (https://www.googleapis.com/auth/bigtable.data.readonly). Si quieres obtener más información, consulta la página sobre cómo crear una instancia de Compute Engine para Cloud Bigtable.

Para obtener más información acerca de cómo aplicar alcances a una instancia de Compute Engine, consulta la página sobre cómo cambiar la cuenta de servicio y los niveles de acceso de una instancia. Para obtener más información sobre las cuentas de servicio de Compute Engine, consulta la sección sobre las cuentas de servicio.

Tablas externas permanentes y temporales

Puedes consultar una fuente de datos externa en BigQuery; para ello, usa una tabla permanente o una temporal. Una tabla permanente es una tabla que se crea en un conjunto de datos y está vinculada a tu fuente de datos externa. Debido a que la tabla es permanente, puedes usar controles de acceso a nivel de conjunto de datos para compartirla con otras personas que también tengan acceso a la fuente de datos externa subyacente y consultarla en cualquier momento.

Cuando consultas una fuente de datos externa con una tabla temporal, envías un comando que incluye una consulta y crea una tabla no permanente vinculada a la fuente de datos externa. Cuando usas una tabla temporal, no se crea una tabla en uno de tus conjuntos de datos de BigQuery. Debido a que la tabla no se almacena de forma permanente en un conjunto de datos, no puede compartirse con otras personas. Consultar una fuente de datos externa con una tabla temporal es útil para las consultas únicas ad-hoc sobre datos externos o procesos de extracción, transformación y carga (ETL).

Consulta datos de Cloud Bigtable con tablas externas permanentes

Para consultar una fuente de datos de Cloud Bigtable por medio de una tabla permanente, debes crear una tabla en un conjunto de datos de BigQuery vinculado a tu fuente de datos de Cloud Bigtable. Los datos no se almacenan en la tabla de BigQuery. Debido a que la tabla es permanente, puedes usar controles de acceso a nivel de conjunto de datos para compartirla con otras personas que también tienen acceso a la fuente de datos subyacente de Cloud Bigtable.

Cuando creas una tabla externa permanente en BigQuery vinculada a una fuente de datos de Cloud Bigtable, hay dos formas de especificar el esquema de la tabla:

  • Si usas la API o la CLI, debes crear un archivo de definición de tabla que defina el esquema y los metadatos para la fuente de datos externa.
  • Si usas GCP Console o la IU web clásica de BigQuery, ingresa de forma manual la familia de columnas y los calificadores de Cloud Bigtable.

Para consultar los datos de Cloud Bigtable mediante una tabla externa permanente, debes realizar lo siguiente:

  • Crea un archivo de definición de tabla (para la CLI o la API).
  • Crea una tabla en BigQuery vinculada a la fuente de datos externa.
  • Consulta los datos con la tabla permanente.

Crea y consulta una tabla externa permanente

Con el fin de crear y consultar una tabla externa permanente, sigue estos pasos:

Console

Por el momento, no es posible consultar datos de Cloud Bigtable con GCP Console.

IU clásica

  1. Ve a la IU web de BigQuery.
    Ir a la IU web de BigQuery

  2. En el panel de navegación, pasa el cursor sobre un conjunto de datos, haz clic en el ícono de flecha hacia abajo imagen del ícono de flecha hacia abajo y, luego, en Crear tabla nueva (Create new table).

  3. En la página Crear tabla (Create Table), en la sección Datos fuente (Source Data), haz lo siguiente:

    • En Ubicación (Location), selecciona Google Cloud Bigtable y en el campo de fuente, ingresa el URI de Cloud Bigtable en el siguiente formato: https://googleapis.com/bigtable/projects/project_id/instances/instance_id/tables/table_name, donde project_id es el proyecto que contiene la instancia de Cloud Bigtable, instance_id es el ID de la instancia de Cloud Bigtable y table_name es el nombre de la tabla que consultas.
    • En Formato de archivo (File format), verifica que Cloud Bigtable esté seleccionado.
  4. En la página Crear tabla (Create Table), en la sección Tabla de destino (Destination Table), haz lo siguiente:

    • Para el Nombre de tabla (Table name), elige el conjunto de datos apropiado y, en el campo de nombre de tabla, ingresa el nombre de la tabla permanente que estás creando en BigQuery.
    • Verifica que el Tipo de tabla esté configurado como Tabla externa.
  5. En el recuadro Familia de columnas y calificadores (Column Family and Qualifiers), usa Agregar familia (Add Family) para especificar las familias de columnas y calificadores o haz clic en Editar como texto (Edit as text) y, luego, ingresa un arreglo de JSON de familias de columnas y calificadores. Esta lista restringe las familias de columnas a las que se puede hacer referencia en las consultas y especifica sus tipos de valores. Por ejemplo:

      [
        {
          "familyId": "family_int",
          "type": "INTEGER",
          "encoding": "BINARY",
          "onlyReadLatest": "true",
          "columns": [
            {
              "qualifierString": "foo",
              "onlyReadLatest": "true"
            }
          ]
        }
      ]
    
    Puedes usar la lista de calificador de columna a fin de hacer conversiones de tipo. Si dejas la lista vacía, todas las familias de columnas se incluyen en el esquema de la tabla y sus valores se leen como BYTES. Para obtener más información, consulta las opciones de Cloud Bigtable en el documento de la API externalDataConfiguration.

  6. Selecciona los elementos aplicables en la sección Opciones (Options) y haz clic en Crear tabla (Create Table).

Después de crear la tabla permanente, puedes ejecutar una consulta en ella como si fuera una tabla nativa de BigQuery. Una vez completa tu consulta, puedes exportar los resultados como archivos CSV o JSON, guardar los resultados como una tabla o en Hojas de cálculo de Google.

CLI

Debes usar el comando bq mk para crear una tabla en la herramienta de línea de comandos de BigQuery. Cuando usas la CLI para crear una tabla vinculada a una fuente de datos externa, puedes identificar el esquema de la tabla por medio de un archivo de definición de tabla.

  1. Usa el comando bq mk para crear una tabla permanente.

    bq mk \
    --external_table_definition=definition_file \
    dataset.table
    

    Donde:

    • definition_file es la ruta de acceso al archivo de definición de tabla en tu máquina local.
    • dataset es el nombre del conjunto de datos que contiene la tabla.
    • table es el nombre de la tabla que quieres crear.

    Luego, puedes ejecutar una consulta en la tabla como si fuera una tabla nativa de BigQuery, sujeta a las limitaciones para las fuentes de datos externas.

API

  • Para la propiedad sourceUris en el recurso de tabla, puedes especificar solo un URI de Cloud Bigtable, y debe ser una URL de HTTPS válida y especificada por completo.

  • Especifica las propiedades de formato de datos mediante la configuración de la propiedad sourceFormat. Para Cloud Bigtable, especifica "BIGTABLE".

Consulta datos de Cloud Bigtable con tablas externas temporales

Si quieres realizar una consulta sobre una fuente de datos externa sin crear una tabla permanente, debes ejecutar un comando que combine lo siguiente:

  • Un archivo de definición de tabla con una consulta
  • Una definición de esquema intercalado con una consulta
  • Un archivo de definición de esquema JSON con una consulta

Se emplea el archivo de definición de tabla o el esquema proporcionado para crear la tabla externa temporal y es en esta donde se ejecuta la consulta. La API y la CLI de BigQuery admiten las consultas en fuentes de datos externas con una tabla temporal.

Cuando usas una tabla externa temporal, no se crea una tabla en uno de los conjuntos de datos de BigQuery. Debido a que la tabla no se almacena de forma permanente en un conjunto de datos, no puede compartirse con otras personas. Consultar una fuente de datos externa con una tabla temporal es útil para las consultas únicas ad-hoc sobre datos externos o procesos de extracción, transformación y carga (ETL).

Crea y consulta una tabla externa temporal

Para consultar los datos de Cloud Bigtable mediante una tabla temporal externa, debes realizar lo siguiente:

En la actualidad, crear y consultar una tabla externa temporal es compatible con la CLI y la API.

CLI

Ingresa el comando bq query con la marca --external_table_definition para consultar una tabla temporal con un archivo de definición de tabla.

Proporciona la marca --location y configura el valor como tu ubicación (opcional).

bq --location=location query \
--use_legacy_sql=false \
--external_table_definition=table::definition_file \
'query'

Donde:

  • location es el nombre de tu ubicación. La marca --location es opcional.
  • table es el nombre de la tabla temporal que quieres crear.
  • definition_file es la ruta de acceso al archivo de definición de tabla en tu máquina local.
  • query es la consulta que quieres enviar a la tabla temporal.

Por ejemplo, con el comando siguiente, se crea y consulta una tabla temporal llamada follows por medio de un archivo de definición de tabla llamado follows_def.

bq query \
--use_legacy_sql=false \
--external_table_definition=follows::/tmp/follows_def \
'SELECT
  COUNT(rowkey)
 FROM
   follows'

API

  • Crea una consulta. Visita la página sobre cómo consultar datos para obtener información acerca de cómo crear un trabajo de consulta.

  • Especifica tu ubicación en la propiedad location, en la sección jobReference del recurso de trabajo (opcional).

  • Especifica las propiedades de la fuente de datos externa mediante la configuración de ExternalDataConfiguration para el recurso de tabla.

Consideraciones de rendimiento

El rendimiento de las consultas en las fuentes de datos externas de Cloud Bigtable depende de tres factores:

  • El número de filas
  • La cantidad de datos leídos
  • La extensión de la paralelización

BigQuery intenta leer la menor cantidad de datos posible y solo leer las familias de columnas referenciadas en la consulta. El alcance de la paralelización depende de la cantidad de nodos que tengas en tu clúster de Cloud Bigtable y cuántas divisiones tengas para tu tabla.

Ten en cuenta que Cloud Bigtable fusiona de forma automática las divisiones según la carga. Si tu tabla no se lee con frecuencia, con el tiempo, habrá menos divisiones y una degradación gradual en el rendimiento de la consulta. Para obtener más información sobre cómo dividir una tabla por clave de fila, consulta Administra tablas.

Consultar Cloud Bigtable desde BigQuery consume ciclos de CPU de Cloud Bigtable. El consumo de CPU por parte de BigQuery puede afectar la latencia y capacidad de procesamiento de otras solicitudes simultáneas, como la entrega de tráfico de usuarios en vivo. Por ejemplo, un uso alto de CPU en Cloud Bigtable afecta las consultas finales y aumenta la latencia al percentil 99.

Debes supervisar el uso de CPU de Cloud Bigtable para verificar que te encuentres dentro de los límites recomendados, como se indica en el panel de supervisión de Cloud Bigtable en GCP Console. Aumentar el número de nodos para tu instancia te permite controlar mejor el tráfico de BigQuery y el tráfico de otras solicitudes simultáneas.

Esquema generado

De forma predeterminada, BigQuery expone los valores en una familia de columnas como un arreglo de columnas y, dentro de eso, un arreglo de valores escrito en marcas de tiempo diferentes. En este esquema, se conserva el diseño natural de los datos en Cloud Bigtable, pero las consultas de SQL pueden ser desafiantes. Es posible promover columnas a subcampos dentro de la familia de columnas superior y leer solo el valor actual de cada celda. Esto representa ambos arreglos en el esquema predeterminado como valores escalares.

Ejemplo

Aquí, almacenas perfiles del usuario para una red social ficticia. Un modelo de datos posible para esto sería una familia de columnas profile con columnas individuales destinadas a gender, age y también email:

rowkey | profile:gender| profile:age| profile:email
-------| --------------| -----------| -------------
alice  | female        | 30         | alice@gmail.com

Con el esquema predeterminado, esta es una consulta de SQL estándar para contar el número de usuarios masculinos de más de 30 años:

SELECT
  COUNT(1)
FROM
  `dataset.table`
OMIT
  RECORD IF NOT SOME(profile.column.name = "gender"
    AND profile.column.cell.value = "male")
  OR NOT SOME(profile.column.name = "age"
    AND INTEGER(profile.column.cell.value) > 30)

La consulta de datos es menos desafiante si gender y age se exponen como subcampos. Para exponerlos como subcampos, enumera gender y age como columnas con nombre en la familia de columnas profile cuando definas la tabla. También, puedes indicar a BigQuery que exponga los valores más recientes de esta familia de columnas desde entonces. Por lo general, solo el valor más reciente (y posiblemente el único) es de interés.

Después de exponer las columnas como subcampos, esta es la consulta de SQL estándar para contar el número de usuarios masculinos por encima de los 30 años:

SELECT
  COUNT(1)
FROM
  `dataset.table`
WHERE
  profile.gender.cell.value="male"
  AND profile.age.cell.value > 30

Ten en cuenta cómo se hace referencia a gender y age como campos de forma directa. Para este caso, la configuración de JSON es la que se muestra a continuación:

  "bigtableOptions": {
    "readRowkeyAsString": "true",
    "columnFamilies": [
      {
          "familyId": "profile",
          "onlyReadLatest": "true",
          "columns": [
              {
                  "qualifierString": "gender",
                  "type": "STRING"
              },
              {
                  "qualifierString": "age",
                  "type": "INTEGER"
              }
          ]
      }
    ]
  }

Codificación de valor

Cloud Bigtable almacena datos como bytes sin procesar, independiente de la codificación de los datos. Sin embargo, los valores de bytes son de uso limitado en los análisis de consultas de SQL. Cloud Bigtable proporciona dos tipos básicos de decodificación escalar: texto y objeto binario HBase.

El formato de texto presupone que todos los valores se almacenan como strings de texto alfanumérico. Por ejemplo, un número entero 768 se almacenará como la string “768”. Con la codificación binaria, se da por sentado que las clases de métodos Bytes.toBytes de HBase se usaron para codificar los datos y se aplica un método de decodificación apropiado.

Filtros de consulta

Las consultas con un filtro de igualdad de fila solo leen esa fila específica. Por ejemplo, en la sintaxis de SQL estándar, se observa lo siguiente:

SELECT
  COUNT(follows.column.name)
FROM
  `dataset.table`
WHERE
  rowkey = "alice";

Los filtros de rango como rowkey > '1' y rowkey < '8' también son compatibles, pero solo cuando la clave de fila se lee como una string con la opción readRowkeyAsString.

¿Te ha resultado útil esta página? Enviar comentarios:

Enviar comentarios sobre...

Si necesitas ayuda, visita nuestra página de asistencia.