뷰 관리

이 문서에서는 BigQuery에서 뷰를 관리하는 방법을 설명합니다. 다음과 같은 방법으로 BigQuery 뷰를 관리할 수 있습니다.

시작하기 전에

사용자에게 이 문서의 각 태스크를 수행하는 데 필요한 권한을 부여하는 Identity and Access Management(IAM) 역할을 부여합니다. 태스크를 수행하는 데 필요한 권한(있는 경우)이 태스크의 '필요한 권한' 섹션에 나열됩니다.

뷰 업데이트

뷰를 만든 후에 다음과 같은 뷰 속성을 업데이트할 수 있습니다.

필수 권한

뷰를 업데이트하려면 다음 IAM 권한이 필요합니다.

  • bigquery.tables.update
  • bigquery.tables.get

다음과 같은 사전 정의된 각 IAM 역할에는 뷰를 업데이트하는 데 필요한 권한이 포함되어 있습니다.

  • roles/bigquery.dataEditor
  • roles/bigquery.dataOwner
  • roles/bigquery.admin

또한 bigquery.datasets.create 권한이 있으면 자신이 만든 데이터 세트의 테이블과 뷰를 업데이트할 수 있습니다.

뷰의 SQL 쿼리를 업데이트하는 경우 뷰의 SQL 쿼리에서 참조하는 모든 테이블을 쿼리할 권한도 필요합니다.

BigQuery의 IAM 역할과 권한에 대한 자세한 내용은 사전 정의된 역할 및 권한을 참조하세요.

뷰의 SQL 쿼리 업데이트

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

  • Google Cloud 콘솔 사용
  • bq 명령줄 도구의 bq update 명령어 사용
  • tables.patch API 메서드 호출
  • 클라이언트 라이브러리 사용

API 또는 bq 명령줄 도구에서 SQL 언어를 legacy SQL에서 GoogleSQL로 변경할 수 있습니다. Google Cloud 콘솔에서는 legacy SQL 뷰를 GoogleSQL로 업데이트할 수 없습니다.

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

콘솔

  1. 탐색기 패널에서 프로젝트와 데이터 세트를 펼친 후 뷰를 선택합니다.

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

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

    쿼리 수정

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

    뷰 저장

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

bq

bq update 명령어를 --view 플래그와 함께 실행합니다. GoogleSQL을 사용하거나 쿼리 언어를 legacy SQL에서 GoogleSQL로 업데이트하려면 --use_legacy_sql 플래그를 포함하여 false로 설정하세요.

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

기본 프로젝트가 아닌 다른 프로젝트의 뷰를 업데이트하려면 해당 프로젝트 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: 유효한 GoogleSQL 쿼리
  • 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

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

Go

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

BigQuery에 인증하려면 애플리케이션 기본 사용자 인증 정보를 설정합니다. 자세한 내용은 로컬 개발 환경의 인증 설정을 참조하세요.

import (
	"context"
	"fmt"

	"cloud.google.com/go/bigquery"
)

// updateView demonstrates updating the query metadata that defines a logical view.
func updateView(projectID, datasetID, viewID string) error {
	// projectID := "my-project-id"
	// datasetID := "mydataset"
	// viewID := "myview"
	ctx := context.Background()
	client, err := bigquery.NewClient(ctx, projectID)
	if err != nil {
		return fmt.Errorf("bigquery.NewClient: %v", err)
	}
	defer client.Close()

	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
	}
	return nil
}

Java

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

BigQuery에 인증하려면 애플리케이션 기본 사용자 인증 정보를 설정합니다. 자세한 내용은 로컬 개발 환경의 인증 설정을 참조하세요.

import com.google.cloud.bigquery.BigQuery;
import com.google.cloud.bigquery.BigQueryException;
import com.google.cloud.bigquery.BigQueryOptions;
import com.google.cloud.bigquery.TableId;
import com.google.cloud.bigquery.TableInfo;
import com.google.cloud.bigquery.ViewDefinition;

// Sample to update query on a view
public class UpdateViewQuery {

  public static void runUpdateViewQuery() {
    // TODO(developer): Replace these variables before running the sample.
    String datasetName = "MY_DATASET_NAME";
    String tableName = "MY_TABLE_NAME";
    String viewName = "MY_VIEW_NAME";
    String updateQuery =
        String.format("SELECT TimestampField, StringField FROM %s.%s", datasetName, tableName);
    updateViewQuery(datasetName, viewName, updateQuery);
  }

  public static void updateViewQuery(String datasetName, String viewName, String query) {
    try {
      // Initialize client that will be used to send requests. This client only needs to be created
      // once, and can be reused for multiple requests.
      BigQuery bigquery = BigQueryOptions.getDefaultInstance().getService();

      // Retrieve existing view metadata
      TableInfo viewMetadata = bigquery.getTable(TableId.of(datasetName, viewName));

      // Update view query
      ViewDefinition viewDefinition = viewMetadata.getDefinition();
      viewDefinition.toBuilder().setQuery(query).build();

      // Set metadata
      bigquery.update(viewMetadata.toBuilder().setDefinition(viewDefinition).build());

      System.out.println("View query updated successfully");
    } catch (BigQueryException e) {
      System.out.println("View query was not updated. \n" + e.toString());
    }
  }
}

Node.js

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

BigQuery에 인증하려면 애플리케이션 기본 사용자 인증 정보를 설정합니다. 자세한 내용은 로컬 개발 환경의 인증 설정을 참조하세요.

// Import the Google Cloud client library and create a client
const {BigQuery} = require('@google-cloud/bigquery');
const bigquery = new BigQuery();

async function updateViewQuery() {
  // Updates a view named "my_existing_view" in "my_dataset".

  /**
   * TODO(developer): Uncomment the following lines before running the sample.
   */
  // const datasetId = "my_existing_dataset"
  // const tableId = "my_existing_table"
  const dataset = await bigquery.dataset(datasetId);

  // This example updates a view into the USA names dataset to include state.
  const newViewQuery = `SELECT name, state
  FROM \`bigquery-public-data.usa_names.usa_1910_current\`
  LIMIT 10`;

  // Retrieve existing view
  const [view] = await dataset.table(tableId).get();

  // Retrieve existing view metadata
  const [metadata] = await view.getMetadata();

  // Update view query
  metadata.view = newViewQuery;

  // Set metadata
  await view.setMetadata(metadata);

  console.log(`View ${tableId} updated.`);
}

Python

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

BigQuery에 인증하려면 애플리케이션 기본 사용자 인증 정보를 설정합니다. 자세한 내용은 로컬 개발 환경의 인증 설정을 참조하세요.

from google.cloud import bigquery

client = bigquery.Client()

view_id = "my-project.my_dataset.my_view"
source_id = "my-project.my_dataset.my_table"
view = bigquery.Table(view_id)

# The source table in this example is created from a CSV file in Google
# Cloud Storage located at
# `gs://cloud-samples-data/bigquery/us-states/us-states.csv`. It contains
# 50 US states, while the view returns only those states with names
# starting with the letter 'M'.
view.view_query = f"SELECT name, post_abbr FROM `{source_id}` WHERE name LIKE 'M%'"

# Make an API request to update the query property of the view.
view = client.update_table(view, ["view_query"])
print(f"Updated {view.table_type}: {str(view.reference)}")

뷰의 만료 시간 업데이트

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

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

  • Google Cloud 콘솔 사용
  • GoogleSQL 구문으로 작성된 데이터 정의 언어(DDL) 문 사용
  • bq 명령줄 도구의 bq update 명령어 사용
  • tables.patch API 메서드 호출
  • 클라이언트 라이브러리 사용

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

콘솔

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

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

  3. 뷰 정보 오른쪽의 수정 아이콘(연필)을 클릭합니다.

  4. 뷰 정보 대화상자의 뷰 만료에서 날짜 지정을 클릭합니다.

  5. 날짜 선택도구에서 만료 날짜 및 시간을 입력한 다음 확인을 클릭합니다.

  6. 업데이트를 클릭합니다. 업데이트된 만료 시간이 뷰 정보 섹션에 나타납니다.

SQL

ALTER VIEW SET OPTIONS DDL 문을 사용합니다.

  1. Google Cloud 콘솔에서 BigQuery 페이지로 이동합니다.

    BigQuery로 이동

  2. 쿼리 편집기에서 다음 문을 입력합니다.

     ALTER VIEW DATASET_ID.MY_VIEW
     SET OPTIONS (
      expiration_timestamp = TIMESTAMP('NEW_TIMESTAMP'));
    

    다음을 바꿉니다.

    • DATASET_ID: 뷰가 포함된 데이터 세트의 ID입니다.
    • MY_VIEW: 업데이트할 뷰의 이름입니다.
    • NEW_TIMESTAMP: TIMESTAMP 값입니다.

  3. 실행을 클릭합니다.

쿼리를 실행하는 방법에 대한 자세한 내용은 대화형 쿼리 실행을 참조하세요.

bq

bq update 명령어를 --expiration 플래그와 함께 실행합니다. 기본 프로젝트가 아닌 다른 프로젝트의 뷰를 업데이트하려면 해당 프로젝트 ID를 project_id:dataset 형식으로 데이터세트 이름에 추가합니다.

bq update \
    --expiration integer \
    project_id:dataset.view

다음을 바꿉니다.

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

예시

mydatasetmyview 만료 시간을 5일(432,000초)로 업데이트하려면 다음 명령어를 입력합니다. 여기서 mydataset는 기본 프로젝트에 있습니다.

bq update \
    --expiration 432000 \
    mydataset.myview

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

bq update \
    --expiration 432000 \
    myotherproject:mydataset.myview

API

tables.patch 메서드를 호출하고 테이블 리소스에서 expirationTime 속성을 사용합니다. tables.update 메서드는 전체 테이블 리소스를 대체하므로 tables.patch 메서드를 사용하는 것이 좋습니다. REST API를 사용하는 경우 뷰의 만료 시간이 밀리초 단위로 표시됩니다.

Go

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

BigQuery에 인증하려면 애플리케이션 기본 사용자 인증 정보를 설정합니다. 자세한 내용은 로컬 개발 환경의 인증 설정을 참조하세요.

import (
	"context"
	"fmt"
	"time"

	"cloud.google.com/go/bigquery"
)

// updateTableExpiration demonstrates setting the table expiration of a table to a specific point in time
// in the future, at which time it will be deleted.
func updateTableExpiration(projectID, datasetID, tableID string) error {
	// projectID := "my-project-id"
	// datasetID := "mydataset"
	// tableID := "mytable"
	ctx := context.Background()
	client, err := bigquery.NewClient(ctx, projectID)
	if err != nil {
		return fmt.Errorf("bigquery.NewClient: %v", err)
	}
	defer client.Close()

	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
	}
	return nil
}

Java

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

BigQuery에 인증하려면 애플리케이션 기본 사용자 인증 정보를 설정합니다. 자세한 내용은 로컬 개발 환경의 인증 설정을 참조하세요.

Table beforeTable = bigquery.getTable(datasetName, tableName);

// Set table to expire 5 days from now.
long expirationMillis = DateTime.now().plusDays(5).getMillis();
TableInfo tableInfo = beforeTable.toBuilder()
        .setExpirationTime(expirationMillis)
        .build();
Table afterTable = bigquery.update(tableInfo);

Node.js

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

BigQuery에 인증하려면 애플리케이션 기본 사용자 인증 정보를 설정합니다. 자세한 내용은 로컬 개발 환경의 인증 설정을 참조하세요.

// Import the Google Cloud client library
const {BigQuery} = require('@google-cloud/bigquery');
const bigquery = new BigQuery();

async function updateTableExpiration() {
  // Updates a table's expiration.

  /**
   * TODO(developer): Uncomment the following lines before running the sample.
   */
  // const datasetId = 'my_dataset', // Existing dataset
  // const tableId = 'my_table', // Existing table
  // const expirationTime = Date.now() + 1000 * 60 * 60 * 24 * 5 // 5 days from current time in ms

  // Retreive current table metadata
  const table = bigquery.dataset(datasetId).table(tableId);
  const [metadata] = await table.getMetadata();

  // Set new table expiration to 5 days from current time
  metadata.expirationTime = expirationTime.toString();
  const [apiResponse] = await table.setMetadata(metadata);

  const newExpirationTime = apiResponse.expirationTime;
  console.log(`${tableId} expiration: ${newExpirationTime}`);
}

Python

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

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

BigQuery에 인증하려면 애플리케이션 기본 사용자 인증 정보를 설정합니다. 자세한 내용은 로컬 개발 환경의 인증 설정을 참조하세요.

from google.cloud import bigquery

client = bigquery.Client()

# TODO(dev): Change table_id to the full name of the table you want to update.
table_id = "your-project.your_dataset.your_table_name"

# TODO(dev): Set table to expire for desired days days from now.
expiration = datetime.datetime.now(datetime.timezone.utc) + datetime.timedelta(
    days=5
)
table = client.get_table(table_id)  # Make an API request.
table.expires = expiration
table = client.update_table(table, ["expires"])  # API request

print(f"Updated {table_id}, expires {table.expires}.")

뷰의 설명 업데이트

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

  • Google Cloud 콘솔 사용
  • GoogleSQL 구문으로 작성된 데이터 정의 언어(DDL) 문 사용
  • bq 명령줄 도구의 bq update 명령어 사용
  • tables.patch API 메서드 호출
  • 클라이언트 라이브러리 사용

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

콘솔

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

  1. 탐색기 패널에서 프로젝트와 데이터 세트를 펼친 후 뷰를 선택합니다.

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

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

    뷰 설명 수정

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

SQL

ALTER VIEW SET OPTIONS DDL 문을 사용합니다.

  1. Google Cloud 콘솔에서 BigQuery 페이지로 이동합니다.

    BigQuery로 이동

  2. 쿼리 편집기에서 다음 문을 입력합니다.

     ALTER VIEW DATASET_ID.MY_VIEW
     SET OPTIONS (
      description = 'NEW_DESCRIPTION');
    

    다음을 바꿉니다.

    • DATASET_ID: 뷰가 포함된 데이터 세트의 ID입니다.
    • MY_VIEW: 업데이트할 뷰의 이름입니다.
    • NEW_DESCRIPTION: 새 뷰 설명입니다.

  3. 실행을 클릭합니다.

쿼리를 실행하는 방법에 대한 자세한 내용은 대화형 쿼리 실행을 참조하세요.

bq

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

bq update \
    --description "description" \
    project_id:dataset.view

다음을 바꿉니다.

  • description: 따옴표 안의 뷰를 설명하는 텍스트
  • project_id: 프로젝트 ID
  • dataset: 업데이트할 뷰가 포함된 데이터 세트의 이름
  • view: 업데이트할 뷰의 이름

예시

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

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

mydatasetmyview 설명을 '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 참조 문서를 확인하세요.

BigQuery에 인증하려면 애플리케이션 기본 사용자 인증 정보를 설정합니다. 자세한 내용은 로컬 개발 환경의 인증 설정을 참조하세요.

import (
	"context"
	"fmt"

	"cloud.google.com/go/bigquery"
)

// updateTableDescription demonstrates how to fetch a table's metadata and updates the Description metadata.
func updateTableDescription(projectID, datasetID, tableID string) error {
	// projectID := "my-project-id"
	// datasetID := "mydataset"
	// tableID := "mytable"
	ctx := context.Background()
	client, err := bigquery.NewClient(ctx, projectID)
	if err != nil {
		return fmt.Errorf("bigquery.NewClient: %v", err)
	}
	defer client.Close()

	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
	}
	return nil
}

Java

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

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

BigQuery에 인증하려면 애플리케이션 기본 사용자 인증 정보를 설정합니다. 자세한 내용은 로컬 개발 환경의 인증 설정을 참조하세요.

// 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);

Node.js

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

BigQuery에 인증하려면 애플리케이션 기본 사용자 인증 정보를 설정합니다. 자세한 내용은 로컬 개발 환경의 인증 설정을 참조하세요.

// Import the Google Cloud client library
const {BigQuery} = require('@google-cloud/bigquery');
const bigquery = new BigQuery();

async function updateTableDescription() {
  // Updates a table's description.

  // Retreive current table metadata
  const table = bigquery.dataset(datasetId).table(tableId);
  const [metadata] = await table.getMetadata();

  // Set new table description
  const description = 'New table description.';
  metadata.description = description;
  const [apiResponse] = await table.setMetadata(metadata);
  const newDescription = apiResponse.description;

  console.log(`${tableId} description: ${newDescription}`);
}

Python

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

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

BigQuery에 인증하려면 애플리케이션 기본 사용자 인증 정보를 설정합니다. 자세한 내용은 로컬 개발 환경의 인증 설정을 참조하세요.

# from google.cloud import bigquery
# client = bigquery.Client()
# project = client.project
# dataset_ref = bigquery.DatasetReference(project, dataset_id)
# table_ref = dataset_ref.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."

뷰 복사

현재는 Google Cloud 콘솔을 사용해서만 뷰를 복사할 수 있습니다.

bq 명령줄 도구, REST API 또는 클라이언트 라이브러리를 사용하여 뷰를 복사할 수 없습니다. 대신 대상 데이터 세트에서 뷰를 다시 만들어야 합니다. 뷰 다시 만들기를 지원하도록 bq 명령줄 도구를 사용하여 뷰의 SQL 쿼리를 복사할 수 있습니다.

필수 권한

Google Cloud 콘솔에서 뷰를 복사하려면 소스 및 대상 데이터 세트에 대한 IAM 권한이 필요합니다.

  • 소스 데이터 세트에는 다음이 필요합니다.

    • bigquery.tables.get
    • bigquery.tables.getData(뷰의 SQL 쿼리에서 참조되는 테이블에 액세스하는 데 필요)
  • 대상 데이터 세트에는 다음이 필요합니다.

    • bigquery.tables.create(대상 데이터 세트에 뷰 복사본을 만들 수 있음)

다음과 같은 사전 정의된 각 IAM 역할에는 뷰를 복사하는 데 필요한 권한이 포함되어 있습니다.

  • roles/bigquery.dataEditor
  • roles/bigquery.dataOwner
  • roles/bigquery.admin

또한 bigquery.datasets.create 권한이 있으면 사용자가 만든 데이터 세트에 뷰를 복사할 수 있습니다. 대상 데이터 세트를 만들지 않았다면 대상 데이터 세트에 대한 액세스 권한도 필요합니다.

BigQuery의 IAM 역할과 권한에 대한 자세한 내용은 사전 정의된 역할 및 권한을 참조하세요.

뷰 복사

뷰를 복사하려면 다음 안내를 따르세요.

콘솔

  1. 탐색기 패널에서 프로젝트와 데이터 세트를 펼친 후 뷰를 선택합니다.

  2. 세부정보 패널에서 뷰 복사를 클릭합니다.

  3. 뷰 복사 대화상자에서 다음을 수행합니다.

    • 소스 섹션에서 프로젝트 이름, 데이터 세트 이름, 테이블 이름이 올바른지 확인합니다.
    • 대상 섹션에서 다음을 수행합니다.

      • 프로젝트 이름에서 뷰를 복사하려는 프로젝트를 선택합니다.
      • 데이터세트 이름에서 복사된 뷰를 포함할 데이터 세트를 선택합니다.
      • 테이블 이름에 뷰 이름을 입력합니다. 상자에 새 뷰 이름을 입력하여 뷰 이름을 바꿀 수 있습니다. 새 이름을 입력할 때는 뷰 이름 지정 규칙을 따라야 합니다.

      뷰 복사 대화상자

    • 복사를 클릭합니다.

bq

bq 명령줄 도구는 뷰 복사를 지원하지 않습니다. 대신 대상 데이터 세트에서 뷰를 다시 만들어야 합니다. 뷰를 다시 만들기 위해 뷰 정의에 사용되는 SQL 쿼리를 복사할 수 있습니다.

뷰를 정의하는 SQL 쿼리를 복사하려면 bq show 명령어를 실행하세요. --format 플래그를 사용하면 출력을 제어할 수 있습니다. 기본 프로젝트가 아닌 다른 프로젝트의 뷰 정보를 가져오려면 프로젝트 ID를 project_id:dataset 형식으로 데이터 세트에 추가합니다. 파일에 뷰 속성을 쓰려면 명령어에 > path_to_file을 추가합니다.

bq show \
--format=prettyjson \
project_id:dataset.view > path_to_file

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

  • project_id는 프로젝트 ID입니다.
  • dataset는 데이터 세트 이름입니다.
  • view는 뷰 이름입니다.
  • path_to_file은 로컬 머신의 출력 파일 경로입니다.

예를 들면 다음과 같습니다.

다음 명령어를 입력하면 mydataset에 있는 myview에 대한 정보가 표시됩니다. 여기서 mydataset는 기본 프로젝트에 있습니다.

bq show --format=prettyjson mydataset.myview

다음 명령어를 입력하면 mydataset에 있는 myview에 대한 정보가 표시됩니다. mydataset는 기본 프로젝트가 아닌 myotherproject에 있습니다. 뷰 속성이 로컬 파일 /tmp/myview.json에 기록됩니다.

bq show \
--format=prettyjson \
myotherproject:mydataset.myview > /tmp/myview.json

API

REST API는 뷰 복사를 지원하지 않습니다. 대신 대상 데이터 세트에서 뷰를 다시 만들어야 합니다. REST API를 사용하여 뷰를 만드는 방법에 대한 자세한 내용은 뷰 만들기를 참조하세요.

뷰 이름 바꾸기

현재는 뷰 복사를 위해 Google Cloud 콘솔을 사용할 때만 뷰 이름을 바꿀 수 있습니다. 뷰를 복사할 때 이름을 바꾸는 방법에 대한 안내는 뷰 복사를 참조하세요.

bq 명령줄 도구, API 또는 클라이언트 라이브러리를 사용하여 기존 뷰의 이름을 변경할 수 없습니다. 대신 새 이름으로 뷰를 다시 만들어야 합니다.

뷰 삭제

뷰는 다음 방법으로 삭제할 수 있습니다.

  • Google Cloud 콘솔 사용
  • bq 명령줄 도구의 bq rm 명령어 사용
  • tables.delete API 메서드 호출

현재까지는 사용 가능한 방법을 사용해서 뷰를 한 번에 하나만 삭제할 수 있습니다.

지정된 시간이 지난 후 자동으로 뷰를 삭제하려면 데이터세트 수준의 기본 만료 시간을 설정하거나 뷰를 생성할 때 만료 시간을 설정하세요.

승인된 뷰를 삭제한 경우 소스 데이터 세트의 승인된 뷰 목록에서 삭제된 뷰를 삭제하는 데 최대 24시간이 걸릴 수 있습니다.

뷰를 삭제하면 이 뷰와 연결된 권한도 삭제됩니다. 삭제된 뷰를 다시 만들 때는 이전에 연결된 모든 액세스 권한을 수동으로 다시 구성해야 합니다.

필수 권한

뷰를 삭제하려면 다음 IAM 권한이 필요합니다.

  • bigquery.tables.delete

다음과 같은 사전 정의된 각 IAM 역할에는 뷰를 삭제하는 데 필요한 권한이 포함되어 있습니다.

  • roles/bigquery.dataOwner
  • roles/bigquery.dataEditor
  • roles/bigquery.admin

또한 bigquery.datasets.create 권한이 있으면 사용자가 만든 데이터 세트에 뷰를 삭제할 수 있습니다.

BigQuery의 IAM 역할과 권한에 대한 자세한 내용은 사전 정의된 역할 및 권한을 참조하세요.

뷰 삭제

뷰를 삭제하려면 다음 안내를 따르세요.

콘솔

  1. Google Cloud 콘솔에서 BigQuery 페이지로 이동합니다.

    BigQuery로 이동

  2. 탐색기 패널에서 프로젝트와 데이터 세트를 펼친 후 뷰를 선택합니다.

  3. 세부정보 패널에서 뷰 삭제를 클릭합니다.

  4. 대화상자에 "delete"를 입력하고 삭제를 클릭하여 확인합니다.

SQL

DROP VIEW DDL 문을 사용합니다.

  1. Google Cloud 콘솔에서 BigQuery 페이지로 이동합니다.

    BigQuery로 이동

  2. 쿼리 편집기에서 다음 문을 입력합니다.

    DROP VIEW mydataset.myview;
    

    다음을 바꿉니다.

    • DATASET_ID: 뷰가 포함된 데이터 세트의 ID입니다.
    • MY_VIEW: 업데이트할 뷰의 이름입니다.
    • NEW_DESCRIPTION: 새 뷰 설명입니다.

  3. 실행을 클릭합니다.

쿼리를 실행하는 방법에 대한 자세한 내용은 대화형 쿼리 실행을 참조하세요.

bq

bq rm 명령어를 --table 플래그(또는 -t 단축키)와 함께 사용하여 뷰를 삭제합니다. bq 명령줄 도구를 사용하여 뷰를 삭제할 때 작업을 확인해야 합니다. --force 플래그(또는 -f 단축키)를 사용하면 확인을 건너뛸 수 있습니다.

뷰가 기본 프로젝트가 아닌 다른 프로젝트의 데이터 세트에 있으면 프로젝트 ID를 project_id:dataset 형식으로 데이터 세트 이름에 추가합니다.

bq rm \
-f \
-t \
project_id:dataset.view

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

  • project_id는 프로젝트 ID입니다.
  • dataset는 테이블이 포함된 데이터 세트의 이름입니다.
  • view는 삭제하는 뷰의 이름입니다.

예를 들면 다음과 같습니다.

bq 명령줄 도구를 사용하여 bq 명령어를 실행할 수 있습니다.

Google Cloud 콘솔에서 Cloud Shell을 활성화합니다.

Cloud Shell 활성화

다음 명령어를 입력하면 mydataset에서 myview가 삭제됩니다. mydataset는 기본 프로젝트에 있습니다.

bq rm -t mydataset.myview

다음 명령어를 입력하면 mydataset에서 myview가 삭제됩니다. mydataset는 기본 프로젝트가 아닌 myotherproject에 있습니다.

bq rm -t myotherproject:mydataset.myview

다음 명령어를 입력하면 mydataset에서 myview가 삭제됩니다. mydataset는 기본 프로젝트에 있습니다. 이 명령어는 -f 단축키를 사용하여 확인을 건너뜁니다.

bq rm -f -t mydataset.myview

API

tables.delete API 메서드를 호출하고 tableId 매개변수를 사용하여 삭제할 뷰를 지정합니다.

C#

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

BigQuery에 인증하려면 애플리케이션 기본 사용자 인증 정보를 설정합니다. 자세한 내용은 로컬 개발 환경의 인증 설정을 참조하세요.


using Google.Cloud.BigQuery.V2;
using System;

public class BigQueryDeleteTable
{
    public void DeleteTable(
        string projectId = "your-project-id",
        string datasetId = "your_dataset_id",
        string tableId = "your_table_id"
    )
    {
        BigQueryClient client = BigQueryClient.Create(projectId);
        client.DeleteTable(datasetId, tableId);
        Console.WriteLine($"Table {tableId} deleted.");
    }
}

Go

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

BigQuery에 인증하려면 애플리케이션 기본 사용자 인증 정보를 설정합니다. 자세한 내용은 로컬 개발 환경의 인증 설정을 참조하세요.

import (
	"context"
	"fmt"

	"cloud.google.com/go/bigquery"
)

// deleteTable demonstrates deletion of a BigQuery table.
func deleteTable(projectID, datasetID, tableID string) error {
	// projectID := "my-project-id"
	// datasetID := "mydataset"
	// tableID := "mytable"
	ctx := context.Background()
	client, err := bigquery.NewClient(ctx, projectID)
	if err != nil {
		return fmt.Errorf("bigquery.NewClient: %v", err)
	}
	defer client.Close()

	table := client.Dataset(datasetID).Table(tableID)
	if err := table.Delete(ctx); err != nil {
		return err
	}
	return nil
}

Java

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

BigQuery에 인증하려면 애플리케이션 기본 사용자 인증 정보를 설정합니다. 자세한 내용은 로컬 개발 환경의 인증 설정을 참조하세요.

TableId tableId = TableId.of(projectId, datasetName, tableName);
boolean deleted = bigquery.delete(tableId);
if (deleted) {
  // the table was deleted
} else {
  // the table was not found
}

Node.js

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

BigQuery에 인증하려면 애플리케이션 기본 사용자 인증 정보를 설정합니다. 자세한 내용은 로컬 개발 환경의 인증 설정을 참조하세요.

// Import the Google Cloud client library
const {BigQuery} = require('@google-cloud/bigquery');
const bigquery = new BigQuery();

async function deleteTable() {
  // Deletes "my_table" from "my_dataset".

  /**
   * TODO(developer): Uncomment the following lines before running the sample.
   */
  // const datasetId = "my_dataset";
  // const tableId = "my_table";

  // Delete the table
  await bigquery
    .dataset(datasetId)
    .table(tableId)
    .delete();

  console.log(`Table ${tableId} deleted.`);
}

PHP

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

BigQuery에 인증하려면 애플리케이션 기본 사용자 인증 정보를 설정합니다. 자세한 내용은 로컬 개발 환경의 인증 설정을 참조하세요.

use Google\Cloud\BigQuery\BigQueryClient;

/** Uncomment and populate these variables in your code */
// $projectId = 'The Google project ID';
// $datasetId = 'The BigQuery dataset ID';
// $tableId = 'The BigQuery table ID';

$bigQuery = new BigQueryClient([
    'projectId' => $projectId,
]);
$dataset = $bigQuery->dataset($datasetId);
$table = $dataset->table($tableId);
$table->delete();
printf('Deleted table %s.%s' . PHP_EOL, $datasetId, $tableId);

Python

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

BigQuery에 인증하려면 애플리케이션 기본 사용자 인증 정보를 설정합니다. 자세한 내용은 로컬 개발 환경의 인증 설정을 참조하세요.


from google.cloud import bigquery

# Construct a BigQuery client object.
client = bigquery.Client()

# TODO(developer): Set table_id to the ID of the table to fetch.
# table_id = 'your-project.your_dataset.your_table'

# If the table does not exist, delete_table raises
# google.api_core.exceptions.NotFound unless not_found_ok is True.
client.delete_table(table_id, not_found_ok=True)  # Make an API request.
print("Deleted table '{}'.".format(table_id))

Ruby

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

BigQuery에 인증하려면 애플리케이션 기본 사용자 인증 정보를 설정합니다. 자세한 내용은 로컬 개발 환경의 인증 설정을 참조하세요.

require "google/cloud/bigquery"

def delete_table dataset_id = "my_dataset_id", table_id = "my_table_id"
  bigquery = Google::Cloud::Bigquery.new
  dataset  = bigquery.dataset dataset_id
  table    = dataset.table table_id

  table.delete

  puts "Table #{table_id} deleted."
end

뷰 보안

BigQuery에서 뷰에 대한 액세스를 제어하려면 승인된 뷰를 참조하세요.

다음 단계