안녕하세요, 엄팀입니다.
다들 즐거운 연휴 보내고 계신가요? 날이 완전히 선선해진 거 같습니다. 천고마비의 계절이라고 다들 맛있는 거 많이 드시고 포동포동 살도 찌우셔요.
오늘의 포스팅 주제는 GCP가 제공하는 BigQuery Service에서 Query의 종류와 결과 쓰기입니다.
그럼, 오늘의 포스팅 시작하겠습니다.
기본적으로 BigQuery는 가능한 한 빨리 실행되는 대화형 Query로 작업을 실행합니다. 예약에서 실행되는 대화형 Query 수는 동시 한도에 반영되고, 이 한도에 도달하면 추가 Query가 실패하고 Error가 발생합니다.
주문형 가격 책정 모델을 사용하여 실행되는 Query의 경우 BigQuery는 리소스 가용성을 기준으로 동시 Query 한도를 동적으로 계산합니다. 이 한도에 도달하면 추가 Query가 Queue에서 대기합니다.
일괄 Query 작업을 사용하면 BigQuery 공유 Resource Pool에서 유휴 Resource를 사용할 수 있을 때 BigQuery가 Query를 Queue에 추가하고 시작합니다. 이때, 일반적으로 Query는 몇 분 동안만 Queue에 추가됩니다.
일괄 Query는 동시 한도에 반영되지 않고, Project에서 최대 10개의 동시 일괄 Query를 실행할 수 있습니다 일괄 Query는 대화형 Query와 동일한 Resource를 사용합니다. 정액제를 사용하는 경우에는 일괄 Query 및 대화형 Query가 할당된 Slot을 공유합니다.
BigQuery는 Query 결과를 임시 Table 또는 영구 Table에 저장합니다. 영구 Table을 결과의 대상 Table로 지정할 때 기존 Table을 추가할지, 또는 덮어쓸지, 아니면 고유한 이름으로 새 Table을 생성할 지 선택할 수 있습니다.
Query 작업을 위해서는 필요한 Role이 있습니다.
Project에 대한 BigQuery Job User와 Query에서 참조하는 모든 Table과 View에 대한 BigQuery Data Viewer입니다.
Query를 실행하는 수단은 여러가지인데, 오늘은 bq 명령어로 Query를 실행하는 방법을 알아보겠습니다.
아래는 대화형 Query를 실행하는 bq 명령어입니다.
bq query \
--use_legacy_sql=false \
'SELECT
name, gender,
SUM(number) AS total
FROM
`bigquery-public-data.usa_names.usa_1910_2013`
GROUP BY
name, gender
ORDER BY
total DESC
LIMIT
10;'
--use_legacy_sql=false 플래그를 사용하여 GoogleSQL 구문을 사용하였습니다.
추가로 Query 결과의 대상 Table 및 Location을 지정하는 명령어도 존재합니다.
bq query \
--location=[Location명] \
--destination_table=[Table명] \
--use_legacy_sql=false \
[Query]
위 명령어를 이용하여 Query의 결과를 저장할 적절한 Table과 Location을 지정하시면 됩니다.
다음은 일괄 Query를 실행하는 bq 명령어입니다.
bq query \
--batch \
--use_legacy_sql=false \
'SELECT
name, gender,
SUM(number) AS total
FROM
`bigquery-public-data.usa_names.usa_1910_2013`
GROUP BY
name, gender
ORDER BY
total DESC
LIMIT
10;'
대화형 Query와의 차이점은 --batch 플래그가 사용되었다는 점입니다.
일괄 Query 명령어 또한 Query 결과의 대상 Table 및 Location 지정이 가능합니다.
bq query \
--batch \
--location=[Location명] \
--destination_table=[Table명] \
--use_legacy_sql=false \
[Query]
위에서 말씀드렸듯이, Query 결과는 영구 또는 임시 Table에 저장이 됩니다.
Query 결과를 Table에 쓰려면 아래와 같은 최소 권한이 필요합니다.
bigquery.tables.create
bigquery.tables.updateData
bigquery.jobs.create
Query할 데이터에 Access 하기 위해선 bigquery.tables.getData와 같은 추가 권한이 필요하며, BigQuery Data Editor, BigQuery Data Owner, BigQuery Admin 등의 Role이 필요 Permission들을 가지고 있습니다.
영구 Table에 Query 결과를 쓰는 명령어를 알아보겠습니다.
bq --location=location query \
--destination_table [Project ID]:[Dataset명].[Table명] \
--use_legacy_sql=false [Query]
다음은 Legacy SQL을 사용하여 크기가 큰 결과를 쓰는 명령어입니다.
bq --location=[Location명] query \
--destination_table [Project ID]:[Dataset명].[Table명] \
--use_legacy_sql=true \
--allow_large_results [Query]
Legacy SQL에서는 크기가 큰 결과 쓰기에 대한 제한이 있는데, 아래와 같습니다.
- 대상 Table을 지정해야 하는 것
- 최상위 ORDER BY, TOP 또는 LIMIT 절은 지정할 수 없다는 것
- 윈도움 함수는 PARTITION BY 절과 함께 사용하는 경우에만 결과를 반환한다는 것
오늘은 BigQuery에서 사용되는 Query의 종류와 Query 결과를 쓰는 방법에 대해 알아보았는데요.
BigQuery 하나의 Service만 해도 Docs가 엄청나네요.. 더 열심히 공부해야겠다는 마음이 드는 포스팅이었습니다.
포스팅 읽어주셔서 감사하며, 오늘은 여기까지 하도록 하겠습니다.
다들 사고 없이 즐거운 연휴 보내시길 바라며, 베바!
'CSP (Cloud Service Provider) > GCP' 카테고리의 다른 글
Vexter AI를 사용한 PaLM 소개 및 활용 (0) | 2023.10.12 |
---|---|
[GCP] Cloud Storage와 lifecycle (1) | 2023.10.12 |
Vertex AI Workbench란? (0) | 2023.09.27 |
[GCP] 정책 태그 개념 및 설정 방법 (0) | 2023.09.27 |
[GCP] Identity-Aware Proxy (0) | 2023.09.27 |
댓글