2016-06-05 1 views
12

현재 우리는 생산에 Avro 데이터 형식을 사용하고 있습니다. Avro의 N 개의 좋은 점에서 스키마 진화가 잘된다는 것을 알고 있습니다.마루판 형식의 스키마 진화

이제는 임의의 열을 읽는 동안 효율이 좋기 때문에 쪽모실 형식을 평가 중입니다. 앞으로 이동하기 전에 우리의 관심은 스키마 변화입니다!

스키마 진화가 가능하다면 누구나 알 수 있습니까 , 이유입니다. 일부 presentation은 가능하지만 끝에 열을 추가 할 수 있음

이게 무슨 의미입니까?

감사합니다, ~ 초급 개발자

+1

예, 가능합니다. 예를 들어 [Spark docs] (https://spark.apache.org/docs/latest/sql-programming-guide.html#schema-merging) – zero323

+1

을 참조하십시오.하지만 필드를 삭제하지 않고 새 필드를 추가하는 것으로 나타납니다. – ToBeSparkShark

답변

15

스키마 진화 할 수있는 수 (매우) 비용은 기본적으로 모든 마루 파일과 reconsile을 읽을 필요 스키마를 파악하기 때문에,/따라 비용이 많이들 수 있습니다 읽기시의 스키마를 병합 얼마나 많은 파일/얼마나 많은 데이터 세트의 열.

그래서 Spark 1.5에서는 스키마 변경을 기본적으로 해제했지만 (기본적으로 다시 전환 할 수 있음). http://spark.apache.org/docs/latest/sql-programming-guide.html는 :

스키마 병합은 상대적으로 비용이 많이 드는 작업이며, 대부분의 경우 필요하지 않기 때문에, 우리는 1.5.0부터 기본적으로 꺼져.

스키마 진화가 없으면 하나의 마루 파일에서 스키마를 읽을 수 있으며 나머지 파일을 읽는 동안 동일하게 유지된다고 가정합니다.

여기 엔 나무 마루 스키마 진화는 구현에 따라 다릅니다. 예를 들어

하이브는 노브 당신이 열 이름으로보다는 열 인덱스 스키마를 매핑 할 설정할 수

거짓

parquet.column.index.access을 =이있다. 그러면 단순히 열뿐만 아니라 열을 삭제할 수 있습니다. http://community.cloudera.com/t5/Interactive-Short-cycle-SQL/external-table-stored-as-parquet-can-not-use-field-inside-a/m-p/36012

스파크 버전 2.0.2 기준으로는 여전히 보인다

나는 그것이 예를 들어, 임팔라가 제대로 같은 마루 테이블을 읽을 것, 구현에 의존 (최근 임팔라 2.6 릴리스에서 수정), 말했듯 지원 추가 열 : http://spark.apache.org/docs/latest/sql-programming-guide.html#schema-merging

사용자는 간단한 스키마를 시작하고 점차적으로 필요에 따라 스키마에 더 많은 열을 을 추가 할 수 있습니다. 이러한 방식으로 서로 다른 상호 호환이 가능한 스키마를 가진 여러 가지 모양의 파킹 파일로 사용자가 끝날 수도 있습니다. 쪽모이 세공 데이터 소스는 이제이 사례를 자동으로 감지하고 모든 파일의 스키마를 병합 할 수 있습니다.

ps. 필자는 스키마 변경에보다 민첩하게 대응하는 사람들을 보았을 때 두 가지 (또는 그 이상) 다른 호환 스키마를 하나의 공통 스키마에 매핑하는 실제 마루 테이블 위에 뷰를 작성한다는 점을 보았습니다. 당신이 아이디어를 가지고

CREATE VIEW datamart.unified_fact_vw 
AS 
SELECT f1..., NULL as registration_date 
FROM datamart.unified_fact_schema1 f1 
UNION ALL 
SELECT f2..., NULL as last_login_date 
FROM datamart.unified_fact_schema2 f2 
; 

.. 좋은 점은이 같은에서 작동합니다 :의 당신이 하나 개의 새로운 필드 (registration_date)을 추가하고 새 릴리스에서 다른 열 (last_login_date를) 떨어졌다 가정 해 봅시다, 다음이 같을 것이다 (위의 하이브, 임팔라 및 스파크에 언급 된 것처럼) 하둡 방언에있는 모든 SQL은 여전히 ​​파켓 테이블 (기둥 저장소, 조건부 푸시 다운 등)의 모든 이점을 가지고 있습니다.