본문으로 건너뛰기
최종 수정: 에

ARRAY | 복합 타입

ARRAY<T>는 T 타입의 요소로 구성된 배열을 나타내며, 태그, ID 목록, 여러 값을 갖는 속성 등을 저장하는 데 주로 사용됩니다. 이 타입의 구문, 제한 사항, 지원 함수는 ARRAY 데이터 타입을 참조하세요.

이 문서는 ARRAY 필드가 포함된 데이터를 Doris에 적재하는 방법을 다룹니다. 원본 데이터 형식에 따라 CSV와 JSON이라는 두 가지 일반적인 시나리오에 대해 전체 과정의 예제를 제공합니다.

적용 시나리오​

데이터 소스권장 방법주요 매개변수
`, \t` 또는 유사한 문자로 구분된 텍스트 파일CSV 형식의 Stream Load
중첩 구조의 JSON 배열JSON 형식의 Stream Loadformat=json, strip_outer_array

전체 절차는 다음과 같습니다:

  1. 적절한 형식의 원본 데이터 파일을 준비합니다
  2. Doris에 ARRAY<T> 열이 포함된 대상 테이블을 생성합니다
  3. Stream Load로 파일을 적재합니다
  4. 쿼리로 데이터가 올바르게 파싱되었는지 확인합니다

CSV 형식 데이터 적재​

단계 1: 데이터 준비​

CSV 파일 test_array.csv를 생성합니다. 배열 요소 자체가 쉼표로 구분되므로, 여기서는 배열 요소 구분자와 열 구분자가 충돌하지 않도록 |를 열 구분자로 사용합니다:

1|[1,2,3,4,5]
2|[6,7,8]
3|[]
4|null

단계 2: 데이터베이스에 테이블 생성​

CREATE TABLE `array_test` (
`id` INT NOT NULL,
`c_array` ARRAY<INT> NULL
)
DUPLICATE KEY(`id`)
DISTRIBUTED BY HASH(`id`) BUCKETS 1
PROPERTIES (
"replication_allocation" = "tag.location.default: 1"
);

단계 3: 데이터 적재​

Stream Load로 데이터를 적재하며, column_separator를 사용하여 |를 열 구분자로 지정합니다:

curl --location-trusted \
-u "root":"" \
-H "column_separator:|" \
-H "columns: id, c_array" \
-T "test_array.csv" \
http://localhost:8040/api/testdb/array_test/_stream_load

단계 4: 적재한 데이터 확인​

mysql> SELECT * FROM array_test;
+------+-----------------+
| id | c_array |
+------+-----------------+
| 1 | [1, 2, 3, 4, 5] |
| 2 | [6, 7, 8] |
| 3 | [] |
| 4 | NULL |
+------+-----------------+
4 rows in set (0.01 sec)

JSON 형식 데이터 적재​

단계 1: 데이터 준비​

JSON 파일 test_array.json을 생성합니다. 최상위 구조는 객체로 이루어진 배열입니다:

[
{"id":1, "c_array":[1,2,3,4,5]},
{"id":2, "c_array":[6,7,8]},
{"id":3, "c_array":[]},
{"id":4, "c_array":null}
]

단계 2: 데이터베이스에 테이블 생성​

CREATE TABLE `array_test` (
`id` INT NOT NULL,
`c_array` ARRAY<INT> NULL
)
DUPLICATE KEY(`id`)
DISTRIBUTED BY HASH(`id`) BUCKETS 1
PROPERTIES (
"replication_allocation" = "tag.location.default: 1"
);

단계 3: 데이터 적재​

Stream Load로 데이터를 적재합니다. format을 json으로 설정하고 strip_outer_array:true를 사용하여 최상위 배열을 여러 행으로 나눕니다:

curl --location-trusted \
-u "root":"" \
-H "format:json" \
-H "columns: id, c_array" \
-H "strip_outer_array:true" \
-T "test_array.json" \
http://localhost:8040/api/testdb/array_test/_stream_load

단계 4: 적재한 데이터 확인​

mysql> SELECT * FROM array_test;
+------+-----------------+
| id | c_array |
+------+-----------------+
| 1 | [1, 2, 3, 4, 5] |
| 2 | [6, 7, 8] |
| 3 | [] |
| 4 | NULL |
+------+-----------------+
4 rows in set (0.01 sec)

주요 매개변수 설명​

매개변수적용 형식설명
column_separatorCSV열 구분자입니다. 배열에 쉼표가 포함된 경우 배열 요소 구분자와 충돌하지 않도록 `
columnsCSV / JSON데이터 열과 테이블 열 간의 매핑 순서를 지정합니다
formatJSON입력을 JSON 형식으로 파싱하려면 json으로 설정합니다
strip_outer_arrayJSONtrue로 설정하면 최상위 []를 제거하고 내부의 각 객체를 하나의 행으로 적재합니다

자주 묻는 질문​

배열에 쉼표가 포함되어 있으면 CSV 열 구분자로 쉼표를 사용할 수 없는 이유는 무엇인가요?​

CSV 파일에서 ARRAY는 [1,2,3] 형태로 표현되며, 요소는 쉼표로 구분됩니다. 열 구분자도 쉼표이면 파서가 배열 내부 구분자와 열 구분자를 구별할 수 없어 파싱 오류가 발생합니다. 배열 내용에 나타나지 않는 | 또는 \t 등의 문자를 사용하세요.

NULL 배열과 빈 배열은 어떻게 표현하나요?​

  • NULL 배열: null을 직접 작성하거나(CSV), JSON 리터럴 null을 사용합니다. 적재 후 값은 NULL입니다
  • 빈 배열: []로 작성합니다. 적재 후 값은 []입니다. 두 배열은 의미가 다릅니다

JSON 파일의 최상위 구조가 배열이 아니면 어떻게 하나요?​

파일의 각 줄이 독립적인 JSON 객체(JSON Lines)라면 strip_outer_array를 설정할 필요가 없습니다. 최상위 구조가 [ {...}, {...} ] 형태일 때만 strip_outer_array를 true로 설정해야 합니다.