Руководство по мастерству размерностей в Hadoop

HadoopBeginner
Практиковаться сейчас

Введение

В мире, где границы между измерениями рассеиваются, в тканях реальности появился разрыв, позволивший проникнуть сюда внеземной существо. Это существо, называемое Кристаллическим Предвестником, является чувствующимся существом, состоящее из чистой энергии, его форма меняется и мерцает, подобно калейдоскопу света.

Целью Кристаллического Предвестника является овладеть силой данных, чтобы重塑ть самой ткань бытия. Для этого он стремится овладеть сложностями Hadoop, мощной платформы для обработки больших данных. Однако понимание Hadoop у Предвестника неполноценно, и ему нужна помощь, чтобы раскрыть все возможности предложения "having" в Hive, компоненте для хранения данных в Hadoop.

Ваша миссия, если вы решите принять ее, - помочь Кристаллическому Предвестнику пройти серию шагов, раскрыть секреты предложения "having" и позволить ему использовать силу данных способами, которые никто раньше не мог себе представить.

Понять назначение предложения 'having'

В этом шаге мы исследуем основное назначение предложения "having" в Hive и то, как оно связано с фильтрацией и агрегацией данных.

Предложение "having" в Hive используется совместно с предложением "group by" для фильтрации групп данных по заданному условию. Это позволяет применить фильтр после того, как данные были сгруппированы и агрегированы, и позволяет отфильтровать целые группы, которые не соответствуют заданным критериям.

Вот пример, демонстрирующий использование предложения "having":

Во - первых, убедитесь, что вы вошли под пользователем hadoop, выполнив следующую команду в терминале:

su - hadoop

Затем запустите Hive - shell, выполнив следующую команду:

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;

В этом примере мы сначала создаем таблицу sales с колонками product, category и sales_amount. Затем мы вставляем несколько примеров данных в таблицу.

Далее мы используем предложение "group by" для группировки данных по category, и функцию SUM для вычисления общего объема продаж для каждой категории. Затем предложение "having" используется для отфильтрации категорий, где total_sales меньше или равно 3000.

Результат этого запроса будет включать только категорию "Electronics", так как ее общие продажи (2000.0 + 1000.0 + 3000.0 = 6000.0) превышают 3000, в то время как категория "Clothing" будет исключена, потому что ее общие продажи (500.0 + 1500.0 = 2000.0) не соответствуют условию, заданному в предложении "having".

Фильтрация групп на основе нескольких условий

Хотя предыдущий шаг показал базовое использование предложения "having", Hive также позволяет фильтровать группы по нескольким условиям с использованием логических операторов, таких как AND и OR.

Вот пример, демонстрирующий, как использовать несколько условий в предложении "having":

Вычислите общие продажи по продукту и категории и отфильтруйте продукты с общим объемом продаж более 2000 и принадлежащие к категории 'Electronics':

CREATE TABLE result_2
AS
SELECT product, category, SUM(sales_amount) AS total_sales
FROM sales
GROUP BY product, category
HAVING SUM(sales_amount) > 2000 AND category = 'Electronics';

SELECT * FROM result_2;

В этом примере мы группируем данные по product и category и вычисляем общие продажи для каждой комбинации product и category. Затем предложение "having" используется для отфильтрации групп, где total_sales меньше или равно 2000, и category не равна "Electronics".

Результат этого запроса будет включать только продукты, принадлежащие к категории "Electronics" с общим объемом продаж более 2000, такие как "Product B" и "Product E".

Вы также можете использовать оператор OR для комбинирования нескольких условий в предложении "having":

Вычислите общие продажи по продукту и категории и отфильтруйте продукты с общим объемом продаж более 2000 или принадлежащие к категории 'Clothing':

SELECT product, category, SUM(sales_amount) AS total_sales
FROM sales
GROUP BY product, category
HAVING SUM(sales_amount) > 2000 OR category = 'Clothing';

Этот запрос будет включать все продукты с общим объемом продаж более 2000, независимо от их категории, а также все продукты, принадлежащие к категории "Clothing", независимо от их общего объема продаж.

Использовать агрегатные функции в предложении 'having'

Предложение "having" также можно использовать совместно с агрегатными функциями, такими как COUNT, MAX, MIN и AVG. Это позволяет фильтровать группы на основе условий, связанных с этими агрегатными функциями.

Вот пример, демонстрирующий использование функции COUNT в предложении "having":

Вычислите количество продуктов в каждой категории и отфильтруйте категории, в которых более 2 продуктов:

CREATE TABLE result_3
AS
SELECT category, COUNT(product) AS product_count
FROM sales
GROUP BY category
HAVING COUNT(product) > 2;

SELECT * FROM result_3;

В этом примере мы используем функцию COUNT для подсчета количества продуктов в каждой category. Затем предложение "having" используется для отфильтрации категорий, где product_count меньше или равно 2.

Результат этого запроса будет включать только те категории, которые имеют более 2 продуктов, связанных с ними.

Вы также можете комбинировать агрегатные функции с другими условиями в предложении "having":

Вычислите максимальную сумму продаж для каждой категории и отфильтруйте категории с максимальными продажами более 2000 и более 2 продуктов:

SELECT category, MAX(sales_amount) AS max_sales, COUNT(product) AS product_count
FROM sales
GROUP BY category
HAVING MAX(sales_amount) > 2000 AND COUNT(product) > 2;

Этот запрос вычисляет максимальную сумму продаж (max_sales) и количество продуктов (product_count) для каждой категории. Предложение "having" фильтрует категории, где max_sales меньше или равно 2000, или product_count меньше или равно 2.

Объединить предложения 'where' и 'having'

Предложения "where" и "having" в запросах Hive служат разным целям. Предложение "where" используется для фильтрации отдельных строк до группировки и агрегации данных, в то время как предложение "having" используется для фильтрации групп данных после их группировки и агрегации.

В некоторых случаях вам может потребоваться объединить оба предложения в одном запросе, чтобы добиться нужного поведения фильтрации. Вот пример, демонстрирующий, как объединить предложения "where" и "having":

Вычислите общие продажи по категории, отфильтруйте продукты с суммой продаж более 1000 и отфильтруйте категории с общим объемом продаж более 3000:

CREATE TABLE result_4
AS
SELECT category, SUM(sales_amount) AS total_sales
FROM sales
WHERE sales_amount > 1000
GROUP BY category
HAVING SUM(sales_amount) > 3000;

SELECT * FROM result_4;

В этом примере мы сначала используем предложение "where" для отфильтрации отдельных строк, где sales_amount меньше или равно 1000. Это означает, что только продукты с суммой продаж более 1000 будут учтены при последующей группировке и агрегации.

Далее мы группируем отфильтрованные данные по category и вычисляем общие продажи для каждой категории с использованием функции SUM. Наконец, предложение "having" используется для отфильтрации категорий, где total_sales меньше или равно 3000.

Результат этого запроса будет включать только те категории с общим объемом продаж более 3000, вычисленные из продуктов с суммой продаж более 1000.

Резюме

В этом практическом занятии мы провели путешествие, чтобы показать Кристоаллическую Предвестницу сложности предложения "having" в Hive. Освоив эту мощную функцию, Предвестница теперь может фильтровать и анализировать данные с небы前所未有的精度,揭开多元宇宙海量数据宝库的秘密。

通过一系列步骤,我们探索了“having”子句的基本用途,展示了它根据指定条件过滤数据组的能力。然后我们深入研究,学习如何使用逻辑运算符应用多个条件,在“having”子句中利用聚合函数,以及为复杂的数据过滤场景组合“where”和“having”子句。

在整个这个实验中,水晶先知获得了宝贵的知识和技能,使它能够发挥 Hadoop 的真正潜力,并通过数据分析的力量重塑存在的结构。每走一步,我们都开启了新的可能性,使先知能够以前所未有的精度和控制在广阔的数据领域中导航。