뷰 속성 업데이트

이 문서는 BigQuery의 뷰 속성을 업데이트하는 방법을 설명합니다. 뷰를 만든 후에 다음과 같은 뷰 속성을 업데이트할 수 있습니다.

필수 권한

뷰 업데이트에는 테이블 업데이트와 동일한 권한이 필요합니다. 즉, 데이터세트 수준의 WRITER 액세스 권한을 가지고 있거나 필요한 bigquery.tables.update 권한이 포함된 프로젝트 수준 IAM 역할을 할당받아야 합니다. 다음과 같은 사전 정의된 프로젝트 수준 IAM 역할에는 bigquery.tables.update 권한이 포함되어 있습니다.

또한 bigquery.user 역할에 bigquery.datasets.create 권한이 포함되므로 bigquery.user 역할에 할당된 사용자는 사용자가 데이터세트에 만드는 모든 뷰를 업데이트할 수 있습니다. bigquery.user 역할에 할당된 사용자가 데이터세트를 만들면 이 사용자에게 데이터세트 OWNER 액세스 권한이 부여됩니다. 데이터세트에 대한 OWNER 액세스 권한이 있으면 사용자는 해당 데이터세트와 데이터세트에 포함된 모든 테이블 및 뷰를 완전히 제어할 수 있습니다.

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

뷰의 SQL 쿼리 업데이트

뷰를 정의하는 데 사용되는 SQL 쿼리를 다음과 같은 방법으로 업데이트할 수 있습니다.

  • GCP Console 또는 기본 BigQuery 웹 UI 사용
  • 명령줄 도구의 bq update 명령어 사용
  • tables.patch API 메소드 호출

CLI 또는 API에서 SQL 언어를 레거시 SQL에서 표준 SQL로 변경할 수 있습니다. GCP Console 또는 기존 BigQuery 웹 UI에서는 레거시 SQL 뷰를 표준 SQL로 업데이트할 수 없습니다.

뷰의 SQL 쿼리를 업데이트하려면 다음 안내를 따르세요.

Console

  1. 리소스 패널에서 뷰를 선택합니다.

  2. 세부정보 탭을 클릭합니다.

    뷰 세부정보

  3. 쿼리 상자 위에 있는 쿼리 수정 버튼을 클릭합니다. 나타나는 대화상자에서 열기를 클릭합니다.

    쿼리 수정

  4. 쿼리 편집기 상자에서 SQL 쿼리를 수정한 후 뷰 저장을 클릭합니다.

    뷰 저장

  5. 뷰 저장 대화상자에서 모든 필드가 올바른지 확인한 후 저장을 클릭합니다.

기본 UI

  1. 뷰를 선택합니다.

  2. 뷰 세부정보 창에서 세부정보를 클릭합니다.

  3. 쿼리 상자 아래에서 쿼리 편집으로 클릭합니다.

  4. 쿼리 상자에서 SQL 쿼리를 편집한 다음 뷰 저장을 클릭합니다.

    뷰 업데이트

명령줄

bq update 명령어를 --view 플래그와 함께 실행합니다. 표준 SQL을 사용하거나 이전 SQL의 쿼리 언어를 표준 SQL로 업데이트하려면 --use_legacy_sql 플래그를 포함하고 이 플래그를 false로 설정합니다.

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

기본 프로젝트가 아닌 다른 프로젝트에서 뷰를 업데이트하는 경우 데이터세트 이름에 프로젝트 ID를 추가합니다(형식: [PROJECT_ID]:[DATASET]).

bq update --use_legacy_sql=false --view_udf_resource=[PATH_TO_FILE] --view='[QUERY]' [PROJECT_ID]:[DATASET].[VIEW]

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

  • [PATH_TO_FILE]은 뷰에 사용되는 사용자 정의 함수 리소스이며, 바로 로드 및 평가될 코드 파일의 URI 또는 로컬 파일 시스템 경로입니다. 여러 파일을 지정하려면 플래그를 반복합니다.
  • [QUERY]는 유효한 표준 SQL 쿼리입니다.
  • [PROJECT_ID]는 프로젝트 ID입니다.
  • [DATASET]는 뷰가 포함된 데이터세트입니다.
  • [VIEW]는 업데이트하려는 뷰의 이름입니다.

예:

mydataset에 있는 myview 뷰의 SQL 쿼리를 업데이트하려면 다음 명령어를 입력합니다. mydataset는 기본 프로젝트에 있습니다. 뷰를 업데이트하는 데 사용되는 쿼리 예는 미국 이름 데이터 공개 데이터세트의 데이터를 쿼리합니다.

bq update --use_legacy_sql=false --view 'SELECT name,number FROM `bigquery-public-data.usa_names.usa_1910_current` WHERE gender = "M" ORDER BY number DESC' mydataset.myview

mydataset에 있는 myview 뷰의 SQL 쿼리를 업데이트하려면 다음 명령어를 입력합니다. mydataset는 기본 프로젝트가 아닌 myotherproject에 있습니다. 뷰를 업데이트하는 데 사용되는 쿼리 예는 미국 이름 데이터 공개 데이터세트의 데이터를 쿼리합니다.

bq update --use_legacy_sql=false --view 'SELECT name,number FROM `bigquery-public-data.usa_names.usa_1910_current` WHERE gender = "M" ORDER BY number DESC' myotherproject:mydataset.myview

API

업데이트된 tables.patch 속성이 포함된 테이블 리소스view 메소드를 호출하여 뷰를 업데이트할 수 있습니다. tables.update 메소드는 전체 테이블 리소스를 대체하므로 tables.patch 메소드를 사용하는 것이 좋습니다.

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")
view := client.Dataset(datasetID).Table(viewID)
meta, err := view.Metadata(ctx)
if err != nil {
	return err
}

newMeta := bigquery.TableMetadataToUpdate{
	// This example updates a view into the shakespeare dataset to exclude works named after kings.
	ViewQuery: "SELECT word, word_count, corpus, corpus_date FROM `bigquery-public-data.samples.shakespeare` WHERE corpus NOT LIKE '%king%'",
}

if _, err := view.Update(ctx, newMeta, meta.ETag); 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 update a shared view of a source table of
# US States. The view's query will be updated to contain only states with
# names starting with 'M'.
view_ref = shared_dataset_ref.table("my_shared_view")
view = bigquery.Table(view_ref)
sql_template = 'SELECT name, post_abbr FROM `{}.{}.{}` WHERE name LIKE "M%"'
view.view_query = sql_template.format(project, source_dataset_id, source_table_id)
view = client.update_table(view, ["view_query"])  # API request

뷰의 만료 시간 업데이트

데이터세트 수준에서 기본 테이블 만료 시간을 설정하거나(테이블과 뷰에 모두 영향을 미침) 뷰를 만들 때 뷰의 만료 시간을 설정할 수 있습니다. 뷰를 만들 때 만료 시간을 설정하면 데이터세트의 기본 테이블 만료 시간은 무시됩니다. 데이터세트 수준에서 기본 테이블 만료 시간을 설정하지 않고 뷰를 만들 때 만료 시간을 설정하지 않으면 뷰가 만료되지 않으며 수동으로 삭제해야 합니다.

뷰가 생성된 후 언제든지 다음과 같은 방법으로 뷰의 만료 시간을 업데이트할 수 있습니다.

  • 기본 BigQuery 웹 UI 사용
    • 뷰 만료 시간 수정은 현재 GCP Console에서 지원되지 않음
  • CLI의 bq update 명령어 사용
  • tables.patch API 메소드 호출

뷰의 만료 시간을 업데이트할 때는 뷰 생성 시간을 기준으로 만료 시간을 계산해야 합니다. 예를 들어 뷰가 2018년 1월 3일에 만들어졌고 오늘이 1월 5일인 경우 BigQuery 웹 UI를 사용하여 만료 시간을 1일로 설정하면 만료 시간은 '과거'로 간주되고 뷰는 즉시 삭제됩니다.

뷰의 만료 시간을 업데이트하려면 다음 안내를 따르세요.

Console

콘솔 웹 UI를 사용할 때는 뷰의 만료 시간을 추가하거나 업데이트할 수 없습니다.

기본 UI

옵션 1: 만료 시간을 수동으로 수정

  1. 탐색창에서 뷰를 선택합니다.

  2. 뷰 세부정보 페이지에서 세부정보를 클릭합니다.

  3. 만료 시간에서 편집을 클릭합니다.

  4. 만료 업데이트 대화상자에서 남은 시간을 클릭하고 만료 시간을 일 단위로 입력합니다.

  5. 확인을 클릭합니다. 업데이트된 만료 시간이 세부정보 페이지에 나타납니다.

    뷰 만료 시간

옵션 2: DDL 문 사용

데이터 정의 언어(DDL) 문을 사용하면 표준 SQL 쿼리 구문으로 테이블과 뷰를 만들고 수정할 수 있습니다.

자세한 내용은 데이터 정의 언어 문 사용을 참조하세요.

  1. 쿼리 작성을 클릭합니다.

  2. 새 쿼리 텍스트 영역에 DDL 문을 입력합니다.

     #standardSQL
     ALTER VIEW mydataset.myview
     SET OPTIONS (
       -- Sets view expiration to timestamp 2025-02-03 12:34:56
       expiration_timestamp=TIMESTAMP "2025-02-03 12:34:56"
     );
     

명령줄

bq update 명령어를 --expiration 플래그와 함께 실행합니다. 기본 프로젝트가 아닌 다른 프로젝트에서 뷰를 업데이트하는 경우 데이터세트 이름에 프로젝트 ID를 추가합니다(형식: [PROJECT_ID]:[DATASET]).

bq update --expiration [INTEGER] [PROJECT_ID]:[DATASET].[VIEW]

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

  • [INTEGER]는 테이블의 기본 수명(단위: 초)입니다. 최솟값은 3,600초(1시간)입니다. 만료 시간은 현재 시간과 정수 값을 더한 값으로 계산됩니다.
  • [PROJECT_ID]는 프로젝트 ID입니다.
  • [DATASET]는 업데이트할 뷰가 포함된 데이터세트의 이름입니다.
  • [VIEW]는 업데이트할 뷰의 이름입니다.

예:

다음 명령어를 입력하여 mydataset에 있는 myview의 만료 시간을 5일(43200초)로 업데이트합니다 mydataset는 기본 프로젝트에 있습니다.

bq update --expiration 432000 mydataset.myview

다음 명령어를 입력하여 mydataset에 있는 myview의 만료 시간을 5일(43200초)로 업데이트합니다. mydataset는 기본 프로젝트가 아닌 myotherproject에 있습니다.

bq update --expiration 432000 myotherproject:mydataset.myview

API

tables.patch 메소드를 호출하고 expirationTime 속성을 사용하여 뷰의 만료 시간을 업데이트합니다(밀리초 단위). tables.update 메소드는 전체 테이블 리소스를 대체하므로 tables.patch 메소드를 사용하는 것이 좋습니다.

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")
tableRef := client.Dataset(datasetID).Table(tableID)
meta, err := tableRef.Metadata(ctx)
if err != nil {
	return err
}
update := bigquery.TableMetadataToUpdate{
	ExpirationTime: time.Now().Add(time.Duration(5*24) * time.Hour), // table expiration in 5 days.
}
if _, err = tableRef.Update(ctx, update, meta.ETag); err != nil {
	return err
}

Python

뷰의 만료 시간을 업데이트하려면 테이블의 만료 시간을 업데이트하는 것과 동일한 프로세스를 사용하면 됩니다.

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

import datetime
import pytz

# from google.cloud import bigquery
# client = bigquery.Client()
# table_ref = client.dataset('my_dataset').table('my_table')
# table = client.get_table(table_ref)  # API request

assert table.expires is None

# set table to expire 5 days from now
expiration = datetime.datetime.now(pytz.utc) + datetime.timedelta(days=5)
table.expires = expiration
table = client.update_table(table, ["expires"])  # API request

# expiration is stored in milliseconds
margin = datetime.timedelta(microseconds=1000)
assert expiration - margin <= table.expires <= expiration + margin

뷰의 설명 업데이트

다음과 같은 방법으로 뷰의 설명을 업데이트할 수 있습니다.

  • GCP Console 또는 기본 BigQuery 웹 UI 사용
  • bq update CLI 명령어 사용
  • tables.patch API 메소드 호출

뷰 설명을 업데이트하려면 다음 안내를 따르세요.

Console

BigQuery 웹 UI를 사용하여 뷰를 만들 때는 설명을 추가할 수 없습니다. 뷰가 생성된 후 세부정보 페이지에 설명을 추가할 수 있습니다.

  1. 리소스 목록에서 뷰를 선택합니다.

  2. 세부정보 탭을 클릭합니다.

뷰 세부정보

  1. 설명 옆에 있는 연필 아이콘을 클릭합니다.

뷰 설명 수정

  1. 대화상자에 설명을 입력합니다. 업데이트를 클릭하여 새 설명을 저장합니다.

기본 UI

옵션 1: 설명을 수동으로 변경

  1. 탐색창에서 뷰를 선택합니다.

  2. 뷰 세부정보 페이지에서 세부정보를 클릭합니다.

  3. 설명 섹션에서 이 뷰 설명하기를 클릭하여 설명 상자를 엽니다.

  4. 상자에 설명을 입력합니다. 상자 바깥을 클릭하면 텍스트가 저장됩니다.

    테이블 설명

옵션 2: DDL 문 사용

데이터 정의 언어(DDL) 문을 사용하면 표준 SQL 쿼리 구문으로 테이블과 뷰를 만들고 수정할 수 있습니다.

자세한 내용은 데이터 정의 언어 문 사용을 참조하세요.

  1. 쿼리 작성을 클릭합니다.

  2. 새 쿼리 텍스트 영역에 DDL 문을 입력합니다.

     #standardSQL
     ALTER VIEW mydataset.myview
     SET OPTIONS (
       description="Description of myview"
     );
     

명령줄

bq update 명령어를 --description 플래그와 함께 실행합니다. 기본 프로젝트가 아닌 다른 프로젝트에서 뷰를 업데이트하는 경우 데이터세트 이름에 프로젝트 ID를 추가합니다(형식: [PROJECT_ID]:[DATASET]).

bq update --description "[DESCRIPTION]" [PROJECT_ID]:[DATASET].[VIEW]

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

  • [DESCRIPTION]은 따옴표 안의 뷰를 설명하는 텍스트입니다.
  • [PROJECT_ID]는 프로젝트 ID입니다.
  • [DATASET]는 업데이트할 뷰가 포함된 데이터세트의 이름입니다.
  • [VIEW]는 업데이트할 뷰의 이름입니다.

예:

다음 명령어를 입력하여 mydataset에 있는 myview의 설명을 'Description of myview'로 변경합니다. mydataset는 기본 프로젝트에 있습니다.

bq update --description "Description of myview" mydataset.myview

다음 명령어를 입력하여 mydataset에 있는 myview의 설명을 'Description of myview'로 변경합니다. mydataset는 기본 프로젝트가 아닌 myotherproject에 있습니다.

bq update --description "Description of myview" myotherproject:mydataset.myview

API

tables.patch 메소드를 호출하고 description 속성을 사용하여 테이블 리소스의 뷰 설명을 업데이트합니다. tables.update 메소드는 전체 테이블 리소스를 대체하므로 tables.patch 메소드를 사용하는 것이 좋습니다.

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")
tableRef := client.Dataset(datasetID).Table(tableID)
meta, err := tableRef.Metadata(ctx)
if err != nil {
	return err
}
update := bigquery.TableMetadataToUpdate{
	Description: "Updated description.",
}
if _, err = tableRef.Update(ctx, update, meta.ETag); err != nil {
	return err
}

자바

뷰의 설명을 업데이트하려면 테이블의 설명을 업데이트하는 것과 동일한 프로세스를 사용하면 됩니다.

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

// String datasetName = "my_dataset_name";
// String tableName = "my_table_name";
// String newDescription = "new_description";

Table beforeTable = bigquery.getTable(datasetName, tableName);
TableInfo tableInfo = beforeTable.toBuilder()
    .setDescription(newDescription)
    .build();
Table afterTable = bigquery.update(tableInfo);

Python

뷰의 설명을 업데이트하려면 테이블의 설명을 업데이트하는 것과 동일한 프로세스를 사용하면 됩니다.

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

# from google.cloud import bigquery
# client = bigquery.Client()
# table_ref = client.dataset('my_dataset').table('my_table')
# table = client.get_table(table_ref)  # API request

assert table.description == "Original description."
table.description = "Updated description."

table = client.update_table(table, ["description"])  # API request

assert table.description == "Updated description."

다음 단계

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

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

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