Interroger et analyser des données Bigtable avec BigQuery

BigQuery est un entrepôt de données géré qui peut vous aider à interroger et à analyser vos données Bigtable à l'aide de requêtes SQL. BigQuery est utile pour les analystes de données, les ingénieurs de données, les data scientists ou toute personne qui souhaite utiliser les données Bigtable pour répondre à des questions métier.

BigQuery vous permet d'interroger vos données Bigtable à partir de BigQuery. Cette fonctionnalité est utile lorsque vous souhaitez joindre vos données Bigtable à des tables BigQuery.

Ce document présente les requêtes de données Bigtable avec BigQuery. Avant de lire cette page, vous devez avoir lu la présentation de Bigtable et la présentation de BigQuery.

L'utilisation de BigQuery pour interroger une table Bigtable est idéale pour les tables qui ont les mêmes familles de colonnes et les mêmes qualificatifs de colonne dans chaque ligne.

Création de tables externes

Avant de pouvoir interroger vos données Bigtable, vous (ou un administrateur de votre organisation) devez créer une table externe, qui est une table BigQuery contenant des pointeurs de métadonnées vers votre table Bigtable à laquelle vous envoyez vos requêtes. Pour en savoir plus sur les tables externes, consultez la page Présentation des sources de données externes.

Vous devez créer la table externe dans la même région que la table Bigtable. Par exemple, cela signifie que si la table se trouve dans une instance qui comporte des clusters dans europe-central2-a (Varsovie), europe-west1-c (Belgique) et asia-east1-a (Tokyo), vous devez créer la table externe à Varsovie, en Belgique ou à Tokyo.

Dans la plupart des cas, lorsque vous créez une table externe, définissez readRowkeyAsString et ignoreUnspecifiedColumnFamilies sur true.

Lorsque ignoreUnspecifiedColumnFamilies est défini sur "true", lorsque vous créez une définition de table qui n'inclut que certaines colonnes d'une famille de colonnes, seules les colonnes sélectionnées sont promues en tant que colonnes dans la table externe. Les données des colonnes non sélectionnées sont regroupées dans une colonne column générale.

Pour créer votre table externe, suivez les instructions de la section Créer une table externe Bigtable.

Interroger les données de la table externe

Une fois que vous avez créé une table externe pour votre table Bigtable, vous pouvez lui envoyer des requêtes SQL à l'aide de l'une des méthodes suivantes:

Pour savoir comment rédiger et exécuter une requête, consultez la section Exécuter une requête. Pour obtenir des instructions spécifiques à Bigtable, y compris les autorisations requises et des exemples de code, consultez la page Interroger des données Bigtable.

Requêtes programmées

Les requêtes planifiées sont utiles lorsque vous souhaitez importer des données Bigtable dans BigQuery de manière récurrente. Ils sont également utiles pour les cas d'utilisation qui nécessiteraient autrement de créer un pipeline de données et de diffuser les données dans BigQuery. Pour obtenir des instructions sur la gestion des requêtes planifiées, consultez la section Planifier des requêtes.

Éviter les analyses complètes de table

Comme lorsque vous envoyez des requêtes de lecture directement à votre table Bigtable, lorsque vous interrogez la table externe, vous devez généralement éviter les analyses complètes de la table. Les analyses complètes des tables augmentent l'utilisation du processeur et prennent beaucoup plus de temps que les requêtes sélectives. Elles nécessitent également un débit BigQuery plus important.

Si votre requête concerne toutes les lignes, elle déclenche une analyse complète de la table. En revanche, si vous limitez la requête et demandez une plage de lignes ou des lignes non contiguës spécifiées, l'intégralité de la table n'est pas analysée. Voici quelques exemples de syntaxe GoogleSQL pour limiter la requête:

  • WHERE rowkey = "abc123"
  • WHERE rowkey BETWEEN "abc123" PRECEDING AND "abc999" FOLLOWING
  • WHERE rowkey > 999999 (si vous lisez la clé de ligne sous forme de chaîne)

Jointures

Si vous prévoyez d'utiliser une jointure pour analyser les données de votre table Bigtable en conjonction avec les données d'une autre source, vous devez créer une sous-requête qui extrait les champs pertinents de Bigtable pour la jointure planifiée. Pour découvrir d'autres bonnes pratiques à adopter lors de la jointure de tables, consultez la page Optimiser le calcul des requêtes.

Coûts

Lorsque vous créez une table externe et l'interrogez, les coûts BigQuery et l'augmentation du nombre de nœuds Bigtable requis pour gérer le trafic vous sont facturés. Étant donné que votre table externe se trouve dans la même région que votre table Bigtable, aucuns coûts réseau ne sont engagés.

Si vous avez tendance à exécuter vos requêtes en heures ouvrables, envisagez d'activer l'autoscaling Bigtable afin que le nombre de nœuds augmente si nécessaire, puis diminue lorsque les tâches sont terminées. L'autoscaling est également une tactique efficace si vous exécutez des requêtes planifiées sans échéances strictes.

Une autre façon de limiter les coûts consiste à éviter une analyse complète de la table.

Pour en savoir plus sur l'optimisation des coûts pour BigQuery, consultez la page Estimer et contrôler les coûts.

Limites

Les limites suivantes s'appliquent :

  • Vous ne pouvez pas utiliser BigQuery pour interroger des données Bigtable stockées au format JSON.
  • Les résultats de requêtes contenant des données sérialisées avec des types imbriqués, tels que les protocoles de tampon (protobufs) et les formats Avro, peuvent s'afficher de manière incorrecte ou être difficiles à lire dans la console Google Cloud .

Étape suivante