hadoop - 명령어 - hive 주석처리



하이브에서 스타 스키마 생성 (1)

Hadoop과 Hive에서 여전히 차원 모델의 이점을 얻을 수 있습니다. 그러나 Hadoop의 일부 기능을 사용하려면 차원 모델링에 대한 표준 접근 방식을 약간 채택해야합니다.

Hadoop File System은 변경 불가능합니다. 데이터를 추가 만하고 업데이트 할 수는 없습니다. 결과적으로 차원 테이블에 레코드를 추가 할 수 있습니다 (하이브가 업데이트 기능을 추가하고 트랜잭션이 다소 버그가있는 것처럼 보임). 천천히 변화하는 Hadoop의 치수가 기본 동작이됩니다. 차원 테이블에서 가장 최신의 최신 레코드를 얻으려면 세 가지 옵션이 있습니다. 먼저 창 함수를 사용하여 최신 레코드를 검색하는 뷰를 만들 수 있습니다. 두 번째로 최신 상태를 다시 만드는 백그라운드에서 실행되는 압축 서비스를 가질 수 있습니다. 셋째, HBase와 두 가지 유형의 저장소 전반에 대한 쿼리를 연합하여 변경 가능한 저장소에 차원 테이블을 저장할 수 있습니다.

데이터가 HDFS를 통해 배포되는 방식은 데이터를 조인하는 데 많은 비용이 듭니다. 분산 관계형 데이터베이스 (MPP)에서 클러스터의 동일한 노드에있는 동일한 기본 키와 외래 키를 사용하여 레코드를 공동 위치시킬 수 있습니다. 이렇게하면 매우 큰 테이블을 조인하는 데 상대적으로 비용이 적게 듭니다. 조인을 수행하기 위해 네트워크를 통해 이동할 필요가 없습니다. 이것은 Hadoop과 HDFS에서 매우 다릅니다. HDFS 테이블은 클러스터에서 큰 덩어리로 분할되어 노드에 분산됩니다. 개인 기록과 키가 클러스터 전체에 퍼져 나가는 방법에 대해서는 어떠한 통제도하지 않습니다. 결과적으로 두 개의 매우 큰 테이블에 대한 Hadoop 조인은 데이터가 네트워크를 통해 이동해야하므로 비용이 많이 듭니다. 가능한 경우 조인을 피해야합니다. 대규모 팩트 및 차원 테이블의 경우 차원 테이블을 팩트 테이블로 직접 표준화 해제 할 수 있습니다. 두 개의 매우 큰 트랜잭션 테이블의 경우, 부모 테이블 내부에 자식 테이블의 레코드를 중첩하고 런타임에 데이터를 평평하게 배치 할 수 있습니다. 우리는 BigQuery / Postgres 등의 array_agg와 같은 SQL 확장을 사용하여 팩트 테이블에서 여러 곡물을 처리 할 수 ​​있습니다

대리 키의 유용성에 대해서도 질문 할 것입니다. 왜 자연 키를 사용하지 않습니까? 어쩌면 복잡한 복합 키의 성능이 문제가 될 수 있지만 대리 키는 실제로 유용하지 않으며 결코 사용하지 않습니다.

필자는 플랫 피드에서 차원 및 팩트 테이블을 생성하는 SQL Datawarehouse에서 왔습니다. 일반적인 데이터웨어 하우스 프로젝트에서 우리는 피드를 사실과 차원으로 나눕니다. 전의:

나는 Hadoop을 완전히 처음 접했고 하이브에 데이터웨어 하우스를 만들 수 있다는 것을 알게되었습니다. 이제 하이브에서 기본 키로 적용 할 수있는 guid 사용에 익숙합니다. 따라서 아래의 전략은 하이브에 사실과 차원을로드하는 올바른 방법입니까?

  1. 소스 데이터를 하이브 테이블에로드합니다. 말하십시오 Sales_Data_Warehouse
  2. sales_data_warehouse에서 차원 생성; 전의:

    SELECT New_Guid (), Customer_Name, Customer_Address from Sales_Data_Warehouse

  3. 모든 차원이 완료되면 팩트 테이블을로드합니다.

    SELECT New_Guid () AS 'Fact_Key', Customer.Customer_Key, Store.Store_Key ... FROM Sales_Data_Warehouse AS '원본'source_Customer_Name = Customer.Customer_Name 및 source.Customer_Address = Customer.Customer_Address의 JOIN Customer_Dimension 고객 JOIN Store_Dimension AS 'Store' ON Store.Store_Name = Source.Store_Name 'Product'ON으로 Product_Dimension에 가입하십시오 .....

이것이 하이브에 내 사실과 차원 테이블을로드해야하는 방법입니까?

또한 일반적인 창고 프로젝트에서 차원 특성 (예 : Customer_Address가 다른 것으로 변경됨)을 업데이트하거나 팩트 테이블 외래 키를 업데이트해야합니다 (드물지만 발생합니다). 그래서 어떻게 하이브에 INSERT-UPDATE로드를 할 수 있습니까? (우리가 TSQL의 SSIS 또는 MERGE 문에서 Lookup을 수행하는 것처럼)?





fact