legacy SQL의 테이블 데코레이터

이 문서에서는 legacy SQL 쿼리 구문에서 테이블 데코레이터를 사용하는 방법에 대해 자세히 설명합니다. BigQuery의 기본 쿼리 구문은 표준 SQL입니다. 현재 표준 SQL에서는 테이블 데코레이터가 지원되지 않습니다. 하지만 _TABLE_SUFFIX 유사 열에 필터를 사용하면 표준 SQL에서 테이블 데코레이터와 동일한 시맨틱스를 적용할 수 있습니다. 자세한 내용은 표준 SQL 마이그레이션 가이드의 테이블 데코레이터 및 와일드 카드 함수를 참조하세요.

일반적으로 BigQuery는 쿼리를 실행할 때 열 전체를 검색합니다. legacy SQL에서 테이블 데코레이터를 사용하면 데이터의 하위 집합에 대한 쿼리를 더욱 경제적으로 실행할 수 있습니다. 테이블 복사, 테이블 내보내기 또는 tabledata.list를 사용한 데이터 나열 작업에서처럼 테이블을 읽을 때마다 테이블 데코레이터를 사용할 수 있습니다.

테이블 데코레이터는 <time>의 상댓값과 절댓값을 사용합니다. 상댓값은 음수로, 절댓값은 양수로 표시됩니다. 예를 들어 -3600000은 현재 시간 기준 1시간 전을 밀리초 단위로 표시한 것이며, 3600000은 1970년 1월 1일 이후의 1시간을 밀리초 단위로 표시한 것입니다.

스냅샷 데코레이터

구문

@<time>
  • 테이블의 스냅샷을 에포크 이후의 <time>(밀리초)으로 나타냅니다.
  • <time>은 지난 7일 이내여야 하며 테이블 생성 시간과 같거나 이후여야 합니다.
  • @0은 지난 7일 또는 테이블 생성 시간(테이블이 생성된 후 7일이 지나지 않은 경우) 중에서 테이블의 가장 오래된 사용 가능 스냅샷을 참조하는 특수한 사례입니다.
  • 스냅샷 데코레이터는 테이블 복사 작업에서만 지원됩니다. 쿼리 작업에는 FOR SYSTEM_TIME AS OF를 사용하세요.

테이블 삭제 후 7일 이내에 스냅샷 데코레이터를 사용하여 테이블 삭제를 취소할 수 있습니다.

예시

1시간 전의 테이블 스냅샷을 얻는 방법은 다음과 같습니다.

상댓값 예시

#legacySQL
SELECT COUNT(*) FROM [PROJECT_ID:DATASET.TABLE@-3600000]

절댓값 예시

  1. 1시간 전의 <time>을 가져오려면 다음을 실행합니다.

    #legacySQL
    SELECT INTEGER(DATE_ADD(USEC_TO_TIMESTAMP(NOW()), -1, 'HOUR')/1000)
    
  2. 그런 다음 다음 쿼리에서 <time>을 바꿉니다.

    #legacySQL
    SELECT COUNT(*) FROM [PROJECT_ID:DATASET.TABLE@time]
    

스냅샷 데코레이터와 bq 명령줄 도구를 사용하여 테이블 삭제를 취소하려면 다음 안내를 따르세요.

테이블 삭제 취소 예시

먼저 테이블이 삭제되기 전의 타임스탬프(에포크 이후의 경과 시간(밀리 초))를 확인합니다. 그런 다음 이 타임스탬프에 있는 테이블을 새 테이블에 복사합니다. 새 테이블 이름은 삭제한 테이블의 이름과 달라야 합니다.

# Create a table "dataset1.table1"
$ bq query --destination_table=dataset1.table1 "select 1"

# Get current timestamp
$ date +%s%3N
1573060348222

# Delete table1
$ bq rm dataset1.table1

# Undelete table
$ bq cp dataset1.table1@1573060348222 dataset1.table1_restore

데이터세트 삭제 취소 예시

먼저 데이터세트가 삭제되기 전의 타임스탬프(에포크 이후의 경과 시간(밀리 초))를 확인합니다. 그런 다음 이 타임스탬프의 데이터세트에 있는 테이블을 테이블에 복사합니다.

# Create a table "dataset1.table1"
$ bq query --destination_table=dataset1.table1 "select 1"

# Get current timestamp
$ date +%s%3N
1573060348222

# Remove the dataset
$ bq rm -f -r dataset1

# Restore step1: re-create the dataset with same name
$ bq mk dataset1

# Restore step2: undelete the table.
$ bq cp dataset1.table1@1573060348222 dataset1.table_new

범위 데코레이터

구문

@<time1>-<time2>
  • <time1><time2>(에포크 이후의 경과 시간(밀리 초)) 사이에 추가된 테이블 데이터를 나타냅니다.
  • <time1><time2>는 지난 7일 이내여야 합니다.
  • <time2>는 선택사항이며 기본값은 'now'입니다.

예시

상댓값 예시

1시간 전과 30분 전 사이에 추가된 테이블 데이터를 가져오려면 다음 안내를 따르세요.

#legacySQL
SELECT COUNT(*) FROM [PROJECT_ID:DATASET.TABLE@-3600000--1800000]

지난 10분 동안의 데이터를 얻는 가져오는 방법:

#legacySQL
SELECT COUNT(*) FROM [PROJECT_ID:DATASET.TABLE@-600000-]

절댓값 예시

1시간 전과 30분 전 사이에 추가된 테이블 데이터를 가져오려면 다음 안내를 따르세요.

  1. 1시간 전의 <time1>을 가져오려면 다음을 실행합니다.

    #legacySQL
    SELECT INTEGER(DATE_ADD(USEC_TO_TIMESTAMP(NOW()), -1, 'HOUR')/1000)
    
  2. 30분 전의 <time2>를 가져옵니다.

    #legacySQL
    SELECT INTEGER(DATE_ADD(USEC_TO_TIMESTAMP(NOW()), -30, 'MINUTE')/1000)
    
  3. 다음 쿼리에서 <time1><time2>를 바꿉니다.

    #legacySQL
    SELECT COUNT(*) FROM [PROJECT_ID:DATASET.TABLE@time1-time2]