Interroger des données Cloud Storage dans des tables BigLake

Ce document explique comment interroger des données stockées dans une table BigLake Cloud Storage.

Avant de commencer

Assurez-vous de disposer d'une table BigLake Cloud Storage.

Rôles requis

Pour interroger des tables BigLake Cloud Storage, vous devez disposer des rôles suivants :

  • Lecteur de données BigQuery (roles/bigquery.dataViewer)
  • Utilisateur BigQuery (roles/bigquery.user)

Selon vos autorisations, vous pouvez vous attribuer ces rôles ou demander à votre administrateur de vous les accorder. Pour en savoir plus sur l'attribution de rôles, consultez la page Afficher les rôles pouvant être attribués sur des ressources.

Pour afficher les autorisations exactes requises pour interroger des tables BigLake Cloud Storage, développez la section Autorisations requises :

Autorisations requises

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

Interroger des tables BigLake

Après avoir créé une table BigLake Cloud Storage, vous pouvez l'interroger à l'aide d'une syntaxe GoogleSQL, comme pour une table BigQuery standard. Exemple : SELECT field1, field2 FROM mydataset.my_cloud_storage_table;.

Interroger des tables BigLake en utilisant des outils de traitement de données externes

Vous pouvez utiliser des connecteurs BigQuery avec d'autres outils de traitement de données pour accéder à des tables BigLake sur Cloud Storage. Pour en savoir plus, consultez la page Connecteurs.

Apache Spark

L'exemple suivant utilise Dataproc, mais fonctionne également avec tous les déploiements Spark utilisant le connecteur Spark-BigQuery.

Dans cet exemple, vous fournissez le connecteur Spark-BigQuery en tant qu'action d'initialisation lorsque vous créez un cluster. Cette action vous permet d'utiliser un notebook Zeppelin et d'implémenter un parcours utilisateur pour les analystes de données.

Les versions du connecteur Spark-BigQuery sont répertoriées dans le dépôt GoogleCloudDataproc/spark-bigquery-connector GitHub.

Créez un cluster à nœud unique en exécutant l'action d'initialisation du connecteur Spark BigQuery :

gcloud dataproc clusters create biglake-demo-cluster \
    --optional-components=ZEPPELIN \
    --region=REGION \
    --enable-component-gateway \
    --single-node \
    --initialization-actions gs://goog-dataproc-initialization-actions-REGION/connectors/connectors.sh \
    --metadata spark-bigquery-connector-url= gs://spark-lib/bigquery/spark-bigquery-with-dependencies_SCALA_VERSION-CONNECTOR_VERSION.jar

Apache Hive

L'exemple suivant utilise Dataproc, mais fonctionne également avec tous les déploiements Hive utilisant le connecteur Hive-BigQuery.

Dans cet exemple, vous fournissez le connecteur Hive-BigQuery en tant qu'action d'initialisation lorsque vous créez un cluster.

Les versions du connecteur Hive-BigQuery sont répertoriées dans le dépôt GoogleCloudDataproc/hive-bigquery-connector GitHub.

Créez un cluster à nœud unique en exécutant l'action d'initialisation du connecteur Hive- BigQuery :

gcloud dataproc clusters create biglake-hive-demo-cluster \
    --region=REGION \
    --single-node \
    --initialization-actions gs://goog-dataproc-initialization-actions-REGION/connectors/connectors.sh \
    --metadata hive-bigquery-connector-url=gs://goog-dataproc-artifacts-REGION/hive-bigquery/hive-bigquery-connector-CONNECTOR_VERSION.jar

Pour en savoir plus sur le connecteur Hive-BigQuery, consultez la page Utiliser le connecteur Hive-BigQuery.

Dataflow

Pour lire des tables BigLake à partir de Dataflow, utilisez le connecteur Dataflow en mode DIRECT_READ pour utiliser l'API BigQuery Storage. Il est également possible de lire à partir d'une chaîne de requête. Consultez la page E/S BigQuery dans la documentation Apache Beam.

Interroger des tables BigLake temporaires

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).

Pour interroger une source de données externe sans créer de table permanente, vous devez fournir une définition de table pour la table temporaire, puis l'utiliser dans une commande ou un appel pour interroger la table temporaire. Vous pouvez fournir la définition de la table de l'une des manières suivantes :

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.

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.

Vous pouvez créer et interroger une table temporaire associée à une source de données externe à l'aide de l'outil de ligne de commande bq, de l'API ou des bibliothèques clientes.

bq

Exécutez la commande bq query avec l'option --external_table_definition

(Facultatif) Spécifiez l'option --location et définissez la valeur correspondant à votre emplacement.

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'

Remplacez les éléments suivants :

  • LOCATION : nom de votre emplacement. L'option --location est facultative ; Par exemple, si vous utilisez BigQuery dans la région de Tokyo, vous pouvez définir la valeur de cette option sur asia-northeast1. Vous pouvez définir une valeur par défaut correspondant à l'emplacement en utilisant le fichier .bigqueryrc ;
  • TABLE : nom de la table temporaire que vous créez.
  • DEFINITION_FILE : chemin d'accès au fichier de définition de table sur votre ordinateur local.
  • QUERY : 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@us.myconnection \
'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=BUCKET_PATH@projects/PROJECT_ID/locations/REGION/connections/CONNECTION_ID \
'query'

Remplacez les éléments suivants :

  • LOCATION : nom de votre emplacement. L'option --location est facultative ; Par exemple, si vous utilisez BigQuery dans la région de Tokyo, vous pouvez définir la valeur de cette option sur asia-northeast1. Vous pouvez définir une valeur par défaut correspondant à l'emplacement en utilisant le fichier .bigqueryrc ;
  • TABLE : nom de la table temporaire que vous créez.
  • SCHEMA : définition de schéma en ligne au format field:data_type,field:data_type.
  • SOURCE_FORMAT : format de la source de données externe, par exemple CSV.
  • BUCKET_PATH : chemin d'accès au bucket Cloud Storage contenant les données de la table, au format gs://bucket_name/[folder_name/]file_pattern.

    Vous pouvez sélectionner plusieurs fichiers dans le bucket en spécifiant un caractère générique astérisque (*) dans le file_pattern. Exemple : gs://mybucket/file00*.parquet. Pour en savoir plus, consultez la section Gestion des caractères génériques dans les URI Cloud Storage.

    Vous pouvez spécifier plusieurs buckets pour l'option uris en fournissant plusieurs chemins d'accès.

    Les exemples suivants montrent des valeurs uris valides :

    • gs://bucket/path1/myfile.csv
    • gs://bucket/path1/*.parquet
    • gs://bucket/path1/file1*, gs://bucket1/path1/*

    Lorsque vous spécifiez des valeurs uris qui ciblent plusieurs fichiers, tous ces fichiers doivent partager un schéma compatible.

    Pour en savoir plus sur l'utilisation des URI Cloud Storage dans BigQuery, consultez la page Chemin d'accès aux ressources Cloud Storage.

  • PROJECT_ID: projet contenant la connexion.

  • REGION : région contenant la connexion, par exemple us

  • CONNECTION_ID : nom de la connexion, par exemple myconnection

  • QUERY : requête que vous soumettez à la table temporaire.

Par exemple, la commande suivante crée et interroge une table temporaire appelée sales qui est associée à un fichier CSV stocké dans Cloud Storage avec la définition de schéma suivante : Region:STRING,Quarter:STRING,Total_sales:INTEGER.

bq query \
--external_table_definition=sales::Region:STRING,Quarter:STRING,Total_sales:INTEGER@CSV=gs://mybucket/sales.csv@us.myconnection \
'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=BUCKET_PATH@projects/PROJECT_ID/locations/REGION/connections/CONNECTION_ID \
'QUERY'

Remplacez les éléments suivants :

  • LOCATION : nom de votre emplacement. L'option --location est facultative ; Par exemple, si vous utilisez BigQuery dans la région de Tokyo, vous pouvez définir la valeur de cette option sur asia-northeast1. Vous pouvez définir une valeur par défaut correspondant à l'emplacement en utilisant le fichier .bigqueryrc ;
  • SCHEMA_FILE : chemin d'accès au fichier de schéma JSON sur votre ordinateur local.
  • SOURCE_FORMAT : format de la source de données externe, par exemple CSV.
  • BUCKET_PATH : chemin d'accès au bucket Cloud Storage contenant les données de la table, au format gs://bucket_name/[folder_name/]file_pattern.

    Vous pouvez sélectionner plusieurs fichiers dans le bucket en spécifiant un caractère générique astérisque (*) dans le file_pattern. Exemple : gs://mybucket/file00*.parquet. Pour en savoir plus, consultez la section Gestion des caractères génériques dans les URI Cloud Storage.

    Vous pouvez spécifier plusieurs buckets pour l'option uris en fournissant plusieurs chemins d'accès.

    Les exemples suivants montrent des valeurs uris valides :

    • gs://bucket/path1/myfile.csv
    • gs://bucket/path1/*.parquet
    • gs://bucket/path1/file1*, gs://bucket1/path1/*

    Lorsque vous spécifiez des valeurs uris qui ciblent plusieurs fichiers, tous ces fichiers doivent partager un schéma compatible.

    Pour en savoir plus sur l'utilisation des URI Cloud Storage dans BigQuery, consultez la page Chemin d'accès aux ressources Cloud Storage.

  • PROJECT_ID: projet contenant la connexion.

  • REGION : région contenant la connexion, par exemple us

  • CONNECTION_ID : nom de la connexion, par exemple myconnection

  • QUERY : requête que vous soumettez à la table temporaire.

Par exemple, la commande suivante crée et interroge une table temporaire appelée sales qui est 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=gs://mybucket/sales.csv@us.myconnection \
  'SELECT
      Region,
      Total_sales
    FROM
      sales'

API

Pour exécuter une requête à l'aide de l'API, procédez comme suit:

  1. Créez un objet Job.
  2. Renseignez la section configuration de l'objet Job avec un objet JobConfiguration.
  3. Renseignez la section query de l'objet JobConfiguration avec un objet JobConfigurationQuery.
  4. Renseignez la section tableDefinitions de l'objet JobConfigurationQuery avec un objet ExternalDataConfiguration. Dans le champ connectionId, spécifiez la connexion à utiliser pour vous connecter à Cloud Storage.
  5. Appeler la méthode jobs.insert pour exécuter la requête de manière asynchrone ou la méthode jobs.query pour exécuter la requête de manière synchrone, en transmettant l'objet Job.

Étapes suivantes