私の連絡先情報
郵便メール:
2024-07-12
한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina
Hive のテーブル タイプの 1 つであり、テーブル内のデータを複数のサブセット (パーティション) に分割し、各パーティションがテーブル内の特定の列の値に対応することで、クエリのパフォーマンスとデータ管理の効率を向上させることができます。パーティション化されたテーブルの各パーティションは個別のディレクトリに保存され、パーティションはテーブル内の 1 つ以上の列に基づいて定義されます。パーティション テーブルを使用する主な目的は、クエリによってスキャンされるデータの量を削減し、それによってクエリの効率を向上させることです。
過度にパーティション分割すると、多数の小さなファイルが生成され、HDFS のパフォーマンスと MapReduce タスクの効率に影響を与える可能性があります。小さなファイルの結合操作は定期的に実行する必要があります。
- CREATE TABLE customer_data (
- customer_id STRING,
- name STRING,
- age INT,
- email STRING
- )
- PARTITIONED BY (city STRING)
- STORED AS ORC;
-
- select *
- from customer_data;
-
- -- 插入 New York 的数据
- INSERT INTO TABLE customer_data PARTITION (city='New York')
- VALUES
-
- -- 插入 Los Angeles 的数据
- INSERT INTO TABLE customer_data PARTITION (city='Los Angeles')
- VALUES
-
- -- 插入 Chicago 的数据
- INSERT INTO TABLE customer_data PARTITION (city='Chicago')
- VALUES
3 つのパーティションに対応する 3 つのディレクトリが HDFS 上に作成されていることがわかります。クエリに where 条件を指定して select を使用すると、対応するパーティション ディレクトリからデータが直接検索され、クエリによってスキャンされるデータの量が削減され、パフォーマンスが向上します。
SELECT * FROM customer_data WHERE city='New York';
これは、Hive の別のテーブル タイプであり、テーブル内のデータをハッシュ バケット化することにより、特に結合および集計操作を実行する場合のクエリのパフォーマンスをさらに向上させることができます。バケット テーブルはデータを固定数のバケットに分割し、各バケットは別のファイルに保存されます。
-------------------------------------------------- -バケットテーブルの特徴------------------------------------------- -------
データのパーティショニング: 1 つ以上の列のハッシュ値に基づいて、データを固定数のバケットに分散します。
ファイル ストレージ: 各バケットのデータは別のファイルに保存されます。
均一な分散: 理想的には、データがすべてのバケットに均一に分散されるため、クエリのパフォーマンスが向上します。
- CREATE TABLE customer_data2 (
- customer_id STRING,
- name STRING,
- age INT,
- email STRING
- )
- CLUSTERED BY (customer_id) INTO 4 BUCKETS
- STORED AS ORC;
- -- 插入数据到分桶表
- --通过这些步骤,我们创建了一个按 customer_id 列进行分桶的 Hive 表 customer_data,并插入了具体的数据。
- INSERT INTO TABLE customer_data2 VALUES
-
- select *
- from customer_data2;
HDFS 上のパスを見ると、対応する列のハッシュ値に応じてデータが異なるバケットに分割されることがわかります。