JSON에서 BigQuery 스키마로 변환 — Numio
샘플 JSON으로 Google BigQuery 테이블 스키마(name, type, mode 필드로 이루어진 JSON 배열)를 생성합니다. 배열은 REPEATED, 중첩 객체는 RECORD가 되며, 배열의 모든 요소는 하나의 스키마로 병합됩니다.
샘플 이벤트나 API 응답으로 bq load 또는 bq mk --schema용 스키마 파일 초안을 만들 때.
JSON
Big Query Schema
이럴 때 사용하세요
- 샘플 이벤트나 API 응답으로 bq load 또는 bq mk --schema용 스키마 파일 초안을 만들 때.
- 테이블을 만들기 전에 로그 레코드의 중첩 객체와 배열이 RECORD, REPEATED 열에 어떻게 매핑되는지 확인할 때.
사용 방법
- JSON 객체 하나 또는 샘플 레코드 배열을 왼쪽 편집기에 붙여 넣거나, 파일 불러오기 버튼으로 UTF-8 파일을 엽니다.
- 오른쪽 스키마에서 각 필드에 선택된 타입을 확인합니다. 특히 날짜, 숫자 문자열, 배열을 살펴보세요.
- JSON 배열을 복사하고 필요하면 타입을 조정하거나 mode를 REQUIRED로 바꾼 뒤 스키마 파일로 저장합니다.
JSON 샘플 객체
{
"order_id": 1024,
"zip": "02139",
"coupon": null,
"created_at": "2026-01-05T10:00:00Z",
"items": [{ "sku": "A1", "qty": 2 }, { "sku": "B7", "price": 4.5 }]
}BigQuery 스키마 JSON
[
{
"name": "order_id",
"type": "INTEGER",
"mode": "NULLABLE"
},
{
"name": "zip",
"type": "STRING",
"mode": "NULLABLE"
},
{
"name": "coupon",
"type": "STRING",
"mode": "NULLABLE"
},
{
"name": "created_at",
"type": "TIMESTAMP",
"mode": "NULLABLE"
},
{
"name": "items",
"type": "RECORD",
…세부 정보 및 제한 사항
문자열은 ISO 날짜·시간(2026-01-05T10:00:00Z) 형태일 때만 TIMESTAMP, YYYY-MM-DD만 있을 때만 DATE가 됩니다. "02139" 같은 숫자 문자열을 포함해 나머지는 모두 STRING입니다.
null 값이나 빈 배열은 타입 정보가 없으므로, 다른 레코드가 값을 주지 않으면 STRING(NULLABLE 또는 REPEATED)이 됩니다. REQUIRED 모드는 생성되지 않습니다.
필드는 배열의 모든 요소에 걸쳐 병합됩니다. INTEGER와 FLOAT는 FLOAT가 되고, 그 밖의 타입 충돌은 STRING으로 대체됩니다.
변환은 브라우저에서 실행되며 아무것도 업로드되지 않습니다.
FAQ
타임스탬프 열이 DATETIME이 아니라 TIMESTAMP가 되는 이유는 무엇인가요?
생성기는 시간대가 있는 날짜·시간과 로컬 날짜·시간을 구분하지 않아, ISO 날짜·시간 문자열은 모두 TIMESTAMP가 됩니다. 값에 시간대가 없다면 직접 DATETIME으로 바꾸세요.
레코드 배열을 붙여 넣어도 되나요?
네. 루트의 객체 배열은 하나의 스키마로 병합되므로 일부 레코드에만 있는 필드도 포함됩니다. NDJSON(한 줄에 객체 하나)은 파싱되지 않으니 각 줄을 쉼표로 구분하고 [ ]로 감싸세요.
null 값은 어떤 타입이 되나요?
다른 샘플이 그 필드에 값을 주지 않으면 예시의 coupon처럼 NULLABLE STRING이 됩니다. 열이 숫자나 RECORD라면 null이 아닌 샘플을 넣거나 타입을 수정하세요.