Interroger des données Google Drive

Cette page explique comment utiliser BigQuery pour interroger des données stockées dans Google Drive.

BigQuery est compatible avec les requêtes portant sur les fichiers personnels Google Drive et les fichiers partagés. Pour en savoir plus sur Google Drive, consultez le Centre de formation G Suite.

Dans Google Drive, vous pouvez interroger des fichiers aux formats suivants :

  • Valeurs séparées par une virgule (CSV)
  • JSON délimité par des retours à la ligne
  • Avro
  • Google Sheets

Pour interroger une source de données externe à Google Drive, indiquez le chemin d'accès de l'URI de Google Drive vers vos données et créez une table externe qui renvoie à cette source de données. La table utilisée pour référencer la source de données Google Drive peut être une table permanente ou une table temporaire.

Récupérer l'URI de Google Drive

Pour créer une table externe destinée à une source de données Google Drive, vous devez fournir l'URI de Google Drive. Pour le récupérer, procédez comme suit :

  1. Accédez à Google Drive.

  2. Cliquez avec le bouton droit sur votre fichier, puis sélectionnez Obtenir le lien partageable. L'URI doit se présenter comme suit : https://drive.google.com/open?id=file_id.

    Où :

    • file_id est l'ID alphanumérique de votre fichier Google Drive.

Vous pouvez également récupérer l'URI en ouvrant le fichier. Par exemple, pour récupérer l'URI d'un fichier Google Sheets :

  1. Accédez à Google Sheets.

  2. Ouvrez votre feuille de calcul et copiez l'URI dans la barre d'adresse du navigateur. L'URI doit se présenter comme suit : https://docs.google.com/spreadsheets/d/file_id.

Activer l'accès Google Drive

L'accès aux données hébergées dans Google Drive nécessite un champ d'application OAuth supplémentaire, lors de la définition de la source fédérée et lors de l'exécution de la requête. Bien qu'il ne soit pas activé par défaut, il peut être inclus dans l'UI, dans la CLI ou via l'API en procédant comme suit :

Console

Suivez la procédure d'authentification Web pour créer une table permanente dans l'UI Web de BigQuery. Lorsque vous y êtes invité, cliquez sur Autoriser pour permettre aux outils clients BigQuery d'accéder à Google Drive.

UI classique

Suivez la procédure d'authentification Web pour créer une table permanente dans l'UI Web de BigQuery. Lorsque vous y êtes invité, cliquez sur Autoriser pour permettre aux outils clients BigQuery d'accéder à Google Drive.

CLI

Pour activer l'accès à Google Drive, procédez comme suit :

  1. Saisissez la commande suivante pour vous assurer que vous disposez de la dernière version de l'outil de ligne de commande.

    gcloud components update
    
  2. Saisissez la commande suivante pour vous authentifier avec Google Drive.

    gcloud auth login --enable-gdrive-access
    

API

Si vous utilisez l'API BigQuery, demandez le champ d'application OAuth de Google Drive en plus de celui de BigQuery.

Python

Avant d'essayer cet exemple, suivez les instructions de configuration de Python décrites dans le guide de démarrage rapide de BigQuery : Utiliser les bibliothèques clientes. Pour en savoir plus, consultez la documentation de référence sur l'API BigQuery Python.

from google.cloud import bigquery
import google.auth

# Create credentials with Drive & BigQuery API scopes.
# Both APIs must be enabled for your project before running this code.
credentials, project = google.auth.default(
    scopes=[
        "https://www.googleapis.com/auth/drive",
        "https://www.googleapis.com/auth/bigquery",
    ]
)

# TODO(developer): Construct a BigQuery client object.
client = bigquery.Client(credentials=credentials, project=project)

Tables externes permanentes et temporaires

Vous pouvez interroger une source de données externe dans BigQuery à l'aide d'une table permanente ou d'une table temporaire. Une table permanente est une table créée dans un ensemble de données et liée à votre source de données externe. La table étant permanente, vous pouvez utiliser des contrôles d'accès au niveau de l'ensemble de données pour la partager avec d'autres utilisateurs ayant également accès à la source de données externe sous-jacente. Vous avez par ailleurs la possibilité d'interroger la table à tout moment.

Lorsque vous interrogez une source de données externe à l'aide d'une table temporaire, vous exécutez une commande qui inclut une requête et crée une table non permanente associée à la source de données externe. En cas d'utilisation d'une table temporaire, vous ne créez pas de table dans l'un de vos ensembles de données BigQuery. La table n'étant pas stockée de manière permanente dans un ensemble de données, elle ne peut pas être partagée avec d'autres utilisateurs. L'interrogation d'une source de données externe à l'aide d'une table temporaire est utile pour des requêtes ad hoc ponctuelles qui sont exécutées sur des données externes, ou pour les processus d'extraction, de transformation et de chargement (ETL, Extract-Transform-Load).

Interroger des données Google Drive à l'aide de tables externes permanentes

Autorisations requises et champs d'application

Lorsque vous interrogez des données externes dans Google Drive à l'aide d'une table permanente, vous avez besoin d'autorisations pour exécuter une tâche de requête au niveau du projet ou à un niveau supérieur. Vous avez également besoin d'autorisations vous permettant de créer une table qui pointe vers les données externes, et d'accéder aux données de la table. Lorsque vos données externes sont stockées dans Google Drive, vous devez également disposer d'autorisations pour accéder au fichier Google Drive lié à votre table externe.

Autorisations BigQuery

Vous devez au minimum disposer des autorisations suivantes pour créer et interroger une table externe dans BigQuery.

  • bigquery.tables.create
  • bigquery.tables.getData
  • bigquery.jobs.create

Les rôles Cloud IAM prédéfinis suivants incluent des autorisations bigquery.tables.create et bigquery.tables.getData :

  • bigquery.dataEditor
  • bigquery.dataOwner
  • bigquery.admin

Les rôles Cloud IAM prédéfinis suivants incluent des autorisations bigquery.jobs.create :

  • bigquery.user
  • bigquery.jobUser
  • bigquery.admin

En outre, si un utilisateur possède les autorisations bigquery.datasets.create, il obtient également un accès bigquery.dataOwner à l'ensemble de données qu'il crée. L'accès correspondant au rôle bigquery.dataOwner permet à l'utilisateur de créer des tables externes dans l'ensemble de données, mais les autorisations bigquery.jobs.create restent nécessaires pour interroger les données.

Pour en savoir plus sur les rôles et les autorisations Cloud IAM dans BigQuery, consultez la page Rôles et autorisations prédéfinis.

Autorisations Google Drive

Au minimum, pour interroger les données externes dans Google Drive, vous devez disposer de l'accès View au fichier Google Drive lié à la table externe.

Champs d'application des instances Compute Engine

Lorsque vous créez une instance Compute Engine, vous pouvez spécifier une liste de champs d'application pour celle-ci. Les champs d'application contrôlent l'accès de l'instance aux produits Google Cloud, parmi lesquels Google Drive. Les applications exécutées sur la VM utilisent le compte de service pour appeler les API Google Cloud.

Si vous configurez une instance Compute Engine pour qu'elle s'exécute en tant que compte de service et si le compte de service accède à une table externe associée à une source de données Google Drive, vous devez ajouter à l'instance le champ d'application OAuth pour Google Drive (https://www.googleapis.com/auth/drive).

Pour en savoir plus sur l'attribution de champs d'application à une instance Compute Engine, consultez la section Modifier le compte de service et les champs d'application d'accès d'une instance. Pour en savoir plus sur les comptes de service Compute Engine, consultez la page Comptes de service.

Créer et interroger une table externe permanente

Vous pouvez créer une table permanente associée à votre source de données externe :

  • en utilisant Cloud Console ou l'UI Web classique de BigQuery ;
  • en utilisant la commande mk de l'outil de ligne de commande ;
  • en créant une configuration ExternalDataConfiguration lorsque vous utilisez la méthode d'API tables.insert ;
  • en utilisant les bibliothèques clientes.

Pour interroger une source de données externe à l'aide d'une table permanente, vous créez dans un ensemble de données BigQuery une table qui est associée à votre source de données externe. Les données ne sont pas stockées dans la table BigQuery. La table étant permanente, vous pouvez utiliser des contrôles d'accès au niveau de l'ensemble de données pour la partager avec d'autres utilisateurs ayant également accès à la source de données externe sous-jacente.

Il existe trois façons de définir des informations de schéma lors de la création d'une table externe permanente dans BigQuery :

  • Si vous utilisez la méthode d'API tables.insert pour créer une table externe permanente, vous créez une ressource de table qui inclut une définition de schéma et une configuration ExternalDataConfiguration. Définissez le paramètre autodetect sur true pour activer la détection automatique du schéma pour les sources de données acceptées.
  • Si vous utilisez la CLI pour créer une table externe permanente, vous pouvez utiliser un fichier de définition de table, créer et utiliser votre propre fichier de schéma, ou saisir le schéma en ligne de commande. Lorsque vous créez un fichier de définition de table, vous pouvez activer la détection automatique du schéma pour les sources de données acceptées.
  • Si vous utilisez la console ou l'UI Web classique BigQuery pour créer une table externe permanente, vous pouvez entrer le schéma de table manuellement ou utiliser la détection automatique de schéma pour les sources de données prises en charge.

Pour créer une table externe, procédez comme suit :

Console

  1. Ouvrez l'UI Web de BigQuery dans Cloud Console.
    Accéder à Cloud Console

  2. Dans la section Ressources du panneau de navigation, développez votre projet et sélectionnez un ensemble de données. Cliquez sur Create table (Créer une table) dans la partie droite de la fenêtre.

    Créer un tableau

  3. Dans la section Source de la page Créer une table :

    • Dans Créer une table à partir de, sélectionnez Drive.

    • Dans le champ Sélectionnez l'URI du fichier Drive, saisissez l'URI Google Drive. Notez que les caractères génériques ne sont pas acceptés dans les URI Google Drive.

    • Pour Format de fichier, sélectionnez le format des données. Les formats valides pour les données Google Drive sont les suivants :

      • Valeurs séparées par une virgule (CSV)
      • JSON délimité par des retours à la ligne
      • Avro
      • Google Sheets
  4. (Facultatif) Si vous choisissez Google Sheets, dans la zone Plage de la feuille de calcul (facultatif), spécifiez la feuille et la plage de cellules à interroger. Vous pouvez indiquer un nom de feuille ou sheet_name!top_left_cell_id:bottom_right_cell_id pour une plage de cellules, par exemple "Sheet1!A1:B20". Si la plage de la feuille n'est pas spécifiée, la première feuille du fichier est utilisée.

  5. Sur la page Créer une table, dans la section Destination : * Dans Dataset name (Nom de l'ensemble de données), choisissez l'ensemble de données approprié, et dans le champ Nom de la table, entrez le nom de la table que vous créez dans BigQuery.

    Sélectionner un ensemble de données

    • Vérifiez que le paramètre Table type (Type de table) est défini sur Table externe.
  6. Dans la section Schéma, saisissez la définition du schéma.

    • Pour les fichiers JSON ou CSV, vous pouvez cocher l'option Détection automatique pour permettre la détection automatique du schéma. La détection automatique n'est pas disponible pour les exportations Datastore, les exportations Cloud Firestore et les fichiers Avro. Les informations de schéma pour ces types de fichiers sont automatiquement extraites des données sources autodescriptives.
    • Indiquez manuellement les informations de schéma de l'une des manières suivantes :
      • Activez l'option Modifier sous forme de texte et saisissez le schéma de la table sous forme de tableau JSON. Remarque : Vous pouvez afficher le schéma d'une table existante au format JSON en saisissant la commande bq show --format=prettyjson dataset.table.
      • Utilisez l'option Ajouter un champ pour saisir manuellement le schéma.
  7. Cliquez sur Créer une table.

  8. Si nécessaire, sélectionnez votre compte, puis cliquez sur Autoriser pour permettre aux outils clients BigQuery d'accéder à Google Drive.

Vous pouvez ensuite exécuter une requête sur la table comme s'il s'agissait d'une table BigQuery native, en respectant les limites applicables aux sources de données externes.

Une fois la requête exécutée, vous pouvez télécharger les résultats au format CSV ou JSON, puis les enregistrer sous forme de table ou dans Google Sheets. Consultez Télécharger, enregistrer et exporter des données pour en savoir plus.

UI classique

  1. Accédez à l'UI Web de BigQuery.

    Accéder à l'UI Web de BigQuery

  2. Dans le panneau de navigation, passez la souris sur un ensemble de données, cliquez sur la flèche vers le bas image de la flèche vers le bas et cliquez sur Créer une table.

  3. Dans la section Données source de la page Créer une table :

    • Pour Emplacement, sélectionnez Google Drive. Dans le champ "Source", indiquez l'URI Google Drive. Notez que les caractères génériques ne sont pas acceptés dans les URI Google Drive.
    • Pour Format de fichier, sélectionnez le format des données. Les formats valides pour les données Google Drive sont les suivants :

      • Valeurs séparées par une virgule (CSV)
      • JSON (délimité par un retour à la ligne)
      • Avro
      • Google Sheets
  4. Dans la section Table de destination de la page Créer une table :

    • Pour le paramètre Nom de la table, choisissez l'ensemble de données correspondant, puis saisissez dans le champ le nom de la table permanente que vous créez dans BigQuery.
    • Vérifiez que le paramètre Table type (Type de table) est défini sur Table externe.
  5. Dans la section Schéma, saisissez les informations de schéma.

    • Pour les fichiers JSON ou CSV, vous pouvez cocher l'option Détection automatique pour permettre la détection automatique du schéma. La détection automatique de schémas dans l'UI Web n'est actuellement pas disponible pour Google Sheets (elle est néanmoins disponible avec la CLI et l'API). Par ailleurs, la détection automatique n'est pas disponible pour les sources de données Avro. Les informations de schéma sont automatiquement extraites des fichiers Avro.

    • Pour les fichiers CSV, JSON ou Google Sheets, vous pouvez saisir manuellement les informations de schéma :

      • en cliquant sur Modifier sous forme de texte, puis en saisissant le schéma de la table au format JSON ;
      • en utilisant l'option Ajouter un champ pour saisir manuellement le schéma.
  6. Sélectionnez les éléments applicables dans la section Options, puis cliquez sur Créer une table.

  7. Sélectionnez votre compte, puis cliquez sur Allow (Autoriser) pour permettre aux outils clients BigQuery d'accéder à Google Drive.

    Boîte de dialogue d'accès aux outils client

Vous pouvez ensuite exécuter une requête sur la table comme s'il s'agissait d'une table BigQuery native, en respectant les limites applicables aux sources de données externes.

Une fois la requête exécutée, vous pouvez télécharger les résultats au format CSV ou JSON, puis les enregistrer sous forme de table ou dans Google Sheets. Consultez Télécharger, enregistrer et exporter des données pour en savoir plus.

CLI

La commande bq mk permet de créer une table dans l'outil de ligne de commande BigQuery. Lorsque vous utilisez la CLI pour créer une table associée à une source de données externe, vous pouvez identifier le schéma de la table à l'aide des éléments suivants :

  • Un fichier de définition de table (stocké sur l'ordinateur local)
  • Une définition de schéma intégrée
  • Un fichier de schéma JSON (stocké sur l'ordinateur local)

Pour créer une table permanente associée à votre source de données Google Drive à l'aide d'un fichier de définition de table, saisissez la commande suivante :

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

Où :

  • definition_file est le chemin d'accès du fichier de définition de table sur votre ordinateur local ;
  • dataset est le nom de l'ensemble de données contenant la table ;
  • table est le nom de la table que vous créez.

Par exemple, la commande suivante crée une table permanente nommée mytable à l'aide d'un fichier de définition de table nommé mytable_def.

bq mk --external_table_definition=/tmp/mytable_def mydataset.mytable

Pour créer une table permanente associée à votre source de données externe à l'aide d'une définition de schéma intégrée, saisissez la commande suivante :

bq mk \
--external_table_definition=schema@source_format=drive_uri \
dataset.table

Où :

  • schema est la définition du schéma indiquée sur la ligne de commande au format field:data_type,field:data_type ;
  • source_format est CSV, NEWLINE_DELIMITED_JSON, AVRO ou GOOGLE_SHEETS ;
  • drive_uri est votre URI Google Drive ;
  • dataset est le nom de l'ensemble de données contenant la table ;
  • table est le nom de la table que vous créez.

Par exemple, la commande suivante crée une table permanente nommée sales et associée à un fichier Google Sheets stocké dans Google Drive, à l'aide de la définition de schéma suivante : Region:STRING,Quarter:STRING,Total_sales:INTEGER.

bq mk \
--external_table_definition=Region:STRING,Quarter:STRING,Total_sales:INTEGER@GOOGLE_SHEETS=https://drive.google.com/open?id=1234_AbCD12abCd \
mydataset.sales

Pour créer une table permanente associée à votre source de données externe à l'aide d'un fichier de schéma JSON, saisissez la commande suivante :

bq mk \
--external_table_definition=schema_file@source_format=drive_uri \
dataset.table

Où :

  • schema_file est le chemin d'accès du fichier de schéma JSON sur votre ordinateur local ;
  • source_format est CSV, NEWLINE_DELIMITED_JSON, AVRO ou GOOGLE_SHEETS ;
  • drive_uri est votre URI Google Drive ;
  • dataset est le nom de l'ensemble de données contenant la table ;
  • table est le nom de la table que vous créez.

Par exemple, la commande suivante crée une table nommée sales et associée à un fichier CSV stocké dans Google Drive à l'aide du fichier de schéma /tmp/sales_schema.json.

bq mk \
--external_table_definition=/tmp/sales_schema.json@CSV=https://drive.google.com/open?id=1234_AbCD12abCd \
mydataset.sales

Une fois que la table permanente a été créée, vous pouvez exécuter une requête sur celle-ci comme s'il s'agissait d'une table BigQuery native, en respectant les limites applicables aux sources de données externes.

Une fois la requête exécutée, vous pouvez télécharger les résultats au format CSV ou JSON, puis les enregistrer sous forme de table ou dans Google Sheets. Consultez Télécharger, enregistrer et exporter des données pour en savoir plus.

API

Créez une configuration ExternalDataConfiguration lorsque vous utilisez la méthode d'API tables.insert. Spécifiez la propriété schema ou définissez la propriété autodetect sur true pour activer la détection automatique du schéma pour les sources de données acceptées.

Python

Avant d'essayer cet exemple, suivez les instructions de configuration de Python décrites dans le guide de démarrage rapide de BigQuery : Utiliser les bibliothèques clientes. Pour en savoir plus, consultez la documentation de référence sur l'API BigQuery Python.

from google.cloud import bigquery
import google.auth

# Create credentials with Drive & BigQuery API scopes.
# Both APIs must be enabled for your project before running this code.
credentials, project = google.auth.default(
    scopes=[
        "https://www.googleapis.com/auth/drive",
        "https://www.googleapis.com/auth/bigquery",
    ]
)

# TODO(developer): Construct a BigQuery client object.
client = bigquery.Client(credentials=credentials, project=project)

# TODO(developer): Set dataset_id to the ID of the dataset to fetch.
# dataset_id = "your-project.your_dataset"

# Configure the external data source.
dataset = client.get_dataset(dataset_id)
table_id = "us_states"
schema = [
    bigquery.SchemaField("name", "STRING"),
    bigquery.SchemaField("post_abbr", "STRING"),
]
table = bigquery.Table(dataset.table(table_id), schema=schema)
external_config = bigquery.ExternalConfig("GOOGLE_SHEETS")
# Use a shareable link or grant viewing access to the email address you
# used to authenticate with BigQuery (this example Sheet is public).
sheet_url = (
    "https://docs.google.com/spreadsheets"
    "/d/1i_QCL-7HcSyUZmIbP9E6lO_T5u3HnpLe7dnpHaijg_E/edit?usp=sharing"
)
external_config.source_uris = [sheet_url]
external_config.options.skip_leading_rows = 1  # Optionally skip header row.
external_config.options.range = (
    "us-states!A20:B49"
)  # Optionally set range of the sheet to query from.
table.external_data_configuration = external_config

# Create a permanent table linked to the Sheets file.
table = client.create_table(table)  # Make an API request.

# Example query to find states starting with "W".
sql = 'SELECT * FROM `{}.{}` WHERE name LIKE "W%"'.format(dataset_id, table_id)
query_job = client.query(sql)  # Make an API request.

# Wait for the query to complete.
w_states = list(query_job)
print(
    "There are {} states with names starting with W in the selected range.".format(
        len(w_states)
    )
)

Interroger des données Google Drive à l'aide de tables temporaires

Pour interroger une source de données externe sans créer de table permanente, exécutez une commande permettant de combiner les éléments suivants :

  • Un fichier de définition de table et une requête
  • Une définition de schéma intégrée et une requête
  • Un fichier de définition de schéma JSON et une requête

Le fichier de définition de table ou le schéma fourni est utilisé pour créer la table externe temporaire, sur laquelle la requête s'exécute. Il est possible d'interroger une source de données externe à l'aide d'une table temporaire dans l'API et la CLI BigQuery.

En cas d'utilisation d'une table externe temporaire, vous ne créez pas de table dans l'un de vos ensembles de données BigQuery. La table n'étant pas stockée de manière permanente dans un ensemble de données, elle ne peut pas être partagée avec d'autres utilisateurs. L'interrogation d'une source de données externe à l'aide d'une table temporaire est utile pour les requêtes ad hoc ponctuelles qui sont exécutées sur des données externes ou pour les processus d'extraction, de transformation et de chargement (ETL, Extract-Transform-Load).

Autorisations requises

Lorsque vous interrogez des données externes dans Google Drive à l'aide d'une table temporaire, vous avez besoin d'autorisations pour exécuter une tâche de requête au niveau du projet ou à un niveau supérieur. Vous avez également besoin d'un accès à l'ensemble de données contenant la table qui pointe vers les données externes. Lorsque vous interrogez des données dans Google Drive, vous devez également disposer d'autorisations pour accéder au fichier Google Drive contenant vos données.

Autorisations BigQuery

Vous devez au minimum disposer des autorisations suivantes pour interroger une table externe dans BigQuery à l'aide d'une table temporaire.

  • bigquery.tables.getData
  • bigquery.jobs.create

Les rôles Cloud IAM prédéfinis suivants incluent des autorisations bigquery.tables.getData :

  • bigquery.dataEditor
  • bigquery.dataOwner
  • bigquery.admin

Les rôles Cloud IAM prédéfinis suivants incluent des autorisations bigquery.jobs.create :

  • bigquery.user
  • bigquery.jobUser
  • bigquery.admin

En outre, si un utilisateur possède les autorisations bigquery.datasets.create, il obtient également un accès bigquery.dataOwner à l'ensemble de données qu'il crée. L'accès correspondant au rôle bigquery.dataOwner permet à l'utilisateur de créer des tables externes dans l'ensemble de données et d'y accéder, mais les autorisations bigquery.jobs.create restent nécessaires pour interroger les données.

Pour en savoir plus sur les rôles et les autorisations Cloud IAM dans BigQuery, consultez la page Rôles et autorisations prédéfinis.

Autorisations Google Drive

Au minimum, pour interroger les données externes dans Google Drive, vous devez disposer de l'accès View au fichier Google Drive lié à la table externe.

Créer et interroger une table temporaire

Vous pouvez créer et interroger une table temporaire liée à une source de données externe à l'aide de la CLI, de l'API ou des bibliothèques clientes.

CLI

L'option --external_table_definition permet d'interroger une table temporaire associée à une source de données externe à l'aide de la commande bq query. Lorsque vous utilisez la CLI pour interroger une table temporaire associée à une source de données externe, il est possible d'identifier le schéma de la table à l'aide des éléments suivants :

  • Un fichier de définition de table (stocké sur l'ordinateur local)
  • Une définition de schéma intégrée
  • Un fichier de schéma JSON (stocké sur l'ordinateur local)

Pour interroger une table temporaire associée à votre source de données externe à l'aide d'un fichier de définition de table, saisissez la commande suivante :

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

Où :

  • location est votre emplacement. L'option --location est facultative ;
  • table est le nom de la table temporaire que vous créez ;
  • definition_file est le chemin d'accès du fichier de définition de table sur votre ordinateur local ;
  • query est la requête que vous soumettez à la table temporaire.

Par exemple, la commande suivante permet de créer et d'interroger une table temporaire nommée sales à l'aide du fichier de définition de table sales_def.

bq query \
--external_table_definition=sales::sales_def \
'SELECT
   Region,Total_sales
 FROM
   sales'

Pour interroger une table temporaire associée à votre source de données externe à l'aide d'une définition de schéma intégrée, saisissez la commande suivante :

bq --location=location query \
--external_table_definition=table::schema@source_format=drive_uri \
'query'

Où :

  • location est votre emplacement. L'option --location est facultative ;
  • table est le nom de la table temporaire que vous créez ;
  • schema est la définition du schéma indiquée sur la ligne de commande au format field:data_type,field:data_type ;
  • source_format est CSV, NEWLINE_DELIMITED_JSON, AVRO ou GOOGLE_SHEETS ;
  • drive_uri est votre URI Google Drive ;
  • query est la requête que vous soumettez à la table temporaire.

Par exemple, la commande suivante crée et interroge une table temporaire nommée sales et associée à un fichier CSV stocké dans Google Drive, à l'aide de la définition de schéma suivante : Region:STRING,Quarter:STRING,Total_sales:INTEGER.

bq --location=US query \
--external_table_definition=sales::Region:STRING,Quarter:STRING,Total_sales:INTEGER@CSV=https://drive.google.com/open?id=1234_AbCD12abCd \
'SELECT
   Region,Total_sales
 FROM
   sales'

Pour interroger une table temporaire associée à votre source de données externe à l'aide d'un fichier de schéma JSON, saisissez la commande suivante :

bq --location=location query \
--external_table_definition=schema_file@source_format=drive_uri \
'query'

Où :

  • location est votre emplacement. L'option --location est facultative ;
  • schema_file est le chemin d'accès du fichier de schéma JSON sur votre ordinateur local ;
  • source_format est CSV, NEWLINE_DELIMITED_JSON, AVRO ou GOOGLE_SHEETS ;
  • drive_uri est votre URI Google Drive ;
  • query est la requête que vous soumettez à la table temporaire.

Par exemple, la commande suivante crée et interroge une table temporaire nommée sales et associée à un fichier CSV stocké dans Cloud Storage, à l'aide du fichier de schéma /tmp/sales_schema.json.

bq query \
--external_table_definition=sales::/tmp/sales_schema.json@CSV=https://drive.google.com/open?id=1234_AbCD12abCd \
'SELECT
   Total_sales
 FROM
   sales'

API

Python

Avant d'essayer cet exemple, suivez les instructions de configuration de Python décrites dans le guide de démarrage rapide de BigQuery : Utiliser les bibliothèques clientes. Pour en savoir plus, consultez la documentation de référence sur l'API BigQuery Python.

from google.cloud import bigquery
import google.auth

# Create credentials with Drive & BigQuery API scopes.
# Both APIs must be enabled for your project before running this code.
credentials, project = google.auth.default(
    scopes=[
        "https://www.googleapis.com/auth/drive",
        "https://www.googleapis.com/auth/bigquery",
    ]
)

# TODO(developer): Construct a BigQuery client object.
client = bigquery.Client(credentials=credentials, project=project)

# Configure the external data source and query job.
external_config = bigquery.ExternalConfig("GOOGLE_SHEETS")

# Use a shareable link or grant viewing access to the email address you
# used to authenticate with BigQuery (this example Sheet is public).
sheet_url = (
    "https://docs.google.com/spreadsheets"
    "/d/1i_QCL-7HcSyUZmIbP9E6lO_T5u3HnpLe7dnpHaijg_E/edit?usp=sharing"
)
external_config.source_uris = [sheet_url]
external_config.schema = [
    bigquery.SchemaField("name", "STRING"),
    bigquery.SchemaField("post_abbr", "STRING"),
]
external_config.options.skip_leading_rows = 1  # Optionally skip header row.
external_config.options.range = (
    "us-states!A20:B49"
)  # Optionally set range of the sheet to query from.
table_id = "us_states"
job_config = bigquery.QueryJobConfig()
job_config.table_definitions = {table_id: external_config}

# Example query to find states starting with "W".
sql = 'SELECT * FROM `{}` WHERE name LIKE "W%"'.format(table_id)
query_job = client.query(sql, job_config=job_config)  # Make an API request.

# Wait for the query to complete.
w_states = list(query_job)
print(
    "There are {} states with names starting with W in the selected range.".format(
        len(w_states)
    )
)

Pseudo-colonne _FILE_NAME

Les tables basées sur des sources de données externes donnent accès à une pseudo-colonne intitulée _FILE_NAME. Cette colonne contient le chemin d'accès complet du fichier auquel appartient la ligne. Elle est disponible uniquement pour les tables qui renvoient à des données externes stockées dans Cloud Storage et Google Drive.

Le nom de colonne _FILE_NAME est réservé. Vous ne pouvez donc pas créer de colonne portant ce nom dans vos tables. Pour sélectionner la valeur de _FILE_NAME, vous devez utiliser un alias. Par exemple, la requête suivante sélectionne _FILE_NAME en attribuant l'alias fn à la pseudo-colonne.

bq query \
--project_id=project_id \
--use_legacy_sql=false \
'SELECT
   name,
   _FILE_NAME AS fn
 FROM
   `dataset.table_name`
 WHERE
   name contains "Alex"' 

Où :

  • project_id est un ID de projet valide (cette option n'est pas obligatoire si vous utilisez Cloud Shell ou si vous définissez un projet par défaut dans le SDK Cloud) ;
  • dataset est le nom de l'ensemble de données dans lequel la table externe permanente est stockée ;
  • table_name est le nom de la table externe permanente.
Cette page vous a-t-elle été utile ? Évaluez-la :

Envoyer des commentaires concernant…

Besoin d'aide ? Consultez notre page d'assistance.