Exécuter des requêtes dans des sessions

Ce document explique comment exécuter des requêtes dans une session BigQuery. Il est destiné aux utilisateurs qui ont déjà une compréhension générale des sessions, qui ont déjà créé une session et qui en connaissent l'ID de la session qu'ils souhaitent utiliser.

Avant de suivre ces étapes, assurez-vous de disposer des autorisations nécessaires pour créer une session.

Exécuter une requête dans une session

Après avoir créé une session, vous pouvez ajouter une requête à la session et l'exécuter. Vous pouvez procéder de plusieurs manières:

Console

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

    Accéder à BigQuery

  2. Cliquez sur l'onglet de l'éditeur qui contient la session.

  3. Ajoutez votre requête à la session, puis cliquez sur Run (Exécuter).

Tester votre session

Dans la console Google Cloud, ouvrez un onglet d'éditeur contenant une session que vous avez créée, puis exécutez cette instruction SQL :

CREATE TEMP TABLE Temperature(degrees INT64)  AS SELECT * FROM UNNEST([30,0,3,14,55]) AS a;

Supprimez ou mettez en commentaire le contenu de l'onglet et exécutez cette instruction SQL :

SELECT * FROM Temperature;

Assurez-vous que des résultats similaires à ceux-ci sont produits:

+---------+
| degrees |
+---------+
|      55 |
|      14 |
|       3 |
|       0 |
|      30 |
+---------+

bq

Ouvrez Cloud Shell, puis saisissez la commande bq query suivante:

bq query \
--nouse_legacy_sql \
--session_id=SESSION_ID \
'SQL_STATEMENT'

où :

  • SESSION_ID: remplacez cette valeur par l'ID de la session que vous souhaitez utiliser.
  • SQL_STATEMENT: instruction SQL à exécuter dans votre session.

Tester votre session

Créez une table temporaire appelée Temperature dans une session que vous avez créée. Remplacez l'ID de session par le vôtre.

bq query \
  --nouse_legacy_sql \
  --session_id=CgwKCmZhbGl1LXRlc3QQARokMDAzYjI0OWQtZ \
  'CREATE TEMP TABLE Temperature(degrees INT64)  AS SELECT * FROM UNNEST([30,0,3,14,55]) AS a;'

Obtenez une liste de toutes les valeurs de la table Temperature. Remplacez l'ID de session par le vôtre.

bq query \
  --nouse_legacy_sql \
  --session_id=CgwKCmZhbGl1LXRlc3QQARokMDAzYjI0OWQtZ \
  'SELECT * FROM Temperature;'

Assurez-vous que des résultats similaires à ceux-ci sont produits:

+-------+
| total |
+-------+
|    30 |
|     0 |
|     3 |
|    14 |
|    55 |
+-------+

In session: CgwKCmZhbGl1LXRlc3QQARokMDAzYjI0OWQtZ

Gagnez du temps en ajoutant votre session sur .bigqueryrc

Si vous allez exécuter de nombreuses requêtes avec Cloud Shell, vous pouvez ajouter l'ID de votre session à [query] dans .bigqueryrc Il n'est pas nécessaire de copier et de coller l'ID de session dans chaque commande.

Voici à quoi ressemble un ID de session dans .bigqueryrc:

[query]
--session_id=CgwKCmZhbGl1LXRlc3QQARokMDAzYjI0OWQtZ

Après avoir ajouté l'ID de session à .bigqueryrc, vous pouvez utiliser la commande suivante:

bq query \
  --nouse_legacy_sql \
  'SELECT * FROM Temperature;'

Sachez que si vous souhaitez utiliser une autre session ou si la session se termine, vous devez mettre à jour .bigqueryrc.

API

Appelez la méthode jobs.insert ou jobs.query avec une ressource de tâches définie.

jobs.insert

Appelez la méthode jobs.insert avec les paramètres suivants :

{
  "jobReference": {
    "projectId": "PROJECT_ID",
    "jobId": "JOB_ID"
  },
  "configuration": {
    "query": {
      "query": "SQL_STATEMENT",
      "connectionProperties": [{
        "key": "session_id",
        "value": "SESSION_ID"
      }]
    }
  }
}

où :

  • PROJECT_ID: projet pour lequel créer la session.
  • JOB_ID: tâche pour laquelle créer la session.
  • SQL_STATEMENT: première instruction SQL de votre session.
  • SESSION_ID: ID de la session.

Tester votre session

Saisissez le corps de requête suivant pour créer une table temporaire appelée Temperature dans une session que vous avez créée. Remplacez l'ID du projet, l'ID de la tâche et l'ID de session par vos propres identifiants.

{
  "jobReference": {
    "projectId": "myProject",
    "jobId": "job_123"
  },
  "configuration": {
    "query": {
      "query": "CREATE TEMP TABLE Temperature(degrees INT64) AS SELECT * FROM UNNEST([30,0,3,14,55]) AS a;",
      "connectionProperties": [{
        "key": "session_id",
        "value": "CgwKCmZhbGl1LXRlc3QQARokMDAzYjI0OWQtZ"
      }]
    }
  }
}

Saisissez le corps de requête suivant pour obtenir la liste de toutes les valeurs de la table Temperature d'une session. Remplacez l'ID du projet, l'ID de la tâche et l'ID de la session par vos propres identifiants.

{
  "jobReference": {
    "projectId": "myProject",
    "jobId": "job_123"
  },
  "configuration": {
    "query": {
      "query": "SELECT * FROM Temperature;",
      "connectionProperties": [{
        "key": "session_id",
        "value": "CgwKCmZhbGl1LXRlc3QQARokMDAzYjI0OWQtZ"
      }]
    }
  }
}

Assurez-vous que le corps de la réponse pour les deux requêtes est semblable à celui-ci:

{
  "jobReference": {
    "projectId": "myProject",
    "jobId": "job_123"
  },
  "statistics": {
    "sessionInfo": {
      "sessionId": "CgwKCmZhbGl1LXRlc3QQARokMDAzYjI0OWQtZ"
    }
  }
}

jobs.query

Appelez la méthode jobs.query avec les paramètres suivants :

{
  "query": "SQL_STATEMENT",
  "connectionProperties": [{
    "key": "session_id",
    "value": "SESSION_ID"
  }]
}

où :

  • SQL_STATEMENT: première instruction SQL de votre session.
  • SESSION_ID: ID de la session.

Tester votre session

Saisissez le corps de requête suivant pour créer une table temporaire appelée Temperature dans une session que vous avez créée. Remplacez l'ID du projet, l'ID de la tâche et l'ID de session par vos propres identifiants.

{
  "query": "CREATE TEMP TABLE Temperature(degrees INT64) AS SELECT * FROM UNNEST([30,0,3,14,55]) AS a;",
  "connectionProperties": [{
    "key": "session_id",
    "value": "CgwKCmZhbGl1LXRlc3QQARokMDAzYjI0OWQtZ"
  }]
}

Saisissez le corps de requête suivant pour obtenir la liste de toutes les valeurs de la table Temperature d'une session. Remplacez l'ID du projet, l'ID de la tâche et l'ID de la session par vos propres identifiants.

{
  "query": "SELECT * FROM Temperature;",
  "connectionProperties": [{
    "key": "session_id",
    "value": "CgwKCmZhbGl1LXRlc3QQARokMDAzYjI0OWQtZ"
  }]
}

Assurez-vous que le corps de la réponse pour les deux requêtes est semblable à celui-ci:

{
  "jobReference": {
    "projectId": "myProject",
    "jobId": "job_123"
  },
  "statistics": {
    "sessionInfo": {
      "sessionId": "CgwKCmZhbGl1LXRlc3QQARokMDAzYjI0OWQtZ"
    }
  }
}

Étape suivante