Condivisione della tecnologia

Tabella delle partizioni Hive

2024-07-12

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

1.Tabella delle partizioni:

È un tipo di tabella in Hive. Dividendo i dati nella tabella in più sottoinsiemi (partizioni), ciascuna partizione corrisponde a un valore di colonna specifico nella tabella, è possibile migliorare le prestazioni delle query e l'efficienza della gestione dei dati. Ogni partizione di una tabella partizionata viene archiviata in una directory separata e la partizione viene definita in base a una o più colonne nella tabella. Lo scopo principale dell'utilizzo delle tabelle partizionate è ridurre la quantità di dati analizzati dalle query, migliorando così l'efficienza delle query.

Un partizionamento eccessivo può comportare la generazione di un numero elevato di file di piccole dimensioni, influenzando le prestazioni HDFS e l'efficienza delle attività MapReduce. Le operazioni di fusione di piccoli file devono essere eseguite regolarmente.

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

Puoi vedere che sono state create tre directory su HDFS, corrispondenti a tre partizioni. Utilizzando select con le condizioni su cui interrogare verranno trovati direttamente i dati dalle directory della partizione corrispondente, riducendo così la quantità di dati scansionati dalla query e migliorando le prestazioni.

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

2. Tabella dei secchi:

È un altro tipo di tabella in Hive Eseguendo l'hash bucket dei dati nella tabella, le prestazioni delle query possono essere ulteriormente migliorate, soprattutto durante l'esecuzione di operazioni di unione e aggregazione. Le tabelle di bucket dividono i dati in un numero fisso di bucket e ciascun bucket viene archiviato in un file separato.
-------------------------------------------------- -Caratteristiche della tabella bucket---------------------------------------------------- - -------
Partizionamento dei dati: distribuisci i dati in un numero fisso di bucket in base al valore hash di una o più colonne.
Archiviazione file: i dati di ciascun bucket vengono archiviati in un file separato.
Distribuzione uniforme: idealmente, i dati vengono distribuiti uniformemente su tutti i bucket, migliorando così le prestazioni delle query.

  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;

Osservando il percorso su HDFS, possiamo vedere che i dati verranno suddivisi in diversi bucket in base al valore hash della colonna corrispondente.