Cloud Storage 데이터 쿼리

BigQuery는 다음 형식의 Cloud Storage 데이터 쿼리를 지원합니다.

  • 쉼표로 구분된 값(CSV)
  • JSON(줄바꿈으로 구분)
  • Avro 파일
  • Cloud Datastore 내보내기
  • Cloud Firestore 내보내기

BigQuery는 다음 저장소 등급의 Cloud Storage 데이터 쿼리를 지원합니다.

  • 다중 지역
  • 리전
  • Nearline
  • Coldline

Cloud Storage 외부 데이터 소스를 직접 쿼리하려면 데이터의 Cloud Storage URI 경로를 제공하고 데이터 소스를 참조하는 외부 테이블을 만듭니다. Cloud Storage 데이터 소스를 참조하는 데 사용되는 테이블은 영구 테이블 또는 임시 테이블일 수 있습니다.

Cloud Storage에 저장된 데이터를 쿼리할 때는 데이터세트와 Cloud Storage 버킷의 위치를 고려해야 합니다.

Cloud Storage URI 검색

Cloud Storage 데이터 소스를 사용하여 외부 테이블을 만들려면 Cloud Storage URI를 제공해야 합니다.

Cloud Storage URI는 버킷 이름과 객체(파일 이름)로 구성됩니다. 예를 들어 Cloud Storage 버킷 이름이 mybucket이고 데이터 파일 이름이 myfile.csv라면 버킷 URI는 gs://mybucket/myfile.csv가 됩니다. 데이터가 여러 개 파일로 분리되어 있으면 URI에 와일드 카드를 사용할 수 있습니다. 자세한 내용은 Cloud Storage 요청 URI를 참조하세요.

BigQuery는 처음 이중 슬래시 다음에 슬래시 여러 개가 연속으로 포함된 소스 URI를 지원하지 않습니다. Cloud Storage 객체 이름에는 연속된 슬래시('/') 문자 여러 개가 포함될 수 있습니다. 하지만 BigQuery는 연속된 슬래시 여러 개를 단일 슬래시로 변환합니다. 예를 들어 소스 URI gs://[BUCKET]/my//object//name은 Cloud Storage에서는 유효하지만 BigQuery에서는 작동하지 않습니다.

Cloud Storage URI를 가져오려면 다음 단계를 따르세요.

  1. Cloud Storage 콘솔을 엽니다.

    Cloud Storage 콘솔

  2. 소스 데이터가 포함된 객체(파일) 위치로 이동합니다.

  3. Cloud Storage 콘솔 맨 위에서 객체 경로를 확인합니다. URI를 만들기 위해 gs://[BUCKET]/[FILE]을 적절한 경로로 바꿉니다(예: gs://mybucket/myfile.json). [BUCKET]은 Cloud Storage 버킷 이름이고 [FILE]은 데이터가 포함된 객체(파일) 이름입니다.

액세스 제어 및 범위

영구 외부 테이블 액세스 제어

Cloud Storage 데이터 소스에 연결된 영구 외부 테이블에 대한 액세스를 공유할 수 있습니다. 사용자(서비스 계정 포함) 또는 그룹과 액세스를 공유할 수 있습니다. 외부 테이블을 쿼리하려면 사용자 또는 그룹에 최소한 다음 권한이 필요합니다.

  • 외부 테이블을 포함하는 데이터세트에 대한 READER 또는 bigquery.dataViewer 액세스 권한
  • 데이터세트를 포함하는 프로젝트에 대한 bigquery.user 액세스(쿼리 작업 실행 목적)
  • Cloud Storage 데이터를 읽기 위해 사전 정의된 IAM 역할 storage.objectViewer 또는 다음의 권한

    • storage.objects.get
    • storage.objects.list(URI 와일드 카드를 사용하는 경우)

Compute Engine 인스턴스의 범위

Compute Engine 인스턴스 생성 시 인스턴스의 범위 목록을 지정할 수 있습니다. 범위는 Cloud Storage를 비롯한 GCP 제품에 대한 인스턴스의 액세스를 제어합니다. VM에서 실행되는 애플리케이션은 인스턴스에 연결된 서비스 계정을 사용하여 Google Cloud API를 호출합니다.

실행할 Compute Engine 인스턴스를 기본 Compute Engine 서비스 계정으로 설정하고, 해당 서비스 계정이 Cloud Storage 데이터 소스에 연결된 외부 테이블에 액세스하는 경우에는 인스턴스에 Cloud Storage에 대한 읽기 전용 액세스 권한이 필요합니다. 기본 Compute Engine 서비스 계정에는 https://www.googleapis.com/auth/devstorage.read_only 범위가 자동으로 부여됩니다. 자체 서비스 계정을 만드는 경우, 인스턴스에 Cloud Storage 읽기 전용 범위를 적용합니다.

Compute Engine 인스턴스에 범위 적용에 대한 자세한 내용은 인스턴스의 서비스 계정 및 액세스 범위 변경을 참조하세요. Compute Engine 서비스 계정에 대한 자세한 내용은 서비스 계정을 참조하세요.

영구 외부 테이블과 임시 외부 테이블

영구 테이블이나 임시 테이블을 사용하여 BigQuery에서 외부 데이터 소스를 쿼리할 수 있습니다. 영구 테이블을 사용하는 경우, 외부 데이터 소스에 연결된 BigQuery 데이터세트에 테이블을 만듭니다. 테이블은 영구적이므로 데이터세트 수준의 액세스 제어를 사용하여 기본 외부 데이터 소스에 대한 액세스 권한도 가진 다른 사용자와 테이블을 공유하고 언제든지 테이블을 쿼리할 수 있습니다.

임시 테이블을 사용하여 외부 데이터 소스를 쿼리하는 경우 쿼리를 포함하고 외부 데이터 소스에 연결된 비영구 테이블을 만드는 명령어를 사용합니다. 임시 테이블을 사용하는 경우 BigQuery 데이터세트 중 하나에 테이블을 만들지 않습니다. 테이블이 데이터세트에 영구적으로 저장되지 않으므로 다른 사용자와 테이블을 공유할 수 없습니다. 임시 테이블을 사용하여 외부 데이터 소스를 쿼리하면 외부 데이터에 대한 일회성 임시 쿼리 또는 ETL(추출, 변환, 로드) 프로세스에 유용합니다.

영구 외부테이블을 사용한 Cloud Storage 데이터 쿼리

영구 테이블을 사용하여 외부 데이터 소스를 쿼리하려면 외부 데이터 소스에 연결된 BigQuery 데이터세트에 테이블을 만듭니다. 데이터는 BigQuery 테이블에 저장되지 않습니다. 테이블은 영구적이므로 데이터세트 수준의 액세스 제어를 사용하여 기본 외부 데이터 소스에 대한 액세스 권한도 있는 다른 사용자와 테이블을 공유할 수 있습니다.

BigQuery에 영구 외부 테이블을 만들 때 스키마 정보를 지정하는 방법에는 세 가지가 있습니다.

  • API를 사용하여 영구 외부 테이블을 만드는 경우 먼저 외부 데이터 소스의 스키마와 메타데이터를 정의하는 테이블 정의 파일을 만듭니다. 테이블 정의 파일을 만들 때 지원되는 데이터 소스에 대한 스키마 자동 감지를 사용 설정할 수 있습니다.
  • CLI를 사용하여 영구 외부 테이블을 만드는 경우, 테이블 정의 파일을 사용하거나, 사용자 고유의 스키마 파일을 만들어서 사용하거나, 명령줄에서 스키마를 인라인으로 입력할 수 있습니다.
  • 콘솔 또는 기본 BigQuery 웹 UI를 사용하여 영구 외부 테이블을 만드는 경우, 수동으로 테이블 스키마를 입력하거나 지원되는 데이터 소스에 대해 스키마 자동 감지를 사용할 수 있습니다.

영구 외부 테이블을 사용하여 Cloud Storage 데이터를 쿼리하려면 다음 안내를 따르세요.

  • API와 CLI(선택사항)에 대한 테이블 정의 파일을 만듭니다.
  • 외부 데이터 소스에 연결된 BigQuery에 테이블을 만듭니다.
  • 외부 데이터 소스에 연결된 테이블을 쿼리합니다.

영구 외부 테이블 만들기

다음 방법으로 외부 데이터 소스에 연결된 영구 테이블을 만들 수 있습니다.

콘솔

  1. GCP Console에서 BigQuery 웹 UI를 엽니다.
    BigQuery 웹 UI로 이동
  2. 탐색 패널의 리소스 섹션에서 프로젝트를 확장하고 데이터세트를 선택합니다. 창의 오른쪽에 있는 테이블 만들기를 클릭합니다. 테이블 만들기
  3. 테이블 만들기 페이지의 소스 섹션에서 다음을 수행합니다.

    • 다음 항목으로 테이블 만들기에서 원하는 소스 유형을 선택합니다.

      테이블 소스 만들기

    • 소스 필드에서 파일/Cloud Storage 버킷을 찾아보거나 Cloud Storage URI를 입력합니다. BigQuery 웹 UI에 여러 URI를 포함할 수는 없지만 와일드 카드는 지원됩니다. Cloud Storage 버킷은 생성 중인 테이블을 포함하는 데이터세트와 같은 위치에 있어야 합니다.

      파일 선택

    • 파일 형식으로 사용 중인 데이터의 형식을 선택합니다. 유효한 Cloud Storage 데이터 형식은 다음과 같습니다.

      • 쉼표로 구분된 값(CSV)
      • JSON(줄바꿈으로 구분)
      • Avro
      • Cloud Datastore 백업(Cloud Firestore에도 사용됨)
  4. 테이블 만들기 페이지의 대상 섹션에서 다음을 수행합니다.

    • 데이터세트 이름에 적절한 데이터세트를 선택합니다.

      데이터세트 선택

    • 테이블 이름 필드에 BigQuery로 만들려는 테이블의 이름을 입력합니다.

    • 테이블 유형외부 테이블로 설정되어 있는지 확인합니다.

  5. 스키마 섹션에 스키마 정의를 입력합니다.

    • JSON 또는 CSV 파일의 경우, 자동 감지 옵션을 선택하여 스키마 자동 감지를 사용 설정할 수 있습니다. Cloud Datastore 내보내기, Cloud Firestore 내보내기, Avro 파일에는 자동 감지를 사용할 수 없습니다. 이러한 파일 유형의 스키마 정보는 자기 기술 소스 데이터에서 자동으로 검색됩니다.
    • 다음과 같이 스키마 정보를 직접 입력합니다.
      • 텍스트로 수정을 사용 설정하고 테이블 스키마를 JSON 배열로 입력합니다. 참고: bq show --format=prettyjson [DATASET].[TABLE] 명령어를 입력하면 기존 테이블 스키마를 JSON 형식으로 볼 수 있습니다.
      • 필드 추가를 사용하여 스키마를 수동으로 입력합니다.
  6. 테이블 만들기를 클릭합니다.

영구 테이블을 만든 후에는 외부 데이터 소스에 대한 제한이 적용되는 네이티브 BigQuery 테이블처럼 테이블에 대해 쿼리를 실행할 수 있습니다.

쿼리가 완료되면 결과를 CSV 또는 JSON 파일로 내보내거나, 테이블로 저장하거나, Google 스프레드시트에 저장할 수 있습니다. 자세한 내용은 데이터 다운로드, 저장, 내보내기를 참조하세요.

기본 UI

  1. BigQuery 웹 UI로 이동합니다.
    BigQuery 웹 UI로 이동

  2. 탐색 패널에서 마우스로 데이터세트를 가리키고 아래쪽 화살표 아이콘 아래쪽 화살표 아이콘 이미지을 클릭한 후 새 테이블 만들기를 클릭합니다.

  3. 테이블 만들기 페이지의 소스 데이터 섹션에서 다음을 수행합니다.

    • 위치Cloud Storage를 선택하고 소스 필드에 Cloud Storage URI를 입력합니다. Cloud Storage URI에는 와일드 카드가 지원됩니다.
    • 파일 형식으로 사용 중인 데이터의 형식을 선택합니다. 유효한 Cloud Storage 데이터 형식은 다음과 같습니다.

      • 쉼표로 구분된 값(CSV)
      • JSON(줄바꿈으로 구분)
      • Avro
      • Cloud Datastore 백업(Cloud Firestore에도 사용됨)
  4. 테이블 만들기 페이지의 대상 테이블 섹션에서 다음을 수행합니다.

    • 테이블 이름으로 적당한 데이터세트를 선택하고 테이블 이름 필드에 BigQuery에서 생성 중인 영구 테이블 이름을 입력합니다.
    • 테이블 유형외부 테이블로 설정되어 있는지 확인합니다.
  5. 스키마 섹션에서 스키마 정보를 입력합니다.

    • JSON 또는 CSV 파일의 경우, 자동 감지 옵션을 선택하여 스키마 자동 감지를 사용 설정할 수 있습니다. Cloud Datastore 내보내기, Cloud Firestore 내보내기, Avro 파일에는 자동 감지를 사용할 수 없습니다. 이러한 파일 유형의 스키마 정보는 자기 기술 소스 데이터에서 자동으로 검색됩니다.

    • 다음과 같이 CSV 또는 JSON 스키마 정보를 수동으로 입력할 수도 있습니다.

      • 텍스트로 편집을 클릭하고 JSON 형식으로 테이블 스키마를 입력합니다.
      • 필드 추가를 사용하여 스키마를 수동으로 입력합니다.
  6. 옵션 섹션에서 관련 항목을 선택한 후 테이블 만들기를 클릭합니다.

영구 테이블을 만든 후에는 외부 데이터 소스에 대한 제한이 적용되는 네이티브 BigQuery 테이블처럼 테이블에 대해 쿼리를 실행할 수 있습니다.

쿼리가 완료되면 결과를 CSV 또는 JSON 파일로 내보내거나, 테이블로 저장하거나, Google 스프레드시트에 저장할 수 있습니다. 자세한 내용은 데이터 다운로드, 저장, 내보내기를 참조하세요.

CLI

bq mk 명령어를 사용하여 BigQuery 명령줄 도구에서 테이블을 만듭니다. CLI를 사용하여 외부 데이터 소스에 연결된 테이블을 만들 때 다음을 사용하여 테이블의 스키마를 식별할 수 있습니다.

  • 테이블 정의 파일(로컬 머신에 저장됨)
  • 인라인 스키마 정의
  • JSON 스키마 파일(로컬 머신에 저장됨)

테이블 정의 파일을 사용해 Cloud Storage 데이터 소스에 연결된 영구 테이블을 만들려면 다음 명령어를 입력합니다.

bq mk --external_table_definition=[DEFINITION_FILE] [DATASET_ID].[TABLE_NAME]

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

  • [DEFINITION_FILE]은 로컬 머신에 있는 테이블 정의 파일 경로입니다.
  • [DATASET_ID]는 테이블이 포함된 데이터세트의 이름입니다.
  • [TABLE_NAME]은 만들고 있는 테이블의 이름입니다.

예를 들어, 다음 명령어는 mytable_def라는 테이블 정의 파일을 사용하여 mytable이라는 영구 테이블을 만듭니다.

bq mk --external_table_definition=/tmp/mytable_def mydataset.mytable

인라인 스키마 정의를 사용하여 외부 데이터 소스에 연결된 영구 테이블을 만들려면 다음 명령어를 입력합니다.

bq mk --external_table_definition=[SCHEMA]@[SOURCE_FORMAT]=[CLOUD_STORAGE_URI] [DATASET_ID].[TABLE_NAME]

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

  • [SCHEMA]는 스키마 정의([FIELD]:[DATA_TYPE], [FIELD]:[DATA_TYPE] 형식)입니다.
  • [SOURCE_FORMAT]CSV, NEWLINE_DELIMITED_JSON, AVRO 또는 DATASTORE_BACKUP입니다(DATASTORE_BACKUP도 Cloud Filestore용으로 사용됨).
  • [CLOUD_STORAGE_URI]Cloud Storage URI입니다.
  • [DATASET_ID]는 테이블이 포함된 데이터세트의 이름입니다.
  • [TABLE_NAME]은 만들고 있는 테이블의 이름입니다.

예를 들어 다음 명령어는 스키마 정의 Region:STRING,Quarter:STRING,Total_sales:INTEGER를 사용하여 Cloud Storage에 저장되는 CSV 파일에 연결된 sales라는 영구 테이블을 만듭니다.

bq mk --external_table_definition=Region:STRING,Quarter:STRING,Total_sales:INTEGER@CSV=gs://mybucket/sales.csv mydataset.sales

JSON 스키마 파일을 사용하여 외부 데이터 소스에 연결된 영구 테이블을 만들려면 다음 명령어를 입력합니다.

bq mk --external_table_definition=[SCHEMA_FILE]@[SOURCE_FORMAT]=[CLOUD_STORAGE_URI] [DATASET_ID].[TABLE_NAME]

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

  • [SCHEMA_FILE]은 로컬 머신에 있는 JSON 스키마 파일의 경로입니다.
  • [SOURCE_FORMAT]CSV, NEWLINE_DELIMITED_JSON, AVRO 또는 DATASTORE_BACKUP입니다(Cloud Firestore의 경우 DATASTORE_BACKUP도 사용됨).
  • [CLOUD_STORAGE_URI]Cloud Storage URI입니다.
  • [DATASET_ID]는 테이블이 포함된 데이터세트의 이름입니다.
  • [TABLE_NAME]은 만들고 있는 테이블의 이름입니다.

예를 들어 다음 명령어는 /tmp/sales_schema.json 스키마 파일을 사용하여 Cloud Storage에 저장되는 CSV 파일에 연결된 sales라는 테이블을 만듭니다.

bq mk --external_table_definition=/tmp/sales_schema.json@CSV=gs://mybucket/sales.csv mydataset.sales

영구 테이블을 만든 후에는 외부 데이터 소스에 대한 제한이 적용되는 네이티브 BigQuery 테이블처럼 테이블에 대해 쿼리를 실행할 수 있습니다.

쿼리가 완료되면 결과를 CSV 또는 JSON으로 다운로드하거나, 테이블로 저장하거나, Google 스프레드시트에 저장할 수 있습니다. 자세한 내용은 데이터 다운로드, 저장, 내보내기를 참조하세요.

API

Python

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

# from google.cloud import bigquery
# client = bigquery.Client()
# dataset_id = 'my_dataset'

# Configure the external data source
dataset_ref = client.dataset(dataset_id)
table_id = 'us_states'
schema = [
    bigquery.SchemaField('name', 'STRING'),
    bigquery.SchemaField('post_abbr', 'STRING')
]
table = bigquery.Table(dataset_ref.table(table_id), schema=schema)
external_config = bigquery.ExternalConfig('CSV')
external_config.source_uris = [
    'gs://cloud-samples-data/bigquery/us-states/us-states.csv',
]
external_config.options.skip_leading_rows = 1  # optionally skip header row
table.external_data_configuration = external_config

# Create a permanent table linked to the GCS file
table = client.create_table(table)  # API request

# Example query to find states starting with 'W'
sql = 'SELECT * FROM `{}.{}` WHERE name LIKE "W%"'.format(
    dataset_id, table_id)

query_job = client.query(sql)  # API request

w_states = list(query_job)  # Waits for query to finish
print('There are {} states with names starting with W.'.format(
    len(w_states)))

임시 테이블을 사용하여 Cloud Storage 데이터 쿼리

영구 테이블을 만들지 않고 외부 데이터 소스를 쿼리하려면 다음을 결합하는 명령어를 실행합니다.

테이블 정의 파일이나 제공된 스키마는 임시 외부 테이블을 만드는 데 사용되며, 임시 외부 테이블을 대상으로 쿼리가 실행됩니다. 임시 테이블을 사용한 외부 데이터 소스 쿼리는 BigQuery CLI 및 API에서 지원됩니다.

임시 외부 테이블을 사용하는 경우, BigQuery 데이터세트 중 하나에 테이블을 만들지 마세요. 테이블이 데이터세트에 영구적으로 저장되지 않으므로, 다른 사용자와 테이블을 공유할 수 없습니다. 임시 테이블을 사용하여 외부 데이터 소스를 쿼리하면 외부 데이터를 대상으로 하는 일회성 임시 쿼리 또는 ETL(추출, 변환, 로드) 프로세스에 유용합니다.

임시 테이블 만들기 및 쿼리

CLI나 API를 사용하여 외부 데이터 소스에 연결된 임시 테이블을 만들고 쿼리할 수 있습니다.

CLI

--external_table_definition 플래그와 함께 bq query 명령어를 사용하여 외부 데이터 소스에 연결된 임시 테이블을 쿼리합니다. CLI를 사용하여 외부 데이터 소스에 연결된 임시 테이블을 쿼리하는 경우 다음을 사용하여 테이블의 스키마를 식별할 수 있습니다.

  • 테이블 정의 파일(로컬 머신에 저장됨)
  • 인라인 스키마 정의
  • JSON 스키마 파일(로컬 머신에 저장됨)

--location 플래그를 지정하고 값을 사용자 위치로 설정합니다.

테이블 정의 파일을 사용하여 외부 데이터 소스에 연결된 임시 테이블을 쿼리하려면 다음 명령어를 입력합니다.

bq --location=[LOCATION] query --external_table_definition=[TABLE_NAME]::[DEFINITION_FILE] '[QUERY]'

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

  • [LOCATION]은 사용자 위치의 이름입니다. 데이터가 US 또는 EU 다중 지역 위치에 있는 경우, --location 플래그는 선택사항입니다.
  • [TABLE_NAME]은 만들고 있는 임시 테이블 이름입니다.
  • [DEFINITION_FILE]은 로컬 머신에 있는 테이블 정의 파일 경로입니다.
  • [QUERY]는 임시 테이블에 제출하는 쿼리입니다.

예를 들어, 다음 명령어는 sales_def라는 테이블 정의 파일을 사용하여 sales라는 임시 테이블을 만들고 쿼리합니다.

bq --location=US query --external_table_definition=sales::sales_def 'SELECT Region,Total_sales FROM sales;'

인라인 스키마 정의를 사용하여 외부 데이터 소스에 연결된 임시 테이블을 쿼리하려면 다음 명령어를 입력합니다.

bq --location=[LOCATION] query --external_table_definition=[TABLE_NAME]::[SCHEMA]@[SOURCE_FORMAT]=[CLOUD_STORAGE_URI] '[QUERY]'

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

  • [LOCATION]은 사용자 위치의 이름입니다. 데이터가 US 또는 EU 다중 지역 위치에 있는 경우, --location 플래그는 선택사항입니다.
  • [TABLE_NAME]은 만들고 있는 임시 테이블 이름입니다.
  • [SCHEMA]는 인라인 스키마 정의([FIELD]:[DATA_TYPE],[FIELD]:[DATA_TYPE] 형식)입니다.
  • [SOURCE_FORMAT]CSV, NEWLINE_DELIMITED_JSON, AVRO 또는 DATASTORE_BACKUP입니다(Cloud Firestore의 경우 DATASTORE_BACKUP도 사용됨).
  • [CLOUD_STORAGE_URI]Cloud Storage URI입니다.
  • [QUERY]는 임시 테이블에 제출하는 쿼리입니다.

예를 들어 다음 명령어는 스키마 정의 Region:STRING,Quarter:STRING,Total_sales:INTEGER를 사용하여 Cloud Storage에 저장되는 CSV 파일에 연결된 sales라는 임시 테이블을 만들고 쿼리합니다.

bq --location=US query --external_table_definition=sales::Region:STRING,Quarter:STRING,Total_sales:INTEGER@CSV=gs://mybucket/sales.csv 'SELECT Region,Total_sales FROM sales;'

JSON 스키마 파일을 사용하여 외부 데이터 소스에 연결된 임시 테이블을 쿼리하려면 다음 명령어를 입력합니다.

bq --location=[LOCATION] query --external_table_definition=[SCHEMA_FILE]@[SOURCE_FORMAT]=[CLOUD_STORAGE_URI] '[QUERY]'

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

  • [LOCATION]은 사용자 위치의 이름입니다. 데이터가 US 또는 EU 다중 지역 위치에 있는 경우, --location 플래그는 선택사항입니다.
  • [SCHEMA_FILE]은 로컬 머신에 있는 JSON 스키마 파일의 경로입니다.
  • [SOURCE_FORMAT]CSV, NEWLINE_DELIMITED_JSON, AVRO 또는 DATASTORE_BACKUP입니다(Cloud Firestore의 경우 DATASTORE_BACKUP도 사용됨).
  • [CLOUD_STORAGE_URI]Cloud Storage URI입니다.
  • [QUERY]는 임시 테이블에 제출하는 쿼리입니다.

    예를 들어, 다음 명령어는 /tmp/sales_schema.json 스키마 파일을 사용하여 Cloud Storage에 저장되는 CSV 파일에 연결된 sales라는 임시 테이블을 만들고 쿼리합니다.

    bq --location=US query --external_table_definition=sales::/tmp/sales_schema.json@CSV=gs://mybucket/sales.csv 'SELECT Region,Total_sales FROM sales;'

API

Python

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

# from google.cloud import bigquery
# client = bigquery.Client()

# Configure the external data source and query job
external_config = bigquery.ExternalConfig('CSV')
external_config.source_uris = [
    'gs://cloud-samples-data/bigquery/us-states/us-states.csv',
]
external_config.schema = [
    bigquery.SchemaField('name', 'STRING'),
    bigquery.SchemaField('post_abbr', 'STRING')
]
external_config.options.skip_leading_rows = 1  # optionally skip header row
table_id = 'us_states'
job_config = bigquery.QueryJobConfig()
job_config.table_definitions = {table_id: external_config}

# Example query to find states starting with 'W'
sql = 'SELECT * FROM `{}` WHERE name LIKE "W%"'.format(table_id)

query_job = client.query(sql, job_config=job_config)  # API request

w_states = list(query_job)  # Waits for query to finish
print('There are {} states with names starting with W.'.format(
    len(w_states)))

Cloud Storage URI의 와일드 카드 지원

Cloud Storage 데이터가 공통 기본 이름을 공유하는 다수의 파일로 분할되는 경우에는 테이블 정의 파일의 URI에 와일드 카드를 사용할 수 있습니다. 테이블 정의 파일을 사용하지 않고 외부 테이블을 만들 때도 와일드 카드를 사용할 수 있습니다.

Cloud Storage URI에 와일드 카드를 추가하려면 기본 이름에 별표(*)를 추가합니다. 예를 들어, fed-sample000001.csvfed-sample000002.csv라는 파일 두 개가 있다면 버킷 URI는 gs://mybucket/fed-sample*이 됩니다. 그런 다음 이 와일드 카드 URI를 콘솔, 기본 UI, CLI 또는 API에서 사용할 수 있습니다.

버킷 내의 객체(파일 이름)에 와일드 카드 하나만 사용할 수 있습니다. 와일드 카드는 객체 이름 중간이나 끝에 입력할 수 있습니다. 버킷 이름에 와일드 카드를 추가하는 것은 지원되지 않습니다.

Google Cloud Datastore 내보내기의 경우 하나의 URI만 지정할 수 있으며 .backup_info 또는 .export_metadata로 끝나야 합니다.

다음과 같은 경우에는 * 와일드 카드 문자가 허용되지 않습니다.

  • Cloud Datastore 또는 Cloud Firestore 내보내기에 연결된 외부 테이블을 만드는 경우
  • Cloud Storage의 Cloud Datastore 또는 Cloud Firestore 내보내기 데이터를 로드하는 경우

_FILE_NAME 유사 열

외부 데이터 소스를 기반으로 하는 테이블은 _FILE_NAME이라는 유사 열을 제공합니다. 이 열에는 행이 속한 파일의 정규화된 경로가 있습니다. Cloud StorageGoogle 드라이브에 저장된 외부 데이터를 참조하는 테이블에만 이 열을 사용할 수 있습니다.

_FILE_NAME 열 이름은 예약되어 있으므로, 어떤 테이블에도 이 이름으로 열을 만들 수 없습니다. _FILE_NAME 값을 선택하려면 별칭을 사용해야 합니다. 다음 예제 쿼리에서는 유사 열에 별칭 fn을 할당하여 _FILE_NAME을 선택하는 것을 보여줍니다.

bq query --project_id=[PROJECT_ID] --use_legacy_sql=false 'SELECT name, _FILE_NAME AS fn from [DATASET].[TABLE_NAME] where name contains "Alex";' 

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

  • [PROJECT_ID]는 유효한 프로젝트 ID입니다(Cloud Shell을 사용하거나 Cloud SDK에서 기본 프로젝트를 설정하는 경우에는 이 플래그가 필요 없음).
  • [DATASET]는 영구 외부 테이블이 저장되는 데이터세트 이름입니다.
  • [TABLE_NAME]은 영구 외부 테이블 이름입니다.

이 페이지가 도움이 되었나요? 평가를 부탁드립니다.

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

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