뷰 만들기
이 문서에서는 BigQuery에서 뷰를 만드는 방법을 설명합니다.
다음과 같은 방법으로 BigQuery에서 뷰를 만들 수 있습니다.
- Google Cloud 콘솔 사용
- bq 명령줄 도구의
bq mk
명령어 사용 tables.insert
API 메서드 호출- 클라이언트 라이브러리 사용
CREATE VIEW
데이터 정의 언어(DDL) 문 제출
뷰 제한사항
BigQuery 뷰에는 다음 제한사항이 적용됩니다.
- 뷰는 읽기 전용입니다. 예를 들어 데이터를 삽입, 업데이트 또는 삭제하는 쿼리는 실행할 수 없습니다.
- 뷰를 포함하는 데이터 세트와 뷰에서 참조되는 테이블을 포함하는 데이터 세트가 동일한 위치에 있어야 합니다.
- 뷰 내부의 참조는 데이터 세트로 한정되어야 합니다. 기본 데이터 세트는 뷰 본문에 영향을 주지 않습니다.
TableDataList
JSON API 메서드를 사용하여 뷰에서 데이터를 검색할 수 없습니다. 자세한 내용은 Tabledata: list를 참조하세요.- 뷰를 사용할 때는 GoogleSQL과 legacy SQL 쿼리를 혼합할 수 없습니다. GoogleSQL 쿼리는 legacy SQL 문법을 사용하여 정의된 뷰를 참조할 수 없습니다.
- 뷰에서 쿼리 매개변수를 참조할 수 없습니다.
- 기본 테이블의 스키마는 뷰를 만들 때 뷰와 함께 저장됩니다. 뷰를 만든 후 열이 추가, 삭제 또는 수정된 경우 뷰가 자동으로 업데이트되지 않으며 뷰 SQL 정의가 변경되거나 뷰를 다시 만들 때까지 보고된 스키마가 부정확한 상태로 유지됩니다. 보고된 스키마가 정확하지 않더라도 제출된 쿼리는 모두 정확한 결과를 생성합니다.
- 자동으로 legacy SQL 뷰를 GoogleSQL 문법으로 업데이트할 수 없습니다. 뷰를 정의하는 데 사용된 쿼리를 수정하려면 다음을 사용하면 됩니다.
- Google Cloud 콘솔의 쿼리 수정 옵션
- bq 명령줄 도구의
bq update --view
명령어 - BigQuery 클라이언트 라이브러리
- update 또는 patch API 메서드
- 뷰를 정의하는 SQL 쿼리에 임시 사용자 정의 함수나 임시 테이블을 포함할 수 없습니다.
- 와일드 카드 테이블 쿼리에서 뷰를 참조할 수 없습니다.
뷰에 적용되는 할당량과 한도에 대한 자세한 내용은 뷰 한도를 참조하세요.
시작하기 전에
사용자에게 이 문서의 각 작업을 수행하는 데 필요한 권한을 부여하는 Identity and Access Management(IAM) 역할을 부여합니다.
필수 권한
뷰는 BigQuery에서 테이블 리소스로 취급되므로 뷰를 만들려면 테이블을 만들 때와 동일한 권한이 필요합니다. 뷰의 SQL 쿼리에서 참조하는 모든 테이블을 쿼리할 권한도 필요합니다.
뷰를 만들려면 bigquery.tables.create
IAM 권한이 필요합니다. 사전 정의된 IAM 역할 roles/bigquery.dataEditor
에는 뷰를 만드는 데 필요한 권한이 포함됩니다.
또한 bigquery.datasets.create
권한이 있으면 사용자가 만든 데이터 세트에 뷰를 만들 수 있습니다. 소유하지 않은 데이터의 뷰를 만들려면 해당 테이블에 대한 bigquery.tables.getData
권한이 있어야 합니다.
BigQuery의 IAM 역할과 권한에 대한 자세한 내용은 사전 정의된 역할 및 권한을 참조하세요.
뷰 이름 지정
BigQuery에서 뷰를 만드는 경우 뷰 이름은 데이터 세트별로 고유해야 합니다. 뷰 이름은 다음을 포함할 수 있습니다.
- 최대 총 1,024 UTF-8 바이트의 문자를 포함합니다.
- L(문자), M(표시), N(숫자), Pc(밑줄 포함 커넥터), Pd(대시), Zs(공백) 카테고리의 유니코드를 포함합니다. 자세한 내용은 일반 카테고리를 참조하세요.
view 01
, ग्राहक
, 00_お客様
, étudiant-01
은 모두 유효한 뷰 이름 예시입니다.
주의사항:
- 기본적으로 테이블 이름은 대소문자를 구분합니다.
mytable
및MyTable
은 대소문자 구분이 사용 중지된 데이터 세트에 속하지 않는 한 동일한 데이터 세트에 공존할 수 있습니다. - 일부 뷰 이름 및 뷰 이름 프리픽스는 예약되어 있습니다. 뷰 이름 또는 프리픽스가 예약되어 있다는 오류가 표시되면 다른 이름을 선택한 후 다시 시도하세요.
시퀀스에 점 연산자(
.
)를 여러 개 포함하면 중복된 연산자가 암시적으로 삭제됩니다.예를 들어 원래 구문이
project_name....dataset_name..table_name
이면구문이
project_name.dataset_name.table_name
으로 바뀝니다.
뷰 만들기
뷰에 액세스할 수 있는 데이터를 정의하는 데 사용되는 SQL 쿼리를 작성하여 뷰를 만들 수 있습니다. SQL 쿼리는 SELECT
문으로 구성되어야 합니다.
다른 문 유형(예: DML 문) 및 다중 문 쿼리는 뷰 쿼리에서 허용되지 않습니다.
뷰를 만들려면 다음 안내를 따르세요.
Console
쿼리를 실행한 후 쿼리 결과 창 위에 있는 뷰 저장 버튼을 클릭하여 쿼리를 뷰로 저장합니다.
뷰 저장 대화상자에서 다음을 수행합니다.
- 프로젝트 이름에서 뷰를 저장할 프로젝트를 선택합니다.
- 데이터 세트 이름에서 뷰를 저장할 데이터 세트를 선택합니다. 뷰가 포함된 데이터 세트와 뷰에서 참조되는 테이블이 포함된 데이터 세트가 같은 위치에 있어야 합니다.
- 테이블 이름에 뷰 이름을 입력합니다.
- 저장을 클릭합니다.
SQL
CREATE VIEW
문을 사용합니다.
다음 예시는 미국 이름 공개 데이터 세트에서 usa_male_names
라는 뷰를 만듭니다.
Google Cloud 콘솔에서 BigQuery 페이지로 이동합니다.
쿼리 편집기에서 다음 문을 입력합니다.
CREATE VIEW mydataset.usa_male_names(name, number) AS ( SELECT name, number FROM
bigquery-public-data.usa_names.usa_1910_current
WHERE gender = 'M' ORDER BY number DESC );실행을 클릭합니다.
쿼리를 실행하는 방법에 대한 자세한 내용은 대화형 쿼리 실행을 참조하세요.
bq
bq mk
명령어를 --view
플래그와 함께 사용합니다. GoogleSQL 쿼리의 경우 --use_legacy_sql
플래그를 추가하고 false
로 설정합니다. 선택적 파라미터에는 --add_tags
, --expiration
, --description
, --label
이 포함됩니다. 전체 파라미터 목록은 bq mk
명령어 참조를 확인하세요.
쿼리에서 Cloud Storage 또는 로컬 파일에 저장된 외부 사용자 정의 함수(UDF) 리소스를 참조하는 경우 --view_udf_resource
플래그를 사용하여 리소스를 지정합니다. --view_udf_resource
플래그는 여기서 설명하지 않습니다. UDF 사용에 대한 자세한 내용은 UDF를 참조하세요.
기본 프로젝트 이외의 프로젝트에 뷰를 만드는 경우 --project_id
플래그를 사용하여 프로젝트 ID를 지정합니다.
bq mk \ --use_legacy_sql=false \ --view_udf_resource=PATH_TO_FILE \ --expiration=INTEGER \ --description="DESCRIPTION" \ --label=KEY_1:VALUE_1 \ --add_tags=KEY_2:VALUE_2[,...] \ --view='QUERY' \ --project_id=PROJECT_ID \ DATASET.VIEW
다음을 바꿉니다.
PATH_TO_FILE
은 뷰에 사용되는 UDF 리소스이며, 즉시 로드 및 평가될 코드 파일의 URI 또는 로컬 파일 시스템 경로입니다. 여러 파일을 지정하려면 플래그를 반복합니다.INTEGER
은 뷰의 수명(초 단위)을 설정합니다.INTEGER
가0
이면 뷰가 만료되지 않습니다.--expiration
플래그를 포함하지 않으면 BigQuery에서 데이터 세트의 기본 테이블 수명으로 뷰를 만듭니다.DESCRIPTION
은 따옴표로 묶인 뷰에 대한 설명입니다.KEY_1:VALUE_1
는 라벨을 나타내는 키-값 쌍입니다. 여러 라벨을 지정하려면--label
플래그를 반복합니다.KEY_2:VALUE_2
는 라벨을 나타내는 키-값 쌍입니다. 키-값 쌍 사이 쉼표를 사용하여 동일한 플래그 아래에 여러 태그를 추가합니다.QUERY
는 유효한 쿼리입니다.PROJECT_ID
는 프로젝트 ID입니다(기본 프로젝트를 구성하지 않은 경우).DATASET
는 프로젝트의 데이터 세트입니다.VIEW
는 만들려는 뷰의 이름입니다.
예를 들면 다음과 같습니다.
다음 명령어를 입력하여 기본 프로젝트의 mydataset
에 myview
라는 이름의 뷰를 만듭니다. 테이블 만료 시간은 3,600초(1시간)로, 설명은 This is my view
로, 라벨은 organization:development
로 설정됩니다. 뷰를 만드는 데 사용되는 쿼리는 USA Name Data 공개 데이터 세트의 데이터를 쿼리합니다.
bq mk \
--use_legacy_sql=false \
--expiration 3600 \
--description "This is my view" \
--label organization:development \
--view \
'SELECT
name,
number
FROM
`bigquery-public-data.usa_names.usa_1910_current`
WHERE
gender = "M"
ORDER BY
number DESC' \
mydataset.myview
다음 명령어를 입력하여 myotherproject
의 mydataset
에 myview
라는 이름의 뷰를 만듭니다. 설명은 This is my view
로, 라벨은 organization:development
로 설정되고 뷰 만료 시간은 데이터 세트의 기본 테이블 만료 시간으로 설정됩니다.
뷰를 만드는 데 사용되는 쿼리는 USA Name Data 공개 데이터 세트의 데이터를 쿼리합니다.
bq mk \
--use_legacy_sql=false \
--description "This is my view" \
--label organization:development \
--project_id myotherproject \
--view \
'SELECT
name,
number
FROM
`bigquery-public-data.usa_names.usa_1910_current`
WHERE
gender = "M"
ORDER BY
number DESC' \
mydataset.myview
뷰를 만든 후 뷰의 만료 시간, 설명, 라벨을 업데이트할 수 있습니다. 자세한 내용은 뷰 업데이트를 참조하세요.
Terraform
google_bigquery_table
리소스를 사용합니다.
BigQuery에 인증하려면 애플리케이션 기본 사용자 인증 정보를 설정합니다. 자세한 내용은 클라이언트 라이브러리의 인증 설정을 참조하세요.
다음 예시에서는 이름이 myview
인 뷰를 만듭니다.
Google Cloud 프로젝트에 Terraform 구성을 적용하려면 다음 섹션의 단계를 완료하세요.
Cloud Shell 준비
- Cloud Shell을 실행합니다.
-
Terraform 구성을 적용할 기본 Google Cloud 프로젝트를 설정합니다.
이 명령어는 프로젝트당 한 번만 실행하면 되며 어떤 디렉터리에서도 실행할 수 있습니다.
export GOOGLE_CLOUD_PROJECT=PROJECT_ID
Terraform 구성 파일에서 명시적 값을 설정하면 환경 변수가 재정의됩니다.
디렉터리 준비
각 Terraform 구성 파일에는 자체 디렉터리(루트 모듈이라고도 함)가 있어야 합니다.
-
Cloud Shell에서 디렉터리를 만들고 해당 디렉터리 내에 새 파일을 만드세요. 파일 이름에는
.tf
확장자가 있어야 합니다(예:main.tf
). 이 튜토리얼에서는 파일을main.tf
라고 합니다.mkdir DIRECTORY && cd DIRECTORY && touch main.tf
-
튜토리얼을 따라 하는 경우 각 섹션이나 단계에서 샘플 코드를 복사할 수 있습니다.
샘플 코드를 새로 만든
main.tf
에 복사합니다.필요한 경우 GitHub에서 코드를 복사합니다. 이는 Terraform 스니펫이 엔드 투 엔드 솔루션의 일부인 경우에 권장됩니다.
- 환경에 적용할 샘플 매개변수를 검토하고 수정합니다.
- 변경사항을 저장합니다.
-
Terraform을 초기화합니다. 이 작업은 디렉터리당 한 번만 수행하면 됩니다.
terraform init
원하는 경우 최신 Google 공급업체 버전을 사용하려면
-upgrade
옵션을 포함합니다.terraform init -upgrade
변경사항 적용
-
구성을 검토하고 Terraform에서 만들거나 업데이트할 리소스가 예상과 일치하는지 확인합니다.
terraform plan
필요에 따라 구성을 수정합니다.
-
다음 명령어를 실행하고 프롬프트에
yes
를 입력하여 Terraform 구성을 적용합니다.terraform apply
Terraform에 '적용 완료' 메시지가 표시될 때까지 기다립니다.
- 결과를 보려면 Google Cloud 프로젝트를 엽니다. Google Cloud 콘솔에서 UI의 리소스로 이동하여 Terraform이 리소스를 만들었거나 업데이트했는지 확인합니다.
API
view
속성을 포함하는 테이블 리소스로 tables.insert
메서드를 호출합니다.
Go
이 샘플을 사용해 보기 전에 BigQuery 빠른 시작: 클라이언트 라이브러리 사용의 Go 설정 안내를 따르세요. 자세한 내용은 BigQuery Go API 참고 문서를 확인하세요.
BigQuery에 인증하려면 애플리케이션 기본 사용자 인증 정보를 설정합니다. 자세한 내용은 클라이언트 라이브러리의 인증 설정을 참조하세요.
자바
이 샘플을 사용해 보기 전에 BigQuery 빠른 시작: 클라이언트 라이브러리 사용의 Java 설정 안내를 따르세요. 자세한 내용은 BigQuery Java API 참고 문서를 확인하세요.
BigQuery에 인증하려면 애플리케이션 기본 사용자 인증 정보를 설정합니다. 자세한 내용은 클라이언트 라이브러리의 인증 설정을 참조하세요.
Node.js
이 샘플을 사용해 보기 전에 BigQuery 빠른 시작: 클라이언트 라이브러리 사용의 Node.js 설정 안내를 따르세요. 자세한 내용은 BigQuery Node.js API 참고 문서를 확인하세요.
BigQuery에 인증하려면 애플리케이션 기본 사용자 인증 정보를 설정합니다. 자세한 내용은 클라이언트 라이브러리의 인증 설정을 참조하세요.
Python
이 샘플을 사용해 보기 전에 BigQuery 빠른 시작: 클라이언트 라이브러리 사용의 Python 설정 안내를 따르세요. 자세한 내용은 BigQuery Python API 참고 문서를 확인하세요.
BigQuery에 인증하려면 애플리케이션 기본 사용자 인증 정보를 설정합니다. 자세한 내용은 클라이언트 라이브러리의 인증 설정을 참조하세요.
뷰를 만든 후 테이블을 쿼리하는 것처럼 뷰를 쿼리합니다.
뷰 보안
BigQuery에서 뷰에 대한 액세스를 제어하려면 승인된 뷰를 참조하세요.
다음 단계
- 승인된 뷰 만들기에 대한 자세한 내용은 승인된 뷰 만들기를 참조하세요.
- 뷰 메타데이터 가져오기에 대한 자세한 내용은 뷰 정보 가져오기를 참조하세요.
- 뷰 관리에 대한 자세한 내용은 뷰 관리를 참조하세요.