「having」句の目的を理解する
このステップでは、Hive における「having」句の基本的な目的と、データのフィルタリングと集約にどのように関連するかを探ります。
Hive における「having」句は、「group by」句と併用されて、指定された条件に基づいてデータのグループをフィルタリングします。これにより、データがグループ化されて集約された後にフィルタを適用することができ、指定された基準を満たさないグループ全体を除外することができます。
以下は、「having」句の使用方法を示す例です。
まず、ターミナルで以下のコマンドを実行して、hadoop
ユーザーとしてログインしてください。
su - hadoop
次に、以下のコマンドを実行して Hive シェルを起動します。
hive
次に、サンプルテーブルを作成します。
CREATE TABLE sales (
product STRING,
category STRING,
sales_amount FLOAT
);
いくつかのサンプルデータを挿入します。
INSERT INTO sales VALUES
('Product A', 'Electronics', 1000.0),
('Product B', 'Electronics', 2000.0),
('Product C', 'Clothing', 500.0),
('Product D', 'Clothing', 1500.0),
('Product E', 'Electronics', 3000.0);
最後に、カテゴリごとの合計売上を計算し、合計売上が 3000 を超えるカテゴリをフィルタリングします。
CREATE TABLE result_1
AS
SELECT category, SUM(sales_amount) AS total_sales
FROM sales
GROUP BY category
HAVING SUM(sales_amount) > 3000;
SELECT * FROM result_1;
この例では、まず、product
、category
、およびsales_amount
の列を持つsales
という名前のテーブルを作成します。次に、いくつかのサンプルデータをテーブルに挿入します。
次に、「group by」句を使用してデータをcategory
でグループ化し、SUM
関数を使用して各カテゴリの合計売上を計算します。そして、「having」句を使用して、total_sales
が 3000 以下であるカテゴリを除外します。
このクエリの出力には、合計売上(2000.0 + 1000.0 + 3000.0 = 6000.0)が 3000 を超えるため、「Electronics」カテゴリのみが含まれます。一方、「Clothing」カテゴリは、合計売上(500.0 + 1500.0 = 2000.0)が「having」句で指定された条件を満たさないため除外されます。