스키마 자동 감지 사용

스키마 자동 감지

BigQuery로 데이터를 로드하거나 외부 데이터 소스를 쿼리할 때 스키마 자동 감지를 사용할 수 있습니다.

자동 감지를 사용 설정하면 BigQuery가 데이터 소스에서 무작위로 파일을 선택하고 데이터 행을 최대 100개까지 검사하여 대표 샘플로 사용되는 추론 프로세스를 시작합니다. 그러면 BigQuery는 각 필드를 검사하고 샘플 값을 기준으로 필드에 데이터 유형을 할당합니다.

테이블의 감지된 스키마를 보려면 다음을 수행하세요.

  • 명령줄 도구의 bq show 명령어 사용
  • GCP Console 또는 기본 웹 UI를 사용하여 테이블의 스키마 보기

BigQuery에서 스키마를 감지하면 드물지만 필드 이름을 BigQuery SQL 구문과 호환되도록 변경할 수 있습니다.

데이터 유형 변환에 대한 자세한 내용은 다음을 참조하세요.

스키마 자동 감지를 사용하여 데이터 로드

데이터 로드 시 스키마 자동 감지를 사용 설정하려면 다음을 수행합니다.

  • GCP Console: 스키마 섹션에서 자동 감지스키마 및 입력 매개변수 옵션을 선택합니다.
  • 기본 BigQuery 웹 UI: 스키마 섹션에서 자동 감지 옵션을 선택합니다.
  • CLI: bq load 매개변수와 함께 --autodetect 명령어를 사용합니다.

스키마 자동 감지가 사용 설정되면 BigQuery가 CSV 및 JSON 파일의 스키마를 자동으로 추론하려고 합니다.

Avro 파일, Parquet 파일, ORC 파일, Cloud Firestore 내보내기 파일 또는 Cloud Datastore 내보내기 파일에는 스키마 자동 감지를 사용할 수 없습니다. 이러한 파일을 BigQuery로 로드하면 테이블 스키마가 자기 기술 소스 데이터에서 자동으로 검색됩니다.

JSON 또는 CSV 데이터를 로드할 때 스키마 자동 감지를 사용하려면 다음 안내를 따르세요.

Console

  1. GCP Console에서 BigQuery 웹 UI를 엽니다.
    GCP Console로 이동

  2. 탐색 패널의 리소스 섹션에서 데이터세트를 선택합니다.

  3. 창의 오른쪽에 있는 테이블 만들기를 클릭합니다.

    테이블 만들기

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

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

      파일 선택

    • 파일 형식으로 CSV 또는 JSON을 선택합니다.

  5. 테이블 만들기 페이지의 대상 섹션에서 다음을 수행합니다.

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

      데이터세트 선택

    • 테이블 이름 필드에 생성할 테이블의 이름을 입력합니다.

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

  6. 테이블 만들기를 클릭합니다.

기본 UI

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

  2. 탐색에서 데이터세트 이름 옆에 있는 아래쪽 화살표 아이콘 아래쪽 화살표 아이콘을 클릭하고 새 테이블 만들기를 클릭합니다.

    참고: UI에서 데이터를 로드하는 프로세스는 테이블을 만드는 프로세스와 동일합니다.
  3. 테이블 만들기 페이지에서 다음을 수행합니다.

    • 소스 데이터소스에서 만들기를 클릭합니다.
    • 대상 테이블에서 데이터세트를 선택하고 대상 테이블 이름 필드에 테이블 이름을 입력합니다.
    • 스키마자동 감지를 선택하여 스키마를 결정합니다.

      자동 감지 링크

    • 테이블 만들기를 클릭합니다.

CLI

--autodetect 매개변수와 함께 bq load 명령어를 실행합니다.

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

다음 명령어는 스키마 자동 감지를 사용하여 파일을 로드합니다.

bq --location=location load \
--autodetect \
--source_format=format \
dataset.table \
path_to_source

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

  • location은 사용자 위치의 이름입니다. --location 플래그는 선택사항입니다. 예를 들어 도쿄 리전에서 BigQuery를 사용하는 경우 플래그 값을 asia-northeast1로 설정합니다. .bigqueryrc 파일을 사용하여 위치 기본값을 설정할 수 있습니다.
  • formatNEWLINE_DELIMITED_JSON 또는 CSV입니다.
  • dataset는 데이터를 로드하는 테이블이 포함된 데이터세트입니다.
  • table은 데이터를 로드하는 테이블 이름입니다.
  • path_to_source는 CSV 또는 JSON 파일의 위치입니다.

예:

다음 명령어를 입력하여 로컬 머신에서 mydataset라는 데이터세트에 저장된 mytable이라는 테이블로 myfile.csv를 로드합니다.

bq load --autodetect --source_format=CSV mydataset.mytable ./myfile.csv

다음 명령어를 입력하여 로컬 머신에서 mydataset라는 데이터세트에 저장된 mytable이라는 테이블로 myfile.csv를 로드합니다.

bq load --autodetect --source_format=CSV mydataset.mytable ./myfile.csv

API

  1. 소스 데이터를 가리키는 load 작업을 만듭니다. 작업 만들기에 대한 자세한 내용은 프로그래매틱 방식으로 BigQuery 작업 실행을 참조하세요. jobReference 섹션의 location 속성에 사용자 위치를 지정합니다.

  2. sourceFormat 속성을 설정하여 데이터 형식을 지정합니다. 스키마 자동 감지를 사용하려면 이 값을 NEWLINE_DELIMITED_JSON 또는 CSV로 설정해야 합니다.

  3. autodetect 속성을 사용하여 스키마 자동 감지를 true로 설정합니다.

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")
gcsRef := bigquery.NewGCSReference("gs://cloud-samples-data/bigquery/us-states/us-states.json")
gcsRef.SourceFormat = bigquery.JSON
gcsRef.AutoDetect = true
loader := client.Dataset(datasetID).Table(tableID).LoaderFrom(gcsRef)
loader.WriteDisposition = bigquery.WriteEmpty

job, err := loader.Run(ctx)
if err != nil {
	return err
}
status, err := job.Wait(ctx)
if err != nil {
	return err
}

if status.Err() != nil {
	return fmt.Errorf("Job completed with error: %v", status.Err())
}

Python

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

스키마 자동 감지를 사용 설정하려면 LoadJobConfig.autodetect 속성을 True로 설정합니다.

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

dataset_ref = client.dataset(dataset_id)
job_config = bigquery.LoadJobConfig()
job_config.autodetect = True
job_config.source_format = bigquery.SourceFormat.NEWLINE_DELIMITED_JSON
uri = "gs://cloud-samples-data/bigquery/us-states/us-states.json"
load_job = client.load_table_from_uri(
    uri, dataset_ref.table("us_states"), job_config=job_config
)  # API request
print("Starting job {}".format(load_job.job_id))

load_job.result()  # Waits for table load to complete.
print("Job finished.")

destination_table = client.get_table(dataset_ref.table("us_states"))
print("Loaded {} rows.".format(destination_table.num_rows))

외부 데이터 소스의 스키마 자동 감지

외부 데이터 소스에 연결된 테이블을 만드는 경우, 스키마 자동 감지를 사용 설정하려면 다음을 수행합니다.

  • GCP Console에서 자동 감지스키마 및 입력 매개변수 옵션을 선택합니다.
  • 기본 BigQuery 웹 UI에서 자동 감지 옵션을 선택합니다.

스키마 자동 감지가 사용 설정되면 BigQuery가 CSV 및 JSON 외부 데이터 소스의 스키마를 자동으로 추론하려고 합니다.

현재는 GCP Console이나 기본 웹 UI를 사용하여 Google 스프레드시트 외부 데이터 소스에 스키마 자동 감지를 사용할 수 없습니다. 또한 스키마 자동 감지는 외부 Avro 파일, Cloud Firestore 내보내기 파일 또는 Cloud Datastore 내보내기 파일과 함께 사용되지 않습니다. 이러한 파일 형식 중 하나에 연결된 테이블을 만들면 BigQuery가 자기 기술 소스 데이터에서 스키마를 자동으로 검색합니다.

CLI를 사용하여 CSV, JSON, Google 스프레드시트 데이터의 테이블 정의 파일을 만들 때 스키마 자동 감지를 사용 설정할 수 있습니다. CLI를 사용하여 테이블 정의 파일을 만들 때 mkdef 명령어에 --autodetect 플래그를 전달하여 스키마 자동 감지를 사용 설정하거나 --noautodetect 플래그를 전달하여 자동 감지를 사용 중지할 수 있습니다.

--autodetect 플래그를 사용하면 테이블 정의 파일에서 autodetecttrue로 설정됩니다. --noautodetect 플래그를 사용하면 "autodetect"false로 설정됩니다. 테이블 정의를 만들 때 외부 데이터 소스의 스키마 정의를 제공하지 않고 --noautodetect 또는 --autodetect 플래그를 사용하지 않으면 기본적으로 "autodetect" 설정은 true로 지정됩니다.

API를 사용하여 테이블 정의 파일을 만들 때는 autodetect 속성 값을 true 또는 false로 설정합니다. autodetecttrue로 설정하면 자동 감지가 사용 설정되고, autodetectfalse로 설정하면 자동 감지가 사용 중지됩니다.

자동 감지 세부정보

자동 감지는 스키마 세부정보를 감지할 뿐만 아니라 다음을 인식합니다.

압축

BigQuery는 파일을 열 때 gzip 호환 파일 압축을 인식합니다.

CSV 구분 기호

BigQuery는 다음과 같은 구분 기호를 감지합니다.

  • 쉼표(,)
  • 파이프(|)
  • 탭(\t)

CSV 헤더

BigQuery는 파일의 첫 번째 행과 데이터세트의 다른 행을 비교하여 헤더를 추론합니다. 첫 번째 행이 문자열만 포함하고 다른 행은 그렇지 않으면 BigQuery는 첫 번째 행이 헤더 행이라고 가정합니다.

CSV 따옴표 안 줄바꿈

BigQuery는 CSV 필드 내의 따옴표 안 줄바꿈 문자를 감지하지만 이를 행 경계로 해석하지 않습니다.

날짜

JSON 또는 CSV 데이터에 스키마 감지를 사용하는 경우 DATE 열의 값에 대시(-) 구분 기호를 사용해야 하며 YYYY-MM-DD(연도-월-일) 형식이어야 합니다.

타임스탬프

BigQuery는 다음을 비롯한 다양한 타임스탬프 형식을 감지합니다.

  • yyyy-mm-dd
  • yyyy-mm-dd hh:mm:ss
  • yyyy-mm-dd hh:mm:ss.mmm

타임스탬프에 UTC 오프셋과 UTC 영역 지정자인 Z가 포함될 수도 있습니다. 정수 기반 타임스탬프 값도 지원됩니다.

JSON 또는 CSV 데이터에 스키마 감지를 사용하는 경우, TIMESTAMP 열의 값에서 타임스탬프의 날짜 부분에 대시(-) 구분 기호를 사용해야 하며 날짜는 YYYY-MM-DD(연도-월-일) 형식이어야 합니다. 타임스탬프의 hh:mm:ss(시간-분-초) 부분에는 콜론(:) 구분 기호를 사용해야 합니다.

타임스탬프 예

다음은 BigQuery에서 자동 감지하는 타임스탬프 형식의 예입니다.

  • 253402300799
  • 2018-07-05 12:54:00 UTC
  • 2018-08-19 07:11:35.220 -05:00
  • 2018-08-19 12:11:35.220 UTC
  • 2018-08-19T12:11:35.220Z
  • 2.53402300799e11
  • 2018-08-19 12:11:35.220000
  • 2018-08-19 12:11:35.220
이 페이지가 도움이 되었나요? 평가를 부탁드립니다.

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

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