TO_JSON_STRING
값을 "JSON-formatted 문자열"로 직렬화하는 함수.
- 리턴 값의 데이터 타입은 json이 아니라 string(문자열)이다.
- 단, 문자열이 JSON format으로 보이는 것일 뿐.
- 인자로 “어떤 타입의 값을 넣느냐”에 따라 결과의 JSON format 달라진다.
예시 1. FROM에 입력한 테이블을 참조하는 경우 => 행 단위 직렬화
예시 테이블
| id | name | age |
| 1 | Alice | 30 |
| 2 | Jenny | 31 |
SELECT TO_JSON_STRING(t) AS json_row
FROM sample_table AS t;

- row 단위로 JSON 직렬화가 적용됨.
- JSON 객체 포맷으로 출력됨.
-> 컬럼명이 JSON key
-> 값이 JSON value
FROM sample_table AS t
=> 이건 단순히 “이 테이블을 이후 쿼리에서 t라는 이름으로 부르겠다" 라는 의미다. 하지만 SELECT에서 테이블의 별칭 t 를 직접 참고하게 되면, 빅쿼리는 이렇게 해석한다.
-- t = 현재 row의 모든 컬럼을 묶은 값
-- 내부 타입: STRUCT<id, name, age, ...>
-- FROM 절에 정의된 테이블 alias는 해당 테이블의 row 타입(= STRUCT 타입) 이름이 된다
t STRUCT<
id INT64,
name STRING,
age INT64
>
즉 t는 “테이블 전체”가 아니라 “현재 row 전체를 대표하는 STRUCT”로 인식되어 직렬화되는 것.
예시 2. 컬럼 하나를 넣는 경우
이 경우 결과는 컬럼의 데이터 타입에 따라 달라진다.
| id | name | age | profile(STRUCT) | tags(ARRAY<STRING>) | payload(JSON) |
| 1 | Alice | 30 | (Seoul, 12345) | ["bigquery","sql"] | {"vip":true,"score":10,"meta":{"tier":"gold"}} |
| 2 | Jenny | 31 | (Busan, 54321) | ["analytics","etl"] | {"vip":false,"score":7,"meta":{"tier":"silver"}} |
(1) 기본 타입 컬럼 (STRING, INT, BOOL 등)
SELECT TO_JSON_STRING(name) AS json_name
FROM sample_table;

- string의 경우 따옴표 포함
- 숫자는 숫자만 그대로
(2) STRUCT 타입 컬럼
SELECT TO_JSON_STRING(profile) AS json_profile
FROM sample_table;
| 행 | json_profile |
| 1 | {"city":"Seoul","zip":"12345"} |
| 2 | {"city":"Busan","zip":"54321"} |
- STRUCT 컬럼은 내부 필드명이 key가 되어 JSON 객체로 나온다.
(3) ARRAY 타입 컬럼
SELECT TO_JSON_STRING(tags) AS json_tags
FROM sample_table;
| 행 | json_profile |
| 1 | ["bigquery","sql"] |
| 2 | ["analytics","etl"] |
- ARRAY 컬럼은 → JSON 배열로 나온다.
(4) JSON Object 컬럼
SELECT TO_JSON_STRING(payload) AS json_payload
FROM sample_table;
| 행 | json_payload |
| 1 | {"vip":true,"score":10,"meta":{"tier":"gold"}} |
| 2 | {"vip":false,"score":7,"meta":{"tier":"silver"}} |
- 이미 JSON 타입이면 그 JSON 값 자체가 그대로 그 JSON형태를 유지하며 문자열로 변환됨.
'데이터 처리 도구 > SQL' 카테고리의 다른 글
| [빅쿼리(BigQuery)] 문자열에 MAX() 함수를 쓰면 어떻게 될까? (feat. NULL 처리) (0) | 2026.01.10 |
|---|---|
| [빅쿼리(BigQuery)] JSON 데이터 타입 다루기 (3) JSON Object에서 키 기준으로 정렬하여 값 추출하기 (0) | 2025.12.29 |
| [빅쿼리(BigQuery)] JSON을 다루는 함수(2) TO_JSON_STRING 함수 (모든 컬럼 값이 100% 중복인 행 찾는 방법) (0) | 2025.12.23 |
| [빅쿼리(BigQuery)] STRING_AGG 문자열 연결하는 집계함수 (0) | 2025.12.16 |
| [MySQL] CAST 함수 (0) | 2025.12.02 |