데이터셋 스키마 자료형
데이터셋 스키마는 열의 이름, 자료형, null 허용 여부와 중첩 구조를 정의합니다. 해당 데이터셋에 업로드하는 파일은 이 스키마와 맞아야 합니다. 스키마를 읽는 작업은 데이터셋 RID, 브랜치, 끝 트랜잭션과 스키마 버전으로 조회 대상을 식별합니다.
조회 응답
GetDatasetSchemaResponse의 필드는 모두 필수입니다.
| 필드 | 자료형 | 의미 |
|---|---|---|
branchName | string | 스키마가 속한 브랜치 이름. 예: master |
endTransactionRid | string | 응답이 가리키는 끝 트랜잭션 RID |
schema | object | 데이터셋 스키마 |
versionId | string | 스키마 버전 식별자. 예: 0000000d-2acf-537c-a228-3a9fe3cdc523 |
schema 안의 fieldSchemaList는 선택적인 list<DatasetFieldSchema>이며 각 열 정의를 담습니다.
DatasetFieldSchema
| 필드 | 자료형 | 필수 여부 | 의미와 조건 |
|---|---|---|---|
type | enum | 필수 | 아래의 데이터셋 열 유형 중 하나 |
name | string | 선택 | 열 이름. 중첩 스키마 객체에는 이름이 없을 수 있음 |
nullable | boolean | 필수 | 이 필드의 값에 null을 허용하는지 여부 |
userDefinedTypeClass | string | 선택 | 사용자 정의 유형의 정규 클래스 이름. Spark UserDefinedType의 하위 클래스여야 함 |
customMetadata | map<string, any> | 선택 | 열 설명, Foundry 웹 archetype 등 사용자 메타데이터 |
arraySubtype | DatasetFieldSchema object | 선택 | type이 ARRAY일 때만 사용. 배열 원소의 스키마 |
precision | integer | 선택 | type이 DECIMAL일 때만 사용 |
scale | integer | 선택 | type이 DECIMAL일 때만 사용 |
mapKeyType | DatasetFieldSchema object | 선택 | type이 MAP일 때만 사용. 키의 스키마 |
mapValueType | DatasetFieldSchema object | 선택 | type이 MAP일 때만 사용. 값의 스키마 |
subSchemas | list<DatasetFieldSchema> | 선택 | type이 STRUCT일 때만 사용. 하위 필드 정의 |
nullable의 필수 여부는 필드 정의에 이 불리언을 넣어야 한다는 의미입니다. 그 값이 false이면 데이터의 해당 열에 null을 허용하지 않습니다.
열 유형
type의 허용 값은 다음과 같습니다.
ARRAY, BINARY, BOOLEAN, BYTE, DATE, DECIMAL, DOUBLE, FLOAT,
INTEGER, LONG, MAP, SHORT, STRING, STRUCT, TIMESTAMP
배열, 맵과 구조체는 같은 필드 정의를 안쪽에서 다시 사용합니다. 예를 들어 문자열 원소를 가진 배열에는 이름 없이 type과 nullable을 가진 arraySubtype을 넣습니다.
스키마 예시
다음은 기본 키 열, 이벤트 시각, 소수, 문자열 배열과 두 수치 필드를 가진 구조체를 정의한 가상 스키마입니다. customMetadata.description은 열에 붙인 설명입니다.
{
"fieldSchemaList": [
{
"name": "id",
"type": "LONG",
"nullable": false,
"customMetadata": {"description": "Primary key"}
},
{"name": "event_time", "type": "TIMESTAMP", "nullable": false},
{"name": "price", "type": "DECIMAL", "precision": 10, "scale": 2, "nullable": true},
{
"name": "tags",
"type": "ARRAY",
"nullable": true,
"arraySubtype": {"type": "STRING", "nullable": false}
},
{
"name": "metrics",
"type": "STRUCT",
"nullable": true,
"subSchemas": [
{"name": "temperature", "type": "DOUBLE", "nullable": true},
{"name": "humidity", "type": "DOUBLE", "nullable": true}
]
}
]
}
스키마를 추가할 때의 dataframeReader는 AVRO, CSV, PARQUET, DATASOURCE 중 하나이며 기본값은 PARQUET입니다. 이 값은 열의 type과 별개로 데이터셋을 읽는 리더를 지정합니다.