세션으로 작업하기
이 문서에서는 세션을 만들고, 사용하고, 종료하고, 나열하는 방법을 설명합니다.
이 단계를 완료하기 전에 필요한 권한이 있는지 확인합니다.
세션 만들기
SQL 활동 그룹을 캡처하려면 BigQuery 세션을 만듭니다. 세션을 만든 후 세션이 종료될 때까지 세션에서 대화형 쿼리를 실행할 수 있습니다. 세션의 모든 쿼리는 세션이 생성된 위치에서 실행(처리)됩니다.
콘솔
Trusted Cloud 콘솔에서 각 세션은 편집기 탭에 할당됩니다.
Trusted Cloud 콘솔에서 BigQuery 페이지로 이동합니다.
새 쿼리 작성을 클릭합니다. 새 편집기 탭이 열립니다.
더보기 > 쿼리 설정을 클릭합니다. 쿼리 설정 패널이 표시됩니다.
세션 관리 섹션에서 세션 모드 사용을 클릭하여 세션 모드를 사용 설정합니다.
추가 설정 > 데이터 위치에서 위치를 선택합니다. 세션이 생성되면 세션의 모든 쿼리가 이 위치로 제한되며 위치를 변경할 수 없습니다.
저장을 클릭합니다.
편집기 탭에서 쿼리를 작성하고 실행합니다. 이 첫 번째 쿼리가 실행된 후 새 세션이 생성됩니다.
bq
Cloud Shell을 열고 다음 bq query
명령어를 입력합니다.
bq query \ --nouse_legacy_sql \ --create_session [--location 'SESSION_LOCATION'] \ 'SQL_STATEMENT'
각 항목의 의미는 다음과 같습니다.
- SESSION_LOCATION: 세션을 실제 위치에 바인딩. 세션의 모든 쿼리를 이 위치로 제한합니다. (선택사항)
- SQL_STATEMENT: 세션의 첫 번째 SQL 문
세션 ID는 쿼리 결과와 함께 반환됩니다.
API
다음 매개변수를 사용하여 jobs.query
메서드를 호출합니다.
{ "query": "SQL_STATEMENT", "createSession": true, ["location": "SESSION_LOCATION"] }
각 항목의 의미는 다음과 같습니다.
- SQL_STATEMENT: 세션의 첫 번째 SQL 문
- SESSION_LOCATION: 세션을 실제 위치에 바인딩. 세션의 모든 쿼리를 이 위치로 제한합니다. (선택사항)
응답 본문은 다음과 비슷합니다.
{
"jobReference": {
"projectId": "myProject",
"jobId": "job_123"
},
"statistics": {
"sessionInfo": {
"sessionId": "CgwKCmZhbGl1LXRlc3QQARokMDAzYjI0OWQtZ"
}
}
}
세션에서 쿼리 실행
세션을 만든 후에는 해당 세션에서 쿼리를 실행할 수 있습니다.
콘솔
Trusted Cloud 콘솔에서 BigQuery 페이지로 이동합니다.
세션이 포함된 편집기 탭을 클릭합니다.
세션에 쿼리를 추가하고 실행을 클릭합니다.
bq
Cloud Shell을 열고 다음 bq query
명령어를 입력합니다.
bq query \ --nouse_legacy_sql \ --session_id=SESSION_ID \ 'SQL_STATEMENT'
각 항목의 의미는 다음과 같습니다.
- SESSION_ID: 이를 작업하려는 세션 ID로 바꿉니다.
- SQL_STATEMENT: 세션에서 실행할 SQL 문입니다.
쿼리 결과 뒤에 세션 ID가 표시됩니다.
Cloud Shell에서 쿼리를 많이 실행하려는 경우 .bigqueryrc
에서 [query]
에 세션 ID를 추가하면 각 명령어에 세션 ID를 복사하여 붙여넣을 필요가 없습니다.
.bigqueryrc
의 세션 ID는 다음과 같습니다.
[query]
--session_id=CgwKCmZhbGl1LXRlc3QQARokMDAzYjI0OWQtZ
세션 ID를 .bigqueryrc
에 추가한 후에는 bq query
명령어에서 --session_id
플래그를 생략할 수 있습니다. 다른 세션을 사용하려는 경우 또는 세션이 종료된 경우 .bigqueryrc
파일을 업데이트해야 합니다.
API
다음 매개변수를 사용하여 jobs.query
메서드를 호출합니다.
{ "query": "SQL_STATEMENT", "connectionProperties": [{ "key": "session_id", "value": "SESSION_ID" }] }
각 항목의 의미는 다음과 같습니다.
- SQL_STATEMENT: 세션의 첫 번째 SQL 문입니다.
- SESSION_ID: 세션의 ID입니다.
세션 종료
세션은 수동으로 또는 자동으로 종료할 수 있습니다. 종료된 세션의 기록은 종료 후 20일 동안 확인할 수 있습니다.
세션 자동 종료
세션은 24시간 동안 활동이 없거나 7일이 지나거나 어느 쪽이든 먼저 발생하는 시점에 자동으로 종료됩니다.
현재 세션 종료
SQL 문 또는Trusted Cloud 콘솔에서 세션을 만든 경우 현재 세션을 종료할 수 있습니다.
콘솔
Trusted Cloud 콘솔에서 BigQuery 페이지로 이동합니다.
세션이 포함된 편집기 탭을 찾아 닫습니다. 세션이 종료됩니다.
SQL
세션을 종료하려면 다음 안내를 따르세요.
Trusted Cloud 콘솔에서 BigQuery 페이지로 이동합니다.
쿼리 편집기에서 다음 문을 입력합니다.
CALL BQ.ABORT_SESSION();
실행을 클릭합니다.
쿼리를 실행하는 방법에 대한 자세한 내용은 대화형 쿼리 실행을 참조하세요.
ID로 세션 종료
해당 ID를 사용하여 세션을 종료할 수 있습니다. 이 방법으로 세션을 종료하기 위해 세션에 있을 필요는 없습니다.
세션 ID를 가져온 후 다음 문을 실행합니다.
CALL BQ.ABORT_SESSION(SESSION_ID);
SESSION_ID를 종료할 세션의 ID로 바꿉니다.
활성 세션의 ID 가져오기
경우에 따라 세션 내에서 계속 작업하려면 세션을 참조해야 합니다. 예를 들어 Cloud Shell로 작업하는 경우 해당 세션에 대한 명령어를 실행할 때마다 세션 ID를 포함해야 합니다.
콘솔
Trusted Cloud 콘솔의 세션 내에서 새 쿼리를 실행하기 위해 세션 ID를 제공할 필요가 없습니다. 세션이 포함된 편집기 탭에서 계속 작업할 수 있습니다. 그러나 Cloud Shell 또는 API 호출에서 세션을 참조하려면 콘솔에서 만든 세션의 ID를 알아야 합니다.
이 단계를 완료하기 전에 활성 세션에서 하나 이상의 쿼리를 실행했는지 확인하세요.
Trusted Cloud 콘솔에서 BigQuery 페이지로 이동합니다.
세션이 포함된 편집기 탭을 클릭합니다.
쿼리 결과에서 작업 정보를 클릭합니다.
작업 정보 목록에서 세션 ID를 검색합니다.
Session ID: CgwKCmZhbGl1LXRlc3QQARokMDAzYjI0OWQtZ
bq
Cloud Shell 내의 세션에서 쿼리 명령어를 실행하려면 명령어에 세션 ID를 포함해야 합니다. 세션을 만들 때 또는 세션을 나열하여 세션 ID를 가져올 수 있습니다.
Cloud Shell로 세션을 만들 때 반환되는 세션 ID는 다음과 비슷합니다.
In session: CgwKCmZhbGl1LXRlc3QQARokMDAzYjI0OWQtZ
API
API 호출로 SQL 명령어를 세션에 전달하려면 API 호출에 세션 ID를 포함해야 합니다. 세션을 만들 때 또는 세션을 나열하여 세션 ID를 가져올 수 있습니다.
API 호출로 세션을 만들 때 응답의 세션 ID는 다음과 비슷합니다.
sessionId: CgwKCmZhbGl1LXRlc3QQARokMDAzYjI0OWQtZ
활성 및 비활성 세션 나열
활성 및 비활성 세션의 세션 ID를 가져오려면 다음 단계를 수행합니다.
콘솔
Trusted Cloud 콘솔에서 BigQuery 페이지로 이동합니다.
작업 기록의 유형을 선택합니다.
- 최근 작업의 정보를 표시하려면 개인 기록을 클릭합니다.
- 프로젝트의 최근 작업 정보를 표시하려면 프로젝트 기록을 클릭합니다.
세션 ID 열에서 작업의 세션 ID를 볼 수 있습니다.
SQL
활성 세션 및 종료된 세션을 포함한 최근 세션 3개의 목록을 가져오려면 편집기 탭에서 다음 쿼리를 실행합니다.
Trusted Cloud 콘솔에서 BigQuery 페이지로 이동합니다.
쿼리 편집기에서 다음 문을 입력합니다.
SELECT session_id, MAX(creation_time) AS last_modified_time FROM
region-us
.INFORMATION_SCHEMA.VIEW WHERE session_id IS NOT NULL AND creation_time > TIMESTAMP_SUB(CURRENT_TIMESTAMP(), INTERVAL 20 DAY) GROUP BY session_id ORDER BY last_modified_time DESC;다음을 바꿉니다.
VIEW
:INFORMATION_SCHEMA
뷰:JOBS_BY_USER
: 현재 프로젝트에서 현재 사용자가 만든 작업만 반환합니다.SESSIONS_BY_USER
: 현재 프로젝트에서 현재 사용자가 만든 세션만 반환합니다.SESSIONS_BY_PROJECT
: 현재 프로젝트의 모든 세션을 반환합니다.
실행을 클릭합니다.
쿼리를 실행하는 방법에 대한 자세한 내용은 대화형 쿼리 실행을 참조하세요.
결과는 다음과 비슷합니다.
+-------------------------------------------------------------------------+ | session_id | last_modified_time | +-------------------------------------------------------------------------+ | CgwKCmZhbGl1LXRlc3QQARokMGQ5YWWYzZmE0YjhkMDBm | 2021-06-01 23:04:26 | | CgwKCmZhbGl1LXRlc3QQARokMDAzYjI0OWQtZTczwZjA1NDc2 | 2021-05-30 22:43:02 | | CgwKCmZhbGl1LXRlc3QQY2MzLTg4ZDEtYzVhOWZiYmM5NzZk | 2021-04-07 22:31:21 | +-------------------------------------------------------------------------+
세션 기록 보기
세션은 시간 범위 내에서 SQL 활동을 캡처합니다. 이 정보는 세션의 기록에 저장됩니다. 세션 기록을 사용하면 세션에서 변경한 내용을 추적할 수 있습니다. 작업이 실패하거나 성공하면 세션 기록에 저장되므로, 뒤로 돌아가서 이전에 수행된 작업을 확인할 수 있습니다.
콘솔
Trusted Cloud 콘솔에서 세션 기록을 보려면 개인 기록 또는 프로젝트 기록을 세션 ID로 필터링하여 특정 세션에서 실행된 모든 SQL 쿼리를 볼 수 있습니다.
Trusted Cloud 콘솔에서 BigQuery 페이지로 이동합니다.
작업 기록 섹션을 펼칩니다.
확인하려는 작업 기록 유형을 선택합니다.
- 최근 작업의 정보를 표시하려면 개인 기록을 클릭합니다.
- 프로젝트의 최근 작업 정보를 표시하려면 프로젝트 기록을 클릭합니다.
필터를 클릭한 후 세션 ID를 선택합니다.
세션 ID 필드에서 세션 ID를 검색합니다.
Session ID: CgwKCmZhbGl1LXRlc3QQARokMDAzYjI0OWQtZ
SQL
특정 세션의 이전 데이터를 보려면 먼저 세션 ID를 가져온 후 다음 단계를 수행합니다.
Trusted Cloud 콘솔에서 BigQuery 페이지로 이동합니다.
쿼리 편집기에서 다음 문을 입력합니다.
SELECT * FROM region-us.INFORMATION_SCHEMA.VIEW WHERE session_info.session_id = 'SESSION_ID';
다음을 바꿉니다.
VIEW: 사용할
INFORMATION_SCHEMA
뷰다음 보기 중 하나를 선택합니다.
JOBS_BY_USER
: 현재 프로젝트에서 현재 사용자가 만든 작업만 반환합니다.SESSIONS_BY_USER
: 현재 프로젝트에서 현재 사용자가 만든 세션만 반환합니다.SESSIONS_BY_PROJECT
: 현재 프로젝트의 모든 세션을 반환합니다.
- SESSION_ID: 이전 데이터를 검색할 세션의 ID입니다.
실행을 클릭합니다.
쿼리를 실행하는 방법에 대한 자세한 내용은 대화형 쿼리 실행을 참조하세요.
예
다음은 세션 ID가 CgwKCmZhbGl1LXRlc3QQARokMDAzYjI0
인 세션의 기록을 반환합니다. 이 세션 ID를 자신의 ID로 바꿀 수 있습니다.
SELECT creation_time, query FROM region-us.INFORMATION_SCHEMA.JOBS_BY_USER WHERE session_info.session_id = 'CgwKCmZhbGl1LXRlc3QQARokMDAzYjI0' AND creation_time > TIMESTAMP_SUB(CURRENT_TIMESTAMP(), INTERVAL 20 DAY);
결과는 다음과 비슷합니다.
+---------------------+------------------------------------------------------------------------------------------+
| creation_time | query |
+---------------------+------------------------------------------------------------------------------------------+
| 2021-06-01 23:04:26 | SELECT * FROM Purchases; |
| 2021-06-01 23:02:51 | CREATE TEMP TABLE Purchases(total INT64) AS SELECT * FROM UNNEST([10,23,3,14,55]) AS a; |
+---------------------+------------------------------------------------------------------------------------------+
다음 단계
- 세션 소개를 참고하세요.
- 세션에서 쿼리 작성에 대해 자세히 알아보세요.