当前位置:   article > 正文

Hive的分区表&分桶表

Hive的分区表&分桶表

1.分区表:

        是Hive中的一种表类型,通过将表中的数据划分为多个子集(分区),每个分区对应表中的某个特定的列值,可以提高查询性能和管理数据的效率。分区表的每个分区存储在单独的目录中,分区的定义基于表中的一个或多个列。使用分区表的主要目的是减少查询扫描的数据量,从而提高查询效率。

        分区过细可能导致生成大量的小文件,影响HDFS性能和MapReduce任务的效率。需要定期进行小文件合并操作。

  1. CREATE TABLE customer_data (
  2. customer_id STRING,
  3. name STRING,
  4. age INT,
  5. email STRING
  6. )
  7. PARTITIONED BY (city STRING)
  8. STORED AS ORC;
  9. select *
  10. from customer_data;
  11. -- 插入 New York 的数据
  12. INSERT INTO TABLE customer_data PARTITION (city='New York')
  13. VALUES
  14. ('1', 'John Doe', 30, 'john@example.com'),
  15. ('2', 'Jane Smith', 25, 'jane@example.com'),
  16. ('3', 'Bob Johnson', 40, 'bob@example.com');
  17. -- 插入 Los Angeles 的数据
  18. INSERT INTO TABLE customer_data PARTITION (city='Los Angeles')
  19. VALUES
  20. ('4', 'Alice Brown', 32, 'alice@example.com'),
  21. ('5', 'Charlie Davis', 28, 'charlie@example.com');
  22. -- 插入 Chicago 的数据
  23. INSERT INTO TABLE customer_data PARTITION (city='Chicago')
  24. VALUES
  25. ('6', 'Eve White', 45, 'eve@example.com'),
  26. ('7', 'Frank Black', 37, 'frank@example.com');

可以查看到hdfs上创建了三个目录,对应三个分区,使用带有where条件的select进行查询,会直接从对应的分区目录下查找数据,从而减少查询扫描的数据量,提高性能。

SELECT * FROM customer_data WHERE city='New York';

2.分桶表:

        是Hive中的另一种表类型,通过对表中的数据进行散列分桶(hash bucket),可以进一步提高查询性能,尤其是在进行连接(join)和聚合(aggregation)操作时。分桶表将数据划分为固定数量的桶(bucket),每个桶存储在单独的文件中。
---------------------------------------------------分桶表的特点---------------------------------------------------
数据划分:根据一个或多个列的哈希值,将数据分布到固定数量的桶中。
文件存储:每个桶的数据存储在独立的文件中。
均匀分布:理想情况下,数据在所有桶中均匀分布,从而提高查询性能。

  1. CREATE TABLE customer_data2 (
  2. customer_id STRING,
  3. name STRING,
  4. age INT,
  5. email STRING
  6. )
  7. CLUSTERED BY (customer_id) INTO 4 BUCKETS
  8. STORED AS ORC;
  9. -- 插入数据到分桶表
  10. --通过这些步骤,我们创建了一个按 customer_id 列进行分桶的 Hive 表 customer_data,并插入了具体的数据。
  11. INSERT INTO TABLE customer_data2 VALUES
  12. ('1', 'John Doe', 30, 'john@example.com'),
  13. ('2', 'Jane Smith', 25, 'jane@example.com'),
  14. ('3', 'Bob Johnson', 40, 'bob@example.com'),
  15. ('4', 'Alice Brown', 32, 'alice@example.com'),
  16. ('5', 'Charlie Davis', 28, 'charlie@example.com'),
  17. ('6', 'Eve White', 45, 'eve@example.com'),
  18. ('7', 'Frank Black', 37, 'frank@example.com'),
  19. ('8', 'Grace Green', 22, 'grace@example.com');
  20. select *
  21. from customer_data2;

通过查看hdfs上的路径我们可以看到这些数据会按照对应列的hash值分到不同的桶中

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/一键难忘520/article/detail/817128
推荐阅读
相关标签
  

闽ICP备14008679号