AVRO-스키마
스키마 기반 직렬화 유틸리티 인 Avro는 스키마를 입력으로 받아들입니다. 다양한 스키마를 사용할 수 있지만 Avro는 스키마 정의에 대한 자체 표준을 따릅니다. 이 스키마는 다음 세부 정보를 설명합니다-
- 파일 유형 (기본적으로 기록)
- 기록 위치
- 기록의 이름
- 해당 데이터 유형이있는 레코드의 필드
이러한 스키마를 사용하면 더 적은 공간을 사용하여 직렬화 된 값을 이진 형식으로 저장할 수 있습니다. 이러한 값은 메타 데이터없이 저장됩니다.
Avro 스키마 생성
Avro 스키마는 경량 텍스트 기반 데이터 교환 형식 인 JSON (JavaScript Object Notation) 문서 형식으로 생성됩니다. 다음 방법 중 하나로 생성됩니다.
- JSON 문자열
- JSON 객체
- JSON 배열
Example − 다음 예제는 이름 공간 Tutorialspoint 아래에 이름이 Employee이고 필드 이름과 나이가있는 문서를 정의하는 스키마를 보여줍니다.
{
"type" : "record",
"namespace" : "Tutorialspoint",
"name" : "Employee",
"fields" : [
{ "name" : "Name" , "type" : "string" },
{ "name" : "Age" , "type" : "int" }
]
}
이 예에서는 각 레코드에 대해 4 개의 필드가 있음을 알 수 있습니다.
type −이 필드는 필드라는 필드 아래뿐만 아니라 문서 아래에도 있습니다.
문서의 경우 여러 필드가 있으므로 일반적으로 레코드 인 문서의 유형을 표시합니다.
필드 인 경우 유형은 데이터 유형을 설명합니다.
namespace −이 필드는 객체가있는 네임 스페이스의 이름을 설명합니다.
name −이 필드는 필드라는 필드 아래뿐만 아니라 문서 아래에도 있습니다.
문서의 경우 스키마 이름을 설명합니다. 네임 스페이스와 함께이 스키마 이름은 저장소 내에서 스키마를 고유하게 식별합니다 (Namespace.schema name). 위의 예에서 스키마의 전체 이름은 Tutorialspoint.Employee입니다.
필드의 경우 필드의 이름을 설명합니다.
Avro의 원시 데이터 유형
Avro 스키마에는 기본 데이터 유형과 복잡한 데이터 유형이 있습니다. 다음 표는primitive data types of Avro −
데이터 형식 | 기술 |
---|---|
없는 | Null은 값이없는 유형입니다. |
int | 32 비트 부호있는 정수. |
긴 | 64 비트 부호있는 정수. |
흙손 | 단 정밀도 (32 비트) IEEE 754 부동 소수점 숫자. |
더블 | 배정 밀도 (64 비트) IEEE 754 부동 소수점 숫자. |
바이트 | 8 비트 부호없는 바이트 시퀀스. |
끈 | 유니 코드 문자 시퀀스. |
Avro의 복잡한 데이터 유형
기본 데이터 유형과 함께 Avro는 레코드, 열거 형, 배열, 맵, 공용체 및 고정이라는 6 개의 복잡한 데이터 유형을 제공합니다.
기록
Avro의 레코드 데이터 유형은 여러 속성의 모음입니다. 다음 속성을 지원합니다-
name −이 필드의 값은 레코드의 이름을 보유합니다.
namespace −이 필드의 값은 객체가 저장된 네임 스페이스의 이름을 보유합니다.
type −이 속성의 값은 문서 유형 (레코드) 또는 스키마에있는 필드의 데이터 유형을 보유합니다.
fields −이 필드에는 스키마의 모든 필드 목록이있는 JSON 배열이 있으며, 각 필드에는 이름과 유형 속성이 있습니다.
Example
다음은 레코드의 예입니다.
{
" type " : "record",
" namespace " : "Tutorialspoint",
" name " : "Employee",
" fields " : [
{ "name" : " Name" , "type" : "string" },
{ "name" : "age" , "type" : "int" }
]
}
열거 형
열거는 컬렉션의 항목 목록이며, Avro 열거는 다음 속성을 지원합니다.
name −이 필드의 값은 열거의 이름을 포함합니다.
namespace −이 필드의 값은 열거의 이름을 규정하는 문자열을 포함합니다.
symbols −이 필드의 값은 열거 형의 기호를 이름 배열로 유지합니다.
Example
다음은 열거의 예입니다.
{
"type" : "enum",
"name" : "Numbers",
"namespace": "data",
"symbols" : [ "ONE", "TWO", "THREE", "FOUR" ]
}
배열
이 데이터 유형은 단일 속성 항목이있는 배열 필드를 정의합니다. 이 항목 속성은 배열의 항목 유형을 지정합니다.
Example
{ " type " : " array ", " items " : " int " }
지도
지도 데이터 유형은 키-값 쌍의 배열이며 데이터를 키-값 쌍으로 구성합니다. Avro지도의 키는 문자열이어야합니다. 맵의 값은 맵 컨텐츠의 데이터 유형을 보유합니다.
Example
{"type" : "map", "values" : "int"}
연합
통합 데이터 유형은 필드에 하나 이상의 데이터 유형이있을 때마다 사용됩니다. JSON 배열로 표시됩니다. 예를 들어 필드가 int 또는 null 일 수있는 경우 공용체는 [ "int", "null"]로 표시됩니다.
Example
다음은 공용체를 사용하는 예제 문서입니다.
{
"type" : "record",
"namespace" : "tutorialspoint",
"name" : "empdetails ",
"fields" :
[
{ "name" : "experience", "type": ["int", "null"] }, { "name" : "age", "type": "int" }
]
}
결정된
이 데이터 유형은 이진 데이터를 저장하는 데 사용할 수있는 고정 크기 필드를 선언하는 데 사용됩니다. 속성으로 필드 이름과 데이터가 있습니다. Name은 필드의 이름을 보유하고 size는 필드의 크기를 보유합니다.
Example
{ "type" : "fixed" , "name" : "bdata", "size" : 1048576}