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}