Compartilhamento de tecnologia

Tabela de partição do Hive

2024-07-12

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

1.Tabela de partição:

É um tipo de tabela no Hive. Ao dividir os dados da tabela em vários subconjuntos (partições), cada partição corresponde a um valor de coluna específico na tabela, o desempenho da consulta e a eficiência do gerenciamento de dados podem ser melhorados. Cada partição de uma tabela particionada é armazenada em um diretório separado e a partição é definida com base em uma ou mais colunas da tabela. O principal objetivo do uso de tabelas particionadas é reduzir a quantidade de dados verificados pelas consultas, melhorando assim a eficiência das consultas.

O particionamento excessivo pode resultar na geração de um grande número de arquivos pequenos, afetando o desempenho do HDFS e a eficiência das tarefas do MapReduce. Pequenas operações de mesclagem de arquivos precisam ser executadas regularmente.

  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]');

Você pode ver que três diretórios foram criados no HDFS, correspondendo a três partições. Usar select com condições where para consultar encontrará dados diretamente dos diretórios de partição correspondentes, reduzindo assim a quantidade de dados verificados pela consulta e melhorando o desempenho.

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

2. Mesa de balde:

É outro tipo de tabela no Hive. Ao agrupar os dados na tabela com hash, o desempenho da consulta pode ser melhorado ainda mais, especialmente ao executar operações de junção e agregação. As tabelas de buckets dividem os dados em um número fixo de buckets, e cada bucket é armazenado em um arquivo separado.
-------------------------------------------------- -Características da mesa de balde --------------------------------------------- - -------
Particionamento de dados: Distribua os dados em um número fixo de buckets com base no valor hash de uma ou mais colunas.
Armazenamento de arquivos: os dados de cada bucket são armazenados em um arquivo separado.
Distribuição uniforme: idealmente, os dados são distribuídos uniformemente em todos os buckets, melhorando assim o desempenho da consulta.

  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;

Observando o caminho no HDFS, podemos ver que os dados serão divididos em diferentes buckets de acordo com o valor hash da coluna correspondente.