2016-09-02 4 views
0

다음 사실을 고려하여 하이브/임팔라 테이블을 효율적으로 디자인하는 방법은 무엇입니까?Hadoop 파티셔닝. Hive/Impala 테이블을 효율적으로 디자인하는 방법은 무엇입니까?

  1. 이 테이블은 일마다 약 1 억 개의 행에 대한 도구 데이터를받습니다. 데이터를 수신 한 날짜는 도구 ID와 함께 테이블 의 열에 저장됩니다.
  2. 각 도구는 열 실행 ID로 식별되는 하루에 약 500 실행을받습니다. 각 실행 ID 에는 대략 1MB 크기의 데이터가 들어 있습니다.
  3. 블록의 기본 크기는 64MB입니다.
  4. 날짜, 공구 ID 및 실행 ID 순으로 테이블을 검색 할 수 있습니다.
+1

지금까지 고려한 사항은 무엇입니까? – dg99

+0

[환영합니다!] (http://stackoverflow.com/help/how-to-ask) 결과를 업데이트하십시오. 그렇지 않으면 질문이 너무 광범위 해집니다! –

답변

0

이 데이터에 대해 분석을 수행하는 경우 Impala의 견고한 선택은 쪽모이 세공 형식을 사용합니다. 우리 사용자들에게 효과적이었던 것은 레코드의 날짜 값을 기준으로 연, 월, 일을 분할하는 것입니다.

그래서 예를 들어 마루로 저장 파티션 (년 INT, 월 INT, 일 int)를 표 foo는 (tool_id의 INT, eff_dt 타임 스탬프를) CREATE

우리가 동적 만들려면이 같은 것을 사용이 테이블에 데이터를로드 파티션 :

INSERT INTO foo partition (year, month, day) 
SELECT tool_id, eff_dt, year(eff_dt), month(eff_dt), day(eff_dt) 
FROM source_table; 

그런 다음 당신은 당신의 사용자를 교육하는 그들이 더 나은 성능을 위해 파티션을 명중 있도록 최적의 성능을 자신의 WHERE 절에 년, 월, 일을 추가합니다. 그런 다음 을 SELECT 문에 추가하게하여 최종 결과에서 볼 수있는 형식으로 날짜 값을 갖도록합니다.

CDH에서는 Parquet이 기본적으로 256MB의 청크로 데이터를 저장합니다 (구성 가능). 구성 방법은 다음과 같습니다. http://www.cloudera.com/documentation/enterprise/latest/topics/impala_parquet_file_size.html