Charger des données avec des opérations multicloud

En tant qu'administrateur ou analyste BigQuery, vous pouvez charger des données depuis un bucket Amazon S3 (Amazon Simple Storage Service) ou depuis Azure Blob Storage dans des tables BigQuery. Vous pouvez associer les données transférées aux données présentes dans les régionsGoogle Cloud ou exploiter les fonctionnalités de BigQuery, telles que BigQuery ML. Vous pouvez également créer des instances dupliquées de vues matérialisées de certaines sources externes pour rendre ces données disponibles dans BigQuery.

Vous pouvez transférer des données vers BigQuery de différentes manières :

  • Pour transférer des données à partir de fichiers hébergés dans Amazon S3 et Azure Blob Storage vers des tables BigQuery, utilisez l'instruction LOAD DATA.

  • Pour filtrer les données provenant de fichiers hébergés dans Amazon S3 ou Blob Storage avant de transférer les résultats dans des tables BigQuery, utilisez l'instruction CREATE TABLE AS SELECT. Pour ajouter des données à la table de destination, utilisez l'instruction INSERT INTO SELECT. La manipulation des données est appliquée aux tables externes qui font référence aux données d'Amazon S3 ou de Blob Storage.

  • Créez des instances répliquées de vues matérialisées de données externes Amazon S3, Apache Iceberg ou Salesforce Data Cloud dans un ensemble de données BigQuery. Les données sont ainsi disponibles localement dans BigQuery.

Quotas et limites

Pour en savoir plus sur les quotas et les limites, consultez la page Quotas et limites des jobs de requête.

Avant de commencer

Pour fournir à Google Cloud l'accès en lecture nécessaire pour charger ou filtrer des données dans d'autres clouds, demandez à votre administrateur de créer une connexion et de la partager avec vous. Pour en savoir plus sur la création de connexions, consultez Se connecter à Amazon S3 ou Blob Storage.

Rôle requis

Pour obtenir les autorisations nécessaires pour charger des données à l'aide de transferts entre clouds, demandez à votre administrateur de vous accorder le rôle IAM Éditeur de données BigQuery (roles/bigquery.dataEditor) sur l'ensemble de données. Pour en savoir plus sur l'attribution de rôles, consultez la page Gérer l'accès aux projets, aux dossiers et aux organisations.

Ce rôle prédéfini contient les autorisations requises pour charger des données à l'aide de transferts entre clouds. Pour connaître les autorisations exactes requises, développez la section Autorisations requises :

Autorisations requises

Vous devez disposer des autorisations suivantes pour charger des données à l'aide de transferts entre cloud :

  • bigquery.tables.create
  • bigquery.tables.get
  • bigquery.tables.updateData
  • bigquery.tables.update
  • bigquery.jobs.create
  • bigquery.connections.use

Vous pouvez également obtenir ces autorisations avec des rôles personnalisés ou d'autres rôles prédéfinis.

Pour en savoir plus sur les rôles IAM dans BigQuery, consultez Rôles et autorisations IAM BigQuery.

Tarifs

Les octets transférés d'un cloud à l'autre vous sont facturés à l'aide de l'instruction LOAD. Pour connaître les tarifs, consultez la section sur le transfert de données entre les Cloud pour Omni dans les Tarifs de BigQuery Omni.

Les octets transférés d'un cloud à l'autre à l'aide de l'instruction CREATE TABLE AS SELECT ou de l'instruction INSERT INTO SELECT vous sont facturés, ainsi que la capacité de calcul.

Les instructions LOAD et CREATE TABLE AS SELECT nécessitent des emplacements dans les régions BigQuery Omni afin d'analyser les fichiers Amazon S3 et Blob Storage en vue de leur chargement. Pour en savoir plus, consultez les Tarifs de BigQuery Omni.

Pour les instances répliquées de vues matérialisées de sources de données externes, les coûts peuvent également inclure la tarification des vues matérialisées.

Bonnes pratiques concernant les options de chargement et de filtrage

  • Évitez de charger plusieurs fichiers de taille inférieure à 5 Mo. Créez plutôt une table externe pour votre fichier, et exportez le résultat de la requête vers Amazon S3 ou Blob Storage pour créer un fichier plus volumineux. Cette méthode permet d'améliorer le temps de transfert de vos données.
  • Pour en savoir plus sur la limite du nombre maximal de résultats de requête, consultez la section Taille maximale des résultats de requête BigQuery Omni.
  • Si vos données source se trouvent dans un fichier compressé au format gzip, définissez l'option external_table_options.compression sur GZIP lors de la création des tables externes.

Charger les données

Vous pouvez charger des données dans BigQuery à l'aide de l'instruction LOAD DATA [INTO|OVERWRITE].

Limites

  • La connexion et l'ensemble de données de destination doivent appartenir au même projet. Le chargement de données entre projets n'est pas accepté.
  • LOAD DATA n'est compatible que lorsque vous transférez des données depuis Amazon Simple Storage Service (Amazon S3) ou Azure Blob Storage vers une région BigQuery colocalisée. Pour plus d'informations, consultez la section Emplacements.
    • Vous pouvez transférer des données depuis n'importe quelle région US vers une région multirégionale US. Vous pouvez également transférer des données depuis n'importe quelle région EU vers une région multirégionale EU.

Exemple

Exemple 1

L'exemple suivant charge un fichier Parquet nommé sample.parquet à partir d'un bucket Amazon S3 dans la table test_parquet avec un schéma de détection automatique :

LOAD DATA INTO mydataset.testparquet
  FROM FILES (
    uris = ['s3://test-bucket/sample.parquet'],
    format = 'PARQUET'
  )
  WITH CONNECTION `aws-us-east-1.test-connection`

Exemple 2

L'exemple suivant charge un fichier CSV ayant le préfixe sampled* depuis Blob Storage dans la table test_csv avec le partitionnement de colonne prédéfini par heure :

LOAD DATA INTO mydataset.test_csv (Number INT64, Name STRING, Time DATE)
  PARTITION BY Time
  FROM FILES (
    format = 'CSV', uris = ['azure://test.blob.core.windows.net/container/sampled*'],
    skip_leading_rows=1
  )
  WITH CONNECTION `azure-eastus2.test-connection`

Exemple 3

L'exemple suivant remplace la table test_parquet existante par des données d'un fichier nommé sample.parquet avec un schéma de détection automatique :

LOAD DATA OVERWRITE mydataset.testparquet
  FROM FILES (
    uris = ['s3://test-bucket/sample.parquet'],
    format = 'PARQUET'
  )
  WITH CONNECTION `aws-us-east-1.test-connection`

Filtrer les données

Vous pouvez filtrer les données avant de les transférer dans BigQuery à l'aide des instructions CREATE TABLE AS SELECT et INSERT INTO SELECT.

Limites

  • Si le résultat de la requête SELECT dépasse 60 Gio en octets logiques, la requête échoue. La table n'est pas créée et les données ne sont pas transférées. Pour savoir comment réduire le volume des données analysées, consultez la section Réduire la quantité de données traitée dans les requêtes.

  • Les tables temporaires ne sont pas acceptées.

  • Le transfert du format de données géospatiales Binaire connu (WKB) n'est pas accepté.

  • L'instruction INSERT INTO SELECT n'est pas compatible avec le transfert de données dans une table clusterisée.

  • Dans l'instruction INSERT INTO SELECT, si la table de destination est identique à la table source de la requête SELECT, l'instruction INSERT INTO SELECT ne modifie aucune ligne de la table de destination. La table de destination n'est pas modifiée, car BigQuery ne peut pas lire les données entre les régions.

  • CREATE TABLE AS SELECT et INSERT INTO SELECT ne sont compatibles que si vous transférez des données depuis Amazon S3 ou Blob Storage vers une région BigQuery colocalisée. Pour plus d'informations, consultez la section Emplacements.

    • Vous pouvez transférer des données depuis n'importe quelle région US vers une région multirégionale US. Vous pouvez également transférer des données depuis n'importe quelle région EU vers une région multirégionale EU.

Exemple

Exemple 1

Supposons que vous disposiez d'une table BigLake nommée myawsdataset.orders qui référence les données d'Amazon S3. Vous souhaitez transférer les données de cette table vers une table BigQuery myotherdataset.shipments dans l'emplacement multirégional US.

Commencez par afficher des informations sur la table myawsdataset.orders :

    bq show myawsdataset.orders;

Le résultat ressemble à ce qui suit :

  Last modified             Schema              Type     Total URIs   Expiration
----------------- -------------------------- ---------- ------------ -----------
  31 Oct 17:40:28   |- l_orderkey: integer     EXTERNAL   1
                    |- l_partkey: integer
                    |- l_suppkey: integer
                    |- l_linenumber: integer
                    |- l_returnflag: string
                    |- l_linestatus: string
                    |- l_commitdate: date

Ensuite, affichez les informations sur la table myotherdataset.shipments :

  bq show myotherdataset.shipments

Le résultat renvoyé ressemble à ceci : Certaines colonnes sont omises pour simplifier la sortie.

  Last modified             Schema             Total Rows   Total Bytes   Expiration   Time Partitioning   Clustered Fields   Total Logical
 ----------------- --------------------------- ------------ ------------- ------------ ------------------- ------------------ ---------------
  31 Oct 17:34:31   |- l_orderkey: integer      3086653      210767042                                                         210767042
                    |- l_partkey: integer
                    |- l_suppkey: integer
                    |- l_commitdate: date
                    |- l_shipdate: date
                    |- l_receiptdate: date
                    |- l_shipinstruct: string
                    |- l_shipmode: string

Désormais, à l'aide de l'instruction CREATE TABLE AS SELECT, vous pouvez charger des données de manière sélective dans la table myotherdataset.orders de l'emplacement multirégional US :

CREATE OR REPLACE TABLE
  myotherdataset.orders
  PARTITION BY DATE_TRUNC(l_commitdate, YEAR) AS
SELECT
  *
FROM
  myawsdataset.orders
WHERE
  EXTRACT(YEAR FROM l_commitdate) = 1992;

Vous pouvez ensuite effectuer une opération de jointure avec la table nouvellement créée :

SELECT
  orders.l_orderkey,
  orders.l_orderkey,
  orders.l_suppkey,
  orders.l_commitdate,
  orders.l_returnflag,
  shipments.l_shipmode,
  shipments.l_shipinstruct
FROM
  myotherdataset.shipments
JOIN
  `myotherdataset.orders` as orders
ON
  orders.l_orderkey = shipments.l_orderkey
AND orders.l_partkey = shipments.l_partkey
AND orders.l_suppkey = shipments.l_suppkey
WHERE orders.l_returnflag = 'R'; -- 'R' means refunded.

Lorsque de nouvelles données sont disponibles, ajoutez les données de l'année 1993 à la table de destination à l'aide de l'instruction INSERT INTO SELECT :

INSERT INTO
   myotherdataset.orders
 SELECT
   *
 FROM
   myawsdataset.orders
 WHERE
   EXTRACT(YEAR FROM l_commitdate) = 1993;

Exemple 2

L'exemple suivant insère des données dans une table partitionnée par date d'ingestion :

CREATE TABLE
 mydataset.orders(id String, numeric_id INT64)
PARTITION BY _PARTITIONDATE;

Après avoir créé une table partitionnée, vous pouvez insérer des données dans la table partitionnée par date d'ingestion :

INSERT INTO
 mydataset.orders(
   _PARTITIONTIME,
   id,
   numeric_id)
SELECT
 TIMESTAMP("2023-01-01"),
 id,
 numeric_id,
FROM
 mydataset.ordersof23
WHERE
 numeric_id > 4000000;

Instances dupliquées de vues matérialisées

Une instance répliquée de vues matérialisées est une réplication de données externes Amazon Simple Storage Service (Amazon S3), Apache Iceberg ou Salesforce Data Cloud dans un ensemble de données BigQuery. Les données sont ainsi disponibles localement dans BigQuery. Cela peut vous aider à éviter les coûts de sortie des données et à améliorer les performances des requêtes. BigQuery vous permet de créer des vues matérialisées sur des tables compatibles avec le cache des métadonnées BigLake sur les données Amazon Simple Storage Service (Amazon S3), Apache Iceberg ou Salesforce Data Cloud.

Une instance dupliquée avec vue matérialisée vous permet d'utiliser les données de la vue matérialisée Amazon S3, Iceberg ou Data Cloud dans les requêtes tout en évitant les coûts de sortie des données et en améliorant leurs performances. Pour ce faire, une instance répliquée avec vue matérialisée réplique les données Amazon S3, Iceberg ou Data Cloud vers un ensemble de données situé dans une région BigQuery compatible, afin que les données soient disponibles localement dans BigQuery.

Avant de commencer

  1. Sign in to your Google Cloud account. If you're new to Google Cloud, create an account to evaluate how our products perform in real-world scenarios. New customers also get $300 in free credits to run, test, and deploy workloads.
  2. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Go to project selector

  3. Verify that billing is enabled for your Google Cloud project.

  4. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Go to project selector

  5. Verify that billing is enabled for your Google Cloud project.

  6. Assurez-vous de disposer des autorisations Identity and Access Management (IAM) requises pour effectuer les tâches décrites dans cette section.
  7. Rôles requis

    Pour obtenir les autorisations nécessaires pour effectuer les tâches décrites dans cette section, demandez à votre administrateur de vous accorder le rôle IAM Administrateur BigQuery (roles/bigquery.admin). Pour en savoir plus sur l'attribution de rôles, consultez la page Gérer l'accès aux projets, aux dossiers et aux organisations.

    Ce rôle prédéfini contient les autorisations requises pour effectuer les tâches décrites dans cette section. Pour connaître les autorisations exactes requises, développez la section Autorisations requises :

    Autorisations requises

    Vous devez disposer des autorisations suivantes pour effectuer les tâches décrites dans cette section :

    • bigquery.tables.create
    • bigquery.tables.get
    • bigquery.tables.getData
    • bigquery.tables.replicateData
    • bigquery.jobs.create

    Vous pouvez également obtenir ces autorisations avec des rôles personnalisés ou d'autres rôles prédéfinis.

    Pour en savoir plus sur BigQuery IAM, consultez Rôles et autorisations BigQuery IAM.

    Préparer un ensemble de données pour les instances répliquées de vues matérialisées

    Avant de créer une instance dupliquée avec vue matérialisée, vous devez effectuer les tâches suivantes :

    1. Créez un ensemble de données dans une région compatible avec Amazon S3.
    2. Créez une table source dans l'ensemble de données que vous avez créé à l'étape précédente. La table source peut présenter l'un des types de tables suivants :

    Créer des instances dupliquées avec vue matérialisée

    Sélectionnez l'une des options suivantes :

    Console

    1. Dans la console Google Cloud , accédez à la page BigQuery.

      Accéder à BigQuery

    2. Dans le volet Explorateur, accédez au projet et à l'ensemble de données dans lesquels vous souhaitez créer l'instance répliquée de vues matérialisées, puis cliquez sur Afficher les actions > Créer une table.

    3. Dans la section Source de la boîte de dialogue Créer une table, procédez comme suit :

      1. Pour le champ Créer une table à partir de, sélectionnez Table/vue existante.
      2. Pour le champ Projet, saisissez le projet dans lequel se trouve la table ou la vue source.
      3. Pour le champ Ensemble de données, saisissez l'ensemble de données où se trouve la table ou la vue source.
      4. Pour le champ Vue, saisissez la table ou la vue source que vous répliquez. Si vous choisissez une vue, il doit s'agir d'une vue autorisée. Sinon, toutes les tables utilisées pour générer cette vue doivent se trouver dans l'ensemble de données de la vue.
    4. Facultatif : Pour Obsolescence maximale des vues matérialisées locales, saisissez une valeur max_staleness pour votre vue matérialisée locale.

    5. Dans la section Destination de la boîte de dialogue Créer une table, procédez comme suit :

      1. Pour le champ Projet, saisissez le projet dans lequel vous souhaitez créer l'instance répliquée de vues matérialisées.
      2. Pour le champ Ensemble de données, saisissez l'ensemble de données dans lequel vous souhaitez créer l'instance répliquée de vues matérialisées.
      3. Pour le champ Nom de la vue matérialisée de l'instance répliquée, saisissez un nom pour votre instance répliquée.
    6. Facultatif : Spécifiez des tags et des options avancées pour votre instance répliquée de vues matérialisées. Si vous ne spécifiez pas d'ensemble de données pour l'ensemble de données Vue matérialisée locale, un ensemble de données est automatiquement créé dans le même projet et la même région que les données sources, et nommé bq_auto_generated_local_mv_dataset. Si vous ne spécifiez pas de nom pour Nom Vue matérialisée locale, un nom est automatiquement créé dans le même projet et la même région que les données sources, et porte le préfixe bq_auto_generated_local_mv_.

    7. Cliquez sur Créer une table.

    Une vue matérialisée locale est créée (si elle n'a pas été spécifiée) et autorisée dans l'ensemble de données source. L'instance répliquée de vues matérialisées est ensuite créée dans l'ensemble de données de destination.

    SQL

    1. Créez une vue matérialisée sur la table de base de l'ensemble de données que vous avez créé. Vous pouvez également créer la vue matérialisée dans un autre ensemble de données situé dans une région Amazon S3.
    2. Autorisez la vue matérialisée sur les ensembles de données contenant les tables sources utilisées dans la requête ayant créé la vue matérialisée.
    3. Si vous avez configuré l'actualisation manuelle du cache de métadonnées pour la table source, exécutez la procédure système BQ.REFRESH_EXTERNAL_METADATA_CACHE pour actualiser le cache de métadonnées.
    4. Exécutez la procédure système BQ.REFRESH_MATERIALIZED_VIEW pour actualiser la vue matérialisée.
    5. Créez des instances répliquées de vues matérialisées à l'aide de l'instruction CREATE MATERIALIZED VIEW AS REPLICA OF :

      CREATE MATERIALIZED VIEW PROJECT_ID.BQ_DATASET.REPLICA_NAME
      OPTIONS(replication_interval_seconds=REPLICATION_INTERVAL)
      AS REPLICA OF PROJECT_ID.S3_DATASET.MATERIALIZED_VIEW_NAME;

      Remplacez l'élément suivant :

      • PROJECT_ID : nom du projet dans lequel vous souhaitez créer l'instance répliquée de vues matérialisées, par exemple myproject.
      • BQ_DATASET : nom de l'ensemble de données BigQuery dans lequel vous souhaitez créer l'instance répliquée de vues matérialisées, par exemple bq_dataset. L'ensemble de données doit se trouver dans la région BigQuery qui correspond à la région de la vue matérialisée source.
      • REPLICA_NAME : nom de l'instance répliquée de la vues matérialisées que vous souhaitez créer, par exemple my_mv_replica.
      • REPLICATION_INTERVAL : indique la fréquence à laquelle les données de la vue matérialisée source sont répliquées vers l'instance répliquée, en secondes. Doit être une valeur comprise entre 60 et 3600, inclus. La valeur par défaut est 300 (5 minutes).
      • S3_DATASET : nom de l'ensemble de données contenant la vue matérialisée source, par exemple s3_dataset.
      • MATERIALIZED_VIEW_NAME : nom de la vue matérialisée à répliquer, par exemple, my_mv.

      L'exemple suivant crée une vue matérialisée nommée mv_replica dans bq_dataset :

      CREATE MATERIALIZED VIEW `myproject.bq_dataset.mv_replica`
      OPTIONS(
      replication_interval_seconds=600
      )
      AS REPLICA OF `myproject.s3_dataset.my_s3_mv`

    Une fois que vous avez créé l'instance répliquée de vues matérialisées, le processus de réplication interroge la vue matérialisée source pour rechercher les modifications et réplique les données sur l'instance répliquée de vues matérialisées, en actualisant les données à l'intervalle que vous avez spécifié dans l'option replication_interval_seconds ou max_staleness. Si vous interrogez l'instance répliquée avant la fin du premier remplissage, une erreur backfill in progress s'affiche. Vous pouvez interroger les données de l'instance répliquée de vues matérialisées une fois la première réplication terminée.

    Fraîcheur des données

    Une fois que vous avez créé l'instance dupliquée de la vue matérialisée, le processus de réplication interroge la vue matérialisée source pour rechercher les modifications et réplique les données sur l'instance dupliquée de la vue matérialisée. Les données sont répliquées à l'intervalle que vous avez spécifié dans l'option replication_interval_seconds de l'instruction CREATE MATERIALIZED VIEW AS REPLICA OF.

    Outre l'intervalle de réplication, l'actualisation des données répliquées de la vue matérialisée est également affectée par la fréquence d'actualisation de la vue matérialisée source et la fréquence d'actualisation du cache de métadonnées de la table Amazon S3, Iceberg ou Data Clous utilisée par les actualisations de la vue matérialisée.

    Vous pouvez vérifier la fraîcheur des données de l'instance dupliquée de la vue matérialisée et des ressources sur lesquelles elle repose à l'aide de la console Google Cloud  :

    • Pour connaître la fraîcheur de l'instance dupliquée de la vue matérialisée, consultez le champ Dernière modification dans le volet Détails de l'instance dupliquée de la vue matérialisée.
    • Pour connaître la fraîcheur de la vue matérialisée source, consultez le champ Dernière modification dans le volet Détails de la vue matérialisée.
    • Pour connaître la fraîcheur du cache des métadonnées de la table Amazon S3, Iceberg ou Data Cloud source, consultez le champ Obsolescence maximale dans le volet Détails de la vue matérialisée.

    Régions compatibles avec les instances répliquées de vues matérialisées

    Utilisez les mappages d'emplacement dans le tableau suivant lorsque vous créez des instances dupliquées de vue matérialisée :

    Emplacement de la vue matérialisée source Emplacement de l'instance répliquée de la vue matérialisée
    aws-us-east-1 Emplacement multirégional US ou l'une des régions suivantes :
    • northamerica-northeast1
    • northamerica-northeast2
    • us-central1
    • us-east1
    • us-east4
    • us-east5
    • us-south1
    • us-west1
    • us-west2
    • us-west3
    • us-west4
    aws-us-west-2 Emplacement multirégional US ou l'une des régions suivantes :
    • northamerica-northeast1
    • northamerica-northeast2
    • us-central1
    • us-east1
    • us-east4
    • us-east5
    • us-south1
    • us-west1
    • us-west2
    • us-west3
    • us-west4
    aws-eu-west-1 Emplacement multirégional EU ou l'une des régions suivantes :
    • europe-central2
    • europe-north1
    • europe-southwest1
    • europe-west1
    • europe-west2
    • europe-west3
    • europe-west4
    • europe-west6
    • europe-west8
    • europe-west9
    • europe-west10
    aws-ap-northeast-2 L'une des régions suivantes :
    • asia-east1
    • asia-east2
    • asia-northeast1
    • asia-northeast2
    • asia-northeast3
    • asia-south1
    • asia-south2
    • asia-southeast1
    aws-ap-southeast-2 L'une des régions suivantes :
    • australia-southeast1
    • australia-southeast2

    Limites des instances dupliquées avec vue matérialisée

    Tarification des instances répliquées de vues matérialisées

    L'utilisation d'instances dupliquées de vues matérialisées entraîne des coûts de calcul, de transfert de données sortant et de stockage.

    Étapes suivantes