복붙노트

[HADOOP] 둘 이상의 열에 의해 클러스터 된

HADOOP

둘 이상의 열에 의해 클러스터 된

하이브 테이블이 하나의 열에 의해 클러스터 된 경우 해당 버킷 열의 해시 기능을 수행 한 다음 해당 데이터 행을 버킷 중 하나에 넣습니다. 그리고 각 버킷에 대한 파일이 있습니다. 즉, 32 개의 버킷이 있으면 hdfs에 32 개의 파일이 있습니다.

둘 이상의 열에 의해 클러스터된다는 것은 무엇을 의미합니까? 예를 들어, 테이블에 32 개의 BUCKETS에 CLUSTERED BY (대륙, 국가)가 있다고 가정하십시오.

열이 둘 이상인 경우 해시 함수는 어떻게 수행됩니까?

몇 개의 파일이 생성됩니까? 아직도 32입니까?

해결법

  1. ==============================

    1.그것이 도움이되기를 바랍니다!

    그것이 도움이되기를 바랍니다!

  2. ==============================

    2.일반적으로 버킷 번호는 hash_function (bucketing_column) mod num_buckets 식으로 결정됩니다. ( '0x7FFFFFFF도 거기에 있지만 그렇게 중요하지는 않습니다). hash_function은 버킷 팅 열의 유형에 따라 다릅니다. int의 경우 hash_int (i) == i는 쉽습니다. 예를 들어 user_id가 int이고 10 개의 버킷이있는 경우 0으로 끝나는 모든 user_id는 버킷 1에 있고 1로 끝나는 모든 user_id는 버킷 2에있을 것으로 예상됩니다. 다른 데이터 유형의 경우 조금 까다로운. 특히 BIGINT의 해시는 BIGINT와 동일하지 않습니다. 그리고 문자열이나 복잡한 데이터 유형의 해시는 값에서 파생 된 숫자이지만 사람이 인식 할 수있는 것은 아닙니다. 예를 들어, user_id가 STRING 인 경우 버킷 1의 user_id는 0으로 끝나지 않을 것입니다. 일반적으로 해시를 기반으로 행을 분산하면 버킷에 균일하게 분산됩니다.

    일반적으로 버킷 번호는 hash_function (bucketing_column) mod num_buckets 식으로 결정됩니다. ( '0x7FFFFFFF도 거기에 있지만 그렇게 중요하지는 않습니다). hash_function은 버킷 팅 열의 유형에 따라 다릅니다. int의 경우 hash_int (i) == i는 쉽습니다. 예를 들어 user_id가 int이고 10 개의 버킷이있는 경우 0으로 끝나는 모든 user_id는 버킷 1에 있고 1로 끝나는 모든 user_id는 버킷 2에있을 것으로 예상됩니다. 다른 데이터 유형의 경우 조금 까다로운. 특히 BIGINT의 해시는 BIGINT와 동일하지 않습니다. 그리고 문자열이나 복잡한 데이터 유형의 해시는 값에서 파생 된 숫자이지만 사람이 인식 할 수있는 것은 아닙니다. 예를 들어, user_id가 STRING 인 경우 버킷 1의 user_id는 0으로 끝나지 않을 것입니다. 일반적으로 해시를 기반으로 행을 분산하면 버킷에 균일하게 분산됩니다.

    참조 : https://cwiki.apache.org/confluence/display/Hive/LanguageManual+DDL+BucketedTables

  3. from https://stackoverflow.com/questions/30871354/hive-clustered-by-on-more-than-one-column by cc-by-sa and MIT license