Berbagi teknologi

Tabel partisi sarang

2024-07-12

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

1.Tabel partisi:

Ini adalah tipe tabel di Hive. Dengan membagi data dalam tabel menjadi beberapa subset (partisi), setiap partisi sesuai dengan nilai kolom tertentu dalam tabel, kinerja kueri dan efisiensi manajemen data dapat ditingkatkan. Setiap partisi dari tabel yang dipartisi disimpan dalam direktori terpisah, dan partisi tersebut ditentukan berdasarkan satu atau lebih kolom dalam tabel. Tujuan utama penggunaan tabel terpartisi adalah untuk mengurangi jumlah data yang dipindai oleh kueri, sehingga meningkatkan efisiensi kueri.

Partisi yang berlebihan dapat mengakibatkan pembuatan sejumlah besar file kecil, yang mempengaruhi kinerja HDFS dan efisiensi tugas MapReduce. Operasi penggabungan file kecil perlu dilakukan secara teratur.

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

Anda dapat melihat bahwa tiga direktori telah dibuat di HDFS, sesuai dengan tiga partisi. Menggunakan pilih dengan kondisi di mana untuk melakukan kueri akan langsung menemukan data dari direktori partisi terkait, sehingga mengurangi jumlah data yang dipindai oleh kueri dan meningkatkan kinerja.

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

2. Meja ember:

Ini adalah jenis tabel lain di Hive. Dengan mengelompokkan data dalam tabel, kinerja kueri dapat lebih ditingkatkan, terutama saat melakukan operasi penggabungan dan agregasi. Tabel bucket membagi data ke dalam sejumlah bucket yang tetap, dan setiap bucket disimpan dalam file terpisah.
--------------------------------------------------- -Karakteristik meja ember --------------------------------------------- - -------
Partisi data: Mendistribusikan data ke dalam sejumlah keranjang berdasarkan nilai hash dari satu atau beberapa kolom.
Penyimpanan file: Data setiap keranjang disimpan dalam file terpisah.
Distribusi seragam: Idealnya, data didistribusikan secara merata ke seluruh bucket, sehingga meningkatkan performa kueri.

  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;

Dengan melihat jalur di HDFS, kita dapat melihat bahwa data akan dibagi ke dalam keranjang yang berbeda sesuai dengan nilai hash dari kolom yang bersangkutan.