뷰 만들기

이 문서에서는 BigQuery에서 뷰를 만드는 방법을 설명합니다.

다음 방법으로 BigQuery에서 뷰를 만들 수 있습니다.

  • GCP Console 또는 기본 BigQuery 웹 UI 사용
  • 명령줄 도구의 bq mk 명령어 사용
  • tables.insert API 메서드 호출
  • 클라이언트 라이브러리 사용
  • CREATE VIEW 데이터 정의 언어(DDL) 문 제출

뷰 이름 지정

BigQuery에서 뷰를 만드는 경우 뷰 이름은 데이터세트별로 고유해야 합니다. 다음과 같은 뷰 이름을 사용할 수 있습니다.

  • 최대 1,024자 포함
  • 문자(대소문자 또는 소문자), 숫자, 밑줄 포함

뷰 제한사항

BigQuery 뷰에는 다음 제한사항이 적용됩니다.

  • 뷰를 포함하는 데이터세트와 뷰에서 참조되는 테이블을 포함하는 데이터세트가 동일한 위치에 있어야 합니다.
  • 뷰에서 데이터를 내보내는 BigQuery 작업은 실행할 수 없습니다.
  • TableDataList JSON API 메소드를 사용하여 뷰에서 데이터를 검색할 수 없습니다. 자세한 내용은 Tabledata: list를 참조하세요.
  • 뷰를 사용할 때는 표준 SQL 쿼리와 legacy SQL 쿼리를 혼합할 수 없습니다. 표준 SQL 쿼리는 legacy SQL 구문을 사용하여 정의된 뷰를 참조할 수 없습니다.
  • 뷰에서 쿼리 매개변수를 참조할 수 없습니다.
  • 기본 테이블의 스키마는 뷰를 만들 때 뷰와 함께 저장됩니다. 뷰를 만든 후 열이 추가 또는 삭제된 경우 뷰를 업데이트해야 보고된 스키마가 정확해집니다. 보고된 스키마가 정확하지 않더라도 제출된 쿼리는 모두 정확한 결과를 생성합니다.
  • 자동으로 legacy SQL 뷰를 표준 SQL 구문으로 업데이트할 수 없습니다. 뷰 정의에 사용된 쿼리를 수정하려면 GCP Console 또는 기본 BigQuery 웹 UI의 쿼리 수정 옵션, bq update --view CLI 명령어, 클라이언트 라이브러리 또는 updatepatch API 메서드를 사용합니다.
  • 뷰를 정의하는 SQL 쿼리에 사용자 정의 함수를 포함시킬 수 없습니다.
  • 와일드 카드 테이블 쿼리에서 뷰를 참조할 수 없습니다.

뷰에 적용되는 할당량과 한도에 대한 자세한 내용은 뷰 한도를 참조하세요.

필수 권한

뷰는 BigQuery에서 테이블 리소스로 취급되므로 뷰를 만들려면 테이블 만들기와 동일한 권한이 필요합니다. 뷰를 만들려면 최소한 bigquery.tables.create 권한을 부여받아야 합니다. 다음과 같은 사전 정의된 Cloud IAM 역할에는 bigquery.tables.create 권한이 있습니다.

  • bigquery.dataEditor
  • bigquery.dataOwner
  • bigquery.admin

또한 사용자에게 bigquery.datasets.create 권한이 있으면 사용자가 데이터세트를 만들 때 이에 대한 bigquery.dataOwner 액세스 권한이 부여됩니다. bigquery.dataOwner 액세스 권한이 있으면 사용자는 데이터세트에서 뷰를 만들 수 있습니다.

BigQuery의 Cloud IAM 역할과 권한에 대한 자세한 내용은 액세스 제어를 참조하세요.

뷰 만들기

뷰에 액세스할 수 있는 데이터를 정의하는 데 사용되는 SQL 쿼리를 작성하여 뷰를 만들 수 있습니다.

뷰를 만드는 데 사용되는 표준 SQL 쿼리에서는 프로젝트 ID를 테이블 및 뷰 참조에 `project_id.dataset.table` 형식으로 포함시켜야 합니다. 표준 SQL은 여러 프로젝트에서 뷰가 쿼리될 때 모호성을 방지하기 위해 명시적 프로젝트 ID를 요구합니다.

뷰를 만들려면 다음 안내를 따르세요.

Console

  1. 쿼리를 실행한 후 쿼리 결과 창 위에 있는 뷰 저장 버튼을 클릭하여 쿼리를 뷰로 저장합니다.

    뷰 저장

  2. 뷰 저장 대화상자에서 다음을 수행합니다.

    • 프로젝트 이름에서 뷰를 저장할 프로젝트를 선택합니다.
    • 데이터세트 이름에서 뷰가 포함될 데이터세트를 선택합니다. 뷰가 포함된 데이터세트와 뷰에서 참조되는 테이블이 포함된 데이터세트가 같은 위치에 있어야 합니다.
    • 테이블 이름에 뷰 이름을 입력합니다.
    • 저장을 클릭합니다.

기본 UI

  1. 쿼리를 실행한 후 쿼리 결과 창에 있는 뷰 저장 버튼을 클릭하여 쿼리를 뷰로 저장합니다.

    뷰 저장

  2. 뷰 저장 대화상자에서 다음을 수행합니다.

    • 프로젝트에서 뷰를 저장할 프로젝트를 선택합니다.
    • 데이터세트에서 뷰가 포함될 데이터세트를 선택합니다. 뷰가 포함된 데이터세트와 뷰에서 참조되는 테이블이 포함된 데이터세트가 같은 위치에 있어야 합니다.
    • 테이블 ID에 뷰 이름을 입력합니다.
    • 확인을 클릭합니다.

CLI

mk 명령어를 --view 플래그와 함께 사용합니다. 표준 SQL 쿼리의 경우 --use_legacy_sql 플래그를 추가하고 false로 설정합니다. 선택적 매개변수에는 --expiration, --description, --label이 있습니다.

쿼리에서 Google Cloud Storage 또는 로컬 파일에 저장된 외부 사용자 정의 함수 리소스를 참조하는 경우 --view_udf_resource 플래그를 사용하여 리소스를 지정합니다. 여기에서는 --view_udf_resource 플래그를 설명하지 않습니다. UDF 사용에 대한 자세한 내용은 표준 SQL 사용자 정의 함수를 참조하세요.

기본 프로젝트 이외의 프로젝트에 뷰를 만드는 경우 --project_id 플래그를 사용하여 프로젝트 ID를 지정합니다.

bq mk \
--use_legacy_sql=false \
--view_udf_resource=path_to_file \
--expiration integer \
--description "description" \
--label key:value, key:value \
--view 'query' \
--project_id project_id \
dataset.view

각 항목의 의미는 다음과 같습니다.

  • path_to_file은 뷰에 사용되는 사용자 정의 함수 리소스로써 바로 로드 및 평가될 코드 파일의 URI 또는 로컬 파일 시스템 경로입니다. 파일을 여러 개 지정하려면 플래그를 반복합니다.
  • integer는 뷰의 기본 수명(단위: 초)입니다. 최솟값은 3,600초(1시간)입니다. 만료 시간은 현재 시간과 정수 값을 더한 값으로 계산됩니다. 뷰 생성 시 만료 시간을 설정하면 데이터세트의 기본 테이블 만료 시간 설정이 무시됩니다.
  • description은 따옴표가 붙은 뷰에 대한 설명입니다.
  • key:value라벨을 나타내는 키:값 쌍입니다. 쉼표로 구분된 목록을 사용하여 라벨을 여러 개 입력할 수 있습니다.
  • query는 유효한 쿼리입니다. 표준 SQL 뷰의 경우 쿼리에는 테이블의 프로젝트 ID와 `[PROJECT_ID].[DATASET].[TABLE]` 형식의 뷰 참조가 있어야 합니다.
  • project_id는 프로젝트 ID입니다(기본 프로젝트를 구성하지 않은 경우).
  • dataset는 프로젝트의 데이터세트입니다.
  • view는 만들려는 뷰의 이름입니다.

예:

다음 명령어를 입력하여 기본 프로젝트의 mydatasetmyview라는 이름의 뷰를 만듭니다. 만료 시간은 3,600초(1시간), 설명은 This is my view, 라벨은 organization:development로 설정됩니다. 뷰를 만드는 데 사용되는 쿼리는 미국 이름 데이터 공개 데이터세트의 데이터를 쿼리합니다.

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

다음 명령어를 입력하여 myotherprojectmydatasetmyview라는 이름의 뷰를 만듭니다. 만료 시간은 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' \
--project_id myotherproject \
mydataset.myview

뷰를 만든 후 뷰의 만료 시간, 설명, 라벨을 업데이트할 수 있습니다. 자세한 내용은 뷰 업데이트를 참조하세요.

API

view 속성이 포함된 테이블 리소스tables.insert 메서드를 호출합니다.

Go

이 샘플을 시도하기 전에 BigQuery 빠른 시작: 클라이언트 라이브러리 사용의 Go 설정 안내를 따르세요. 자세한 내용은 BigQuery Go API 참조 문서를 확인하세요.

// To run this sample, you will need to create (or reuse) a context and
// an instance of the bigquery client.  For example:
// import "cloud.google.com/go/bigquery"
// ctx := context.Background()
// client, err := bigquery.NewClient(ctx, "your-project-id")
meta := &bigquery.TableMetadata{
	// This example shows how to create a view of the shakespeare sample dataset, which
	// provides word frequency information.  This view restricts the results to only contain
	// results for works that contain the "king" in the title, e.g. King Lear, King Henry V, etc.
	ViewQuery: "SELECT word, word_count, corpus, corpus_date FROM `bigquery-public-data.samples.shakespeare` WHERE corpus LIKE '%king%'",
}
if err := client.Dataset(datasetID).Table(tableID).Create(ctx, meta); err != nil {
	return err
}

Python

이 샘플을 시도하기 전에 BigQuery 빠른 시작: 클라이언트 라이브러리 사용의 Python 설정 안내를 따르세요. 자세한 내용은 BigQuery Python API 참조 문서를 확인하세요.

# from google.cloud import bigquery
# client = bigquery.Client()
# project = 'my-project'
# source_dataset_id = 'my_source_dataset'
# source_table_id = 'us_states'
# shared_dataset_ref = client.dataset('my_shared_dataset')

# This example shows how to create a shared view of a source table of
# US States. The source table contains all 50 states, while the view will
# contain only states with names starting with 'W'.
view_ref = shared_dataset_ref.table("my_shared_view")
view = bigquery.Table(view_ref)
sql_template = 'SELECT name, post_abbr FROM `{}.{}.{}` WHERE name LIKE "W%"'
view.view_query = sql_template.format(project, source_dataset_id, source_table_id)
view = client.create_table(view)  # API request

print("Successfully created view at {}".format(view.full_table_id))

뷰를 만든 후 테이블을 쿼리할 때처럼 뷰를 쿼리합니다.

다음 단계

  • 승인된 뷰 만들기에 대한 자세한 내용은 승인된 뷰 만들기를 참조하세요.
  • 뷰 나열에 대한 자세한 내용은 뷰 나열을 참조하세요.
  • 뷰 메타데이터 가져오기에 대한 자세한 내용은 뷰 정보 가져오기를 참조하세요.
  • 뷰 업데이트에 대한 자세한 내용은 뷰 업데이트를 참조하세요.
  • 뷰 관리에 대한 자세한 내용은 뷰 관리를 참조하세요.
이 페이지가 도움이 되었나요? 평가를 부탁드립니다.

다음에 대한 의견 보내기...

도움이 필요하시나요? 지원 페이지를 방문하세요.