Обмен технологиями

Таблица разделов улья

2024-07-12

한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina

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, '[email protected]'),
  15. ('2', 'Jane Smith', 25, '[email protected]'),
  16. ('3', 'Bob Johnson', 40, '[email protected]');
  17. -- 插入 Los Angeles 的数据
  18. INSERT INTO TABLE customer_data PARTITION (city='Los Angeles')
  19. VALUES
  20. ('4', 'Alice Brown', 32, '[email protected]'),
  21. ('5', 'Charlie Davis', 28, '[email protected]');
  22. -- 插入 Chicago 的数据
  23. INSERT INTO TABLE customer_data PARTITION (city='Chicago')
  24. VALUES
  25. ('6', 'Eve White', 45, '[email protected]'),
  26. ('7', 'Frank Black', 37, '[email protected]');

Вы можете видеть, что в HDFS были созданы три каталога, соответствующие трем разделам. Использование выбора с условиями запроса позволяет напрямую найти данные из соответствующих каталогов разделов, тем самым уменьшая объем данных, сканируемых запросом, и повышая производительность.

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

2. Ковшовый стол:

Это еще один тип таблицы в Hive. Путем хеширования данных в таблице можно еще больше повысить производительность запросов, особенно при выполнении операций соединения и агрегации. Таблицы группирования делят данные на фиксированное количество сегментов, и каждый сегмент хранится в отдельном файле.
-------------------------------------------------- -Характеристики ковшового стола --------------------------------------------- - -------
Секционирование данных: распределение данных по фиксированному количеству сегментов на основе хеш-значения одного или нескольких столбцов.
Хранение файлов: данные каждого сегмента хранятся в отдельном файле.
Равномерное распределение. В идеале данные равномерно распределяются по всем сегментам, что повышает производительность запросов.

  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, '[email protected]'),
  13. ('2', 'Jane Smith', 25, '[email protected]'),
  14. ('3', 'Bob Johnson', 40, '[email protected]'),
  15. ('4', 'Alice Brown', 32, '[email protected]'),
  16. ('5', 'Charlie Davis', 28, '[email protected]'),
  17. ('6', 'Eve White', 45, '[email protected]'),
  18. ('7', 'Frank Black', 37, '[email protected]'),
  19. ('8', 'Grace Green', 22, '[email protected]');
  20. select *
  21. from customer_data2;

Глядя на путь в HDFS, мы видим, что данные будут разделены на разные сегменты в соответствии с хеш-значением соответствующего столбца.