Ejecuta consultas en sesiones

En este documento, se describe cómo ejecutar consultas en una sesión de BigQuery. Está dirigido a usuarios que ya tengan un conocimiento general de las sesiones, ya hayan creado una sesión y conozcan el ID de la sesión que desean usar.

Antes de completar estos pasos, asegúrate de tener los permisos necesarios para crear una sesión.

Ejecuta una consulta en una sesión

Después de crear una sesión, puedes agregar una consulta a esta y ejecutarla. Existen varias formas de hacerlo:

Console

  1. En la consola de Google Cloud, ve a la página de BigQuery.

    Ir a BigQuery

  2. Haz clic en la pestaña del editor que contiene la sesión.

  3. Agrega tu consulta a la sesión y haz clic en Ejecutar.

Prueba tu sesión

En la consola de Google Cloud, abre una pestaña del editor que contenga una sesión que hayas creado y ejecuta esta instrucción de SQL:

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

Borra o marca como comentario el contenido en la pestaña y ejecuta esta instrucción de SQL:

SELECT * FROM Temperature;

Asegúrate de que se produzcan resultados similares a los siguientes:

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

bq

Abre Cloud Shell y, luego, ingresa el siguiente comando bq query:

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

Donde:

  • SESSION_ID: Reemplaza esto por el ID de la sesión con la que deseas trabajar.
  • SQL_STATEMENT: Una instrucción de SQL para ejecutar en tu sesión.

Prueba tu sesión

Crea una tabla temporal llamada Temperature en una sesión que hayas creado. Reemplaza el ID de sesión por el tuyo.

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;'

Obtén una lista de todos los valores en la tabla Temperature Reemplaza el ID de sesión por el tuyo.

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

Asegúrate de que se produzcan resultados similares a los siguientes:

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

In session: CgwKCmZhbGl1LXRlc3QQARokMDAzYjI0OWQtZ

Para ahorrar tiempo, agrega la sesión a .bigqueryrc

Si vas a ejecutar muchas consultas con Cloud Shell, puedes agregar el ID de sesión a [query] en .bigqueryrc para no tener que copiar y pegar el ID de sesión en cada comando.

Así se ve un ID de sesión en .bigqueryrc:

[query]
--session_id=CgwKCmZhbGl1LXRlc3QQARokMDAzYjI0OWQtZ

Después de que hayas agregado el ID de sesión a .bigqueryrc, puedes usar este comando en su lugar:

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

Ten en cuenta que, si quieres usar una sesión diferente o si una sesión finaliza, debes actualizar .bigqueryrc.

API

Llama al método jobs.insert o jobs.query con un recurso jobs definido.

jobs.insert

Llama al método jobs.insert con los siguientes parámetros:

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

Donde:

  • PROJECT_ID: Es el proyecto para el que se creará la sesión.
  • JOB_ID: Es el trabajo para el que se creará la sesión.
  • SQL_STATEMENT: Es la primera instrucción de SQL para la sesión.
  • SESSION_ID: El ID de la sesión.

Prueba tu sesión

Ingresa el siguiente cuerpo de solicitud para crear una tabla temporal llamada Temperature en una sesión que hayas creado. Reemplaza el ID del proyecto, el ID de trabajo y el ID de sesión por los tuyos.

{
  "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"
      }]
    }
  }
}

Ingresa el siguiente cuerpo de solicitud para obtener una lista de todos los valores en la tabla Temperature de una sesión. Reemplaza el ID del proyecto, el ID de trabajo y el ID de sesión por los tuyos.

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

Asegúrate de que el cuerpo de la respuesta de ambas solicitudes sea similar a este:

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

jobs.query

Llama al método jobs.query con los siguientes parámetros:

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

Donde:

  • SQL_STATEMENT: Es la primera instrucción de SQL para la sesión.
  • SESSION_ID: El ID de la sesión.

Prueba tu sesión

Ingresa el siguiente cuerpo de solicitud para crear una tabla temporal llamada Temperature en una sesión que hayas creado. Reemplaza el ID del proyecto, el ID de trabajo y el ID de sesión por los tuyos.

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

Ingresa el siguiente cuerpo de solicitud para obtener una lista de todos los valores en la tabla Temperature de una sesión. Reemplaza el ID del proyecto, el ID de trabajo y el ID de sesión por los tuyos.

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

Asegúrate de que el cuerpo de la respuesta de ambas solicitudes sea similar a este:

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

¿Qué sigue?