legacy SQL 데이터 유형

이 문서에서는 BigQuery의 이전 SQL 쿼리 구문이 지원하는 데이터 유형을 자세히 설명합니다. BigQuery의 기본 쿼리 구문은 GoogleSQL입니다. GoogleSQL의 데이터 유형에 대한 자세한 내용은 GoogleSQL 데이터 유형을 참조하세요.

legacy SQL 데이터 유형

데이터에는 다음 데이터 유형이 포함될 수 있습니다.

데이터 유형 가능한 값
STRING 가변 길이 문자(UTF-8) 데이터
BYTES 가변 길이 바이너리 데이터
  • 가져온 BYTES 데이터는 Base64로 인코딩해야 하지만 BigQuery가 읽고 변환할 수 있는 Avro BYTES 데이터는 예외입니다.
  • BigQuery 테이블에서 읽은 BYTES 데이터는 Base64로 인코딩되지만, Avro 바이트 데이터 유형이 적용되는 Avro 형식으로 내보내는 경우는 예외입니다.
INTEGER

부호 있는 64비트 정수입니다.

BigQuery API를 사용해서 [-253+1, 253-1] 범위 밖의 정수(대부분의 경우 9,007,199,254,740,991을 초과하는 정수)를 정수(INT64) 열에 로드하려는 경우 데이터 손상 방지를 위해 이를 문자열로 전달해야 합니다. 이 문제는 JSON/ECMAScript의 정수 크기 제한으로 인해 발생합니다. 자세한 내용은 RFC 7159의 숫자 섹션을 참조하세요.

FLOAT 배정밀도 부동 소수점 형식입니다.
NUMERIC Legacy SQL은 NUMERIC을 제한적으로 지원합니다. 자세한 내용은 legacy SQL의 정확한 숫자를 참조하세요.
BIGNUMERIC legacy SQL은 BIGNUMERIC를 제한적으로 지원합니다. 자세한 내용은 legacy SQL의 정확한 숫자를 참조하세요.
부울
  • CSV 형식: 1 또는 0, true 또는 false, t 또는 f, yes 또는 no, y 또는 n(모두 대소문자를 구분하지 않음)
  • JSON 형식: true 또는 false(대소문자를 구분하지 않음)
RECORD 하나 이상의 다른 필드 모음입니다.
TIMESTAMP

TIMESTAMP 데이터 유형은 UNIX 타임스탬프나 캘린더 날짜/시간으로 설명할 수 있습니다. BigQuery는 TIMESTAMP 데이터를 마이크로초 정밀도의 UNIX 타임스탬프로 내부에 저장합니다.

UNIX 타임스탬프

양수 또는 음수의 십진수입니다. 양수는 이폭(1970-01-01 00:00:00 UTC) 이후의 시간(초)을 지정하고, 음수는 이폭 이전의 시간(초)을 지정합니다. 소수점 이하 6자리(마이크로초 정밀도)까지 표기됩니다.

날짜 및 시간 문자열

YYYY-MM-DD HH:MM:SS 형식의 날짜 및 시간 문자열. UTCZ 지정자가 지원됩니다.

날짜 및 시간 문자열에 시간대 오프셋을 제공할 수 있지만, BigQuery는 값을 내부 형식으로 변환한 후에 오프셋을 유지하지 않습니다. 원래 시간대의 데이터를 유지하고 싶다면 시간대 오프셋을 별도의 열에 저장하세요. 한 자릿수의 시간대 오프셋을 지정할 때는 앞에 0을 붙여야 합니다.

JSON 형식을 사용할 때는 날짜 및 시간 문자열을 따옴표로 묶어야 합니다.

예시

다음 예시는 특정 날짜를 UNIX 타임스탬프와 날짜 및 시간 문자열 형식으로 설명하는 동일한 방법을 보여줍니다.

이벤트 UNIX 타임스탬프 형식 날짜/시간 문자열 형식
오클라호마 시티 근처의 경미한(M4.2) 지진

1408452095.220
1408452095.220000

2014-08-19 07:41:35.220 -05:00
2014-08-19 12:41:35.220 UTC
2014-08-19 12:41:35.220
2014-08-19 12:41:35.220000
2014-08-19T12:41:35.220Z
달에 발을 내딛는 닐 암스트롱

-14182916

1969-07-20 20:18:04
1969-07-20 20:18:04 UTC
1969-07-20T20:18:04
Y10k 버그 수정 기한

253402300800
2.53402300800e11

10000-01-01 00:00
DATE 이전 SQL은 DATE를 제한적으로 지원합니다. 자세한 내용은 이전 SQL의 상용시를 참조하세요.
시간 이전 SQL은 TIME을 제한적으로 지원합니다. 자세한 내용은 이전 SQL의 상용시를 참조하세요.
DATETIME 이전 SQL은 DATETIME을 제한적으로 지원합니다. 자세한 내용은 이전 SQL의 상용시를 참조하세요.

legacy SQL의 정확한 숫자

SELECT list (with aliases), GROUP BY keys 같은 비수정 절에서 NUMERIC 또는 BIGNUMERIC 값을 읽고, 윈도우 함수에서 통과 필드 등을 읽을 수 있습니다. 하지만 비교를 포함하여 NUMERIC 또는 BIGNUMERIC 값에 대한 계산은 모두 정의되지 않은 결과를 생성합니다.

Legacy SQL에서 지원되는 전송 및 변환 함수는 다음과 같습니다.

  • CAST(<numeric> AS STRING)
  • CAST(<bignumeric> AS STRING)
  • CAST(<string> AS NUMERIC)
  • CAST(<string> AS BIGNUMERIC)

이전 SQL의 상용시

DATE, TIME, DATETIME과 같은 상용시 데이터 유형을 읽고 SELECT list (with aliases), GROUP BY keys, 윈도우 함수의 통과 필드와 같은 비수정 연산자로 처리할 수 있습니다. 하지만 비교를 포함하여 상용시 값에 대한 다른 모든 계산은 정의되지 않은 결과를 생성합니다.

Legacy SQL에서 지원되는 전송 및 변환 함수는 다음과 같습니다.

  • CAST(<date> AS STRING)
  • CAST(<time> AS STRING)
  • CAST(<datetime> AS STRING)
  • CAST(<string> AS DATE)
  • CAST(<string> AS TIME)
  • CAST(<string> AS DATETIME)

실제로 legacy SQL은 상용시 값을 정수로 해석하며, 상용시 값이라고 간주되는 정수에 대한 연산은 예기치 않은 결과를 생성합니다.

상용시 데이터 유형을 사용하여 값을 계산하려면 DATE, DATETIME, TIME 데이터 유형에 대한 SQL 연산을 모두 지원하는 GoogleSQL을 사용하는 것이 좋습니다.

다음 단계

  • API를 사용하여 필드의 데이터 유형을 설정하려면 schema.fields.type을 참조하세요.
  • GoogleSQL 데이터 유형은 데이터 유형을 참조하세요.