세션에서 쿼리 실행

이 문서에서는 BigQuery 세션에서 쿼리를 실행하는 방법을 설명합니다. 이 문서는 세션을 대체적으로 이해하고 있고, 이미 세션을 만들었고, 사용할 세션의 ID를 알고 있는 사용자를 대상으로 합니다.

이 단계를 완료하기 전에 세션을 만드는 데 필요한 권한이 있는지 확인합니다.

세션에서 쿼리 실행

세션 만들기가 완료되면 세션에 쿼리를 추가하고 실행할 수 있습니다. 이를 위한 몇 가지 방법이 있습니다.

Console

  1. Google Cloud 콘솔에서 BigQuery 페이지로 이동합니다.

    BigQuery로 이동

  2. 세션이 포함된 편집기 탭을 클릭합니다.

  3. 세션에 쿼리를 추가하고 실행을 클릭합니다.

세션 테스트

Google Cloud 콘솔에서 만든 세션이 포함된 편집기 탭을 열고 다음 SQL 문을 실행합니다.

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

탭에서 콘텐츠를 삭제하거나 주석 처리하고 다음 SQL 문을 실행합니다.

SELECT * FROM Temperature;

다음과 비슷한 결과가 표시되는지 확인합니다.

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

bq

Cloud Shell을 열고 다음 bq query 명령어를 입력합니다.

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

각 매개변수는 다음과 같습니다.

  • SESSION_ID: 이를 작업하려는 세션 ID로 바꿉니다.
  • SQL_STATEMENT: 세션에서 실행할 SQL 문입니다.

세션 테스트

생성한 세션Temperature라는 임시 테이블을 만듭니다. 세션 ID를 원하는 값으로 바꿉니다.

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

Temperature 테이블의 모든 값 목록을 가져옵니다. 세션 ID를 원하는 값으로 바꿉니다.

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

다음과 비슷한 결과가 표시되는지 확인합니다.

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

In session: CgwKCmZhbGl1LXRlc3QQARokMDAzYjI0OWQtZ

.bigqueryrc에 세션을 추가하여 시간 절약하기

Cloud Shell에서 쿼리를 많이 실행하려는 경우 .bigqueryrc에서 [query]에 세션 ID를 추가하면 각 명령어에 세션 ID를 복사하여 붙여넣을 필요가 없습니다.

.bigqueryrc의 세션 ID는 다음과 같습니다.

[query]
--session_id=CgwKCmZhbGl1LXRlc3QQARokMDAzYjI0OWQtZ

세션 ID를 .bigqueryrc에 추가한 후에는 이 명령어를 대신 사용할 수 있습니다.

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

다른 세션을 사용하려는 경우 또는 세션이 종료된 경우 .bigqueryrc를 업데이트해야 합니다.

API

정의된 작업 리소스를 사용하여 jobs.insert 메서드 또는 jobs.query 메서드를 호출합니다.

jobs.insert

다음 매개변수를 사용하여 jobs.insert 메서드를 호출합니다.

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

각 매개변수는 다음과 같습니다.

  • PROJECT_ID: 세션을 만들 프로젝트입니다.
  • JOB_ID: 세션을 만들 작업입니다.
  • SQL_STATEMENT: 세션의 첫 번째 SQL 문입니다.
  • SESSION_ID: 세션의 ID입니다.

세션 테스트

다음 요청 본문을 입력하여 생성한 세션Temperature라는 임시 테이블을 만듭니다. 프로젝트 ID, 작업 ID, 세션 ID를 원하는 값으로 바꿉니다.

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

다음 요청 본문을 입력하여 세션의 Temperature 테이블에 있는 모든 값의 목록을 가져옵니다. 프로젝트 ID, 작업 ID, 세션 ID를 원하는 값으로 바꿉니다.

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

두 요청의 응답 본문이 다음과 유사한지 확인합니다.

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

jobs.query

다음 매개변수를 사용하여 jobs.query 메서드를 호출합니다.

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

각 매개변수는 다음과 같습니다.

  • SQL_STATEMENT: 세션의 첫 번째 SQL 문입니다.
  • SESSION_ID: 세션의 ID입니다.

세션 테스트

다음 요청 본문을 입력하여 생성한 세션Temperature라는 임시 테이블을 만듭니다. 프로젝트 ID, 작업 ID, 세션 ID를 원하는 값으로 바꿉니다.

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

다음 요청 본문을 입력하여 세션의 Temperature 테이블에 있는 모든 값의 목록을 가져옵니다. 프로젝트 ID, 작업 ID, 세션 ID를 원하는 값으로 바꿉니다.

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

두 요청의 응답 본문이 다음과 유사한지 확인합니다.

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

다음 단계