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
bigquery.jobs.create
bigquery.readsessions.create
(obligatoire seulement si vous lisez des données avec l'API BigQuery Storage Read)bigquery.tables.get
bigquery.tables.getData
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 :
- Un fichier de définition de table
- Une définition de schéma intégrée
- Un fichier de schéma JSON
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 surasia-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 surasia-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 formatfield:data_type,field:data_type
.SOURCE_FORMAT
: format de la source de données externe, par exempleCSV
.BUCKET_PATH
: chemin d'accès au bucket Cloud Storage contenant les données de la table, au formatgs://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 lefile_pattern
. Par 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 exempleus
CONNECTION_ID
: nom de la connexion, par exemplemyconnection
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 surasia-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 exempleCSV
.BUCKET_PATH
: chemin d'accès au bucket Cloud Storage contenant les données de la table, au formatgs://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 lefile_pattern
. Par 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 exempleus
CONNECTION_ID
: nom de la connexion, par exemplemyconnection
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:
- Créez un objet
Job
. - Renseignez la section
configuration
de l'objetJob
avec un objetJobConfiguration
. - Renseignez la section
query
de l'objetJobConfiguration
avec un objetJobConfigurationQuery
. - Renseignez la section
tableDefinitions
de l'objetJobConfigurationQuery
avec un objetExternalDataConfiguration
. Dans le champconnectionId
, spécifiez la connexion à utiliser pour vous connecter à Cloud Storage. - Appeler la méthode
jobs.insert
pour exécuter la requête de manière asynchrone ou la méthodejobs.query
pour exécuter la requête de manière synchrone, en transmettant l'objetJob
.
Étapes suivantes
- Découvrez comment utiliser SQL dans BigQuery.
- Découvrez les tables BigLake.
- Obtenez davantage d'informations sur les quotas BigQuery.