ПУТЕШЕСТВИЕ ПО РАЗРАБОТКЕ ПРОГРАММНОГО ОБЕСПЕЧЕНИЯ

5 лучших примеров обработки больших данных в Apache Beam

От примеров SQL к Java-коду Apache Beam

Обзор

Среди инженеров-программистов очень популярен язык SQL, который используется для запроса данных из нашей серверной базы данных для приложения. В этой статье я хотел бы рассказать, как научиться обрабатывать большие данные с помощью SQL, поделившись популярной обработкой данных. Я думаю, что многие люди с опытом работы с SQL могут легко узнать об обработке больших данных с помощью Apache Beam, вы можете просмотреть эти темы об Apache, чтобы получить базовые знания, прежде чем читать эту статью, если это необходимо:

Сценарий и образец набора данных

Мы представляем, что нам нужна база данных, которая охватывает ключевые области малого бизнеса. База данных содержит две таблицы, которые могут помочь нам управлять товаром в нашем магазине. Разобьем их на структурированные таблицы:

Таблица товаров: таблица, в которой собрана вся информация о ваших товарах, например. ProductId, ProductName, ProductTypeId, Цена

Таблица ProductType: в этой таблице будут храниться те категории, которые нужны продукту, например. ProductTypeId, ProductTypeName

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

Изучение больших данных на примерах SQL

Теперь мы будем использовать некоторые темы SQL, чтобы преобразовать их в Apache Beam, внедрив кодирование.

Давайте посмотрим с точки зрения концепции SQL, есть некоторые популярные темы SQL, с которыми мы постоянно работали, или, может быть, мы работали над ними время от времени:

# 1 Группировать по сумме (или любым функциям агрегации)

Оператор GROUP BY используется для группировки идентичных данных в строки с одинаковыми значениями. Оператор GROUP BY часто используется с агрегатными функциями, например. COUNT(), MAX(), SUM(), AVG() и т. д.

Теперь мы сделаем пример, чтобы применить запрос GROUP BY как в SQL, так и в Apache Beam. Посмотрим, в полученной таблице товаров много записей, в некоторых из них есть столбец ProductTypeId с одинаковым значением, но также есть записи с другим значением. Мы решим использовать столбец ProductTypeId для заполнения групповых строк по этому столбцу. Теперь снова мы хотим получить общую сумму цены продукта для каждого типа продукта, мы можем использовать агрегатную функцию SUM() для суммирования каждого. Например:

SQL:

Луч Апача:

# 2 Выберите и где

Оператор SELECT используется для выбора определенных столбцов из таблицы, он возвращает результирующую таблицу, называемую результирующим набором.

Наряду с оператором SELECT мы также используем предложение WHERE для фильтрации записей. Он используется для извлечения только тех записей, которые удовлетворяют заданному условию.

В этом примере мы будем использовать оператор SELECT для извлечения данных из таблицы продуктов, а затем использовать предложение WHERE для поиска любых продуктов, которые начинаются с «риса» в любой позиции столбца ProductName. См. пример ниже:

SQL:

Луч Апача:

Пример 1:

Пример 2:

#3 Присоединяйтесь

Существует множество подходов к объединению с Apache Beam. Вы можете прочитать эту статью, которую я написал 3 обязательных подхода к объединению наборов данных в Apache Beam.

#4 Объединение и удаление дубликатов

В SQL мы используем операторы объединения, если у нас есть несколько таблиц с одинаковыми столбцами, и мы хотим объединить результаты двух или более команд выбора, выполненных для столбцов из разных таблиц.

Apache Beam предлагает класс Flatten, аналогичный оператору Union в SQL, поэтому Flatten может объединять несколько объектов PCollection в один логический PCollection.

На самом деле у нас есть две таблицы продуктов с множеством записей:

Теперь предположим, что мы хотим объединить их в единые данные, поэтому удобным решением является заполнение двух коллекций продуктов, создание на их основе PCollectionList, а также Flatten. И кроме того, как вы можете видеть из приведенных выше данных, мы получили дублирование многих записей из обеих таблиц, поэтому, чтобы предотвратить дублирование, нам нужно удалить и просто взять только запись, которая представляет в таблице продукт 2, в случае, если обе таблицы имеют дубликаты записей. Вот пример того, как мы это решаем:

SQL:

Луч Апача

# 5 Разделите данные на 2 выхода:

Чтобы разделить продукты на 2 вывода, мы представим сценарий, как будто мы собираемся разделить их на основе условия, это зависит от цены этих продуктов, если продукты с ценой выше 100 долларов, вероятно, они будут выдвинуты в вывод. 1, но, напротив, продукты с ценой меньше или равной 100 $ будут помещены в выпуск 2.

Apache Beam предоставляет класс Partition, который помогает нам разделить элементы коллекции на несколько выходных коллекций. Функция разделения содержит логику, которая определяет, как разделить элементы входной коллекции на каждую результирующую выходную коллекцию разделения.

Это пример разделения коллекции продуктов на ценовые группы:

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

Краткое содержание

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

Если вам понравилась эта статья, вам также понравятся мои статьи об Apache Beam:

Понравилась эта статья? Принеси мне Ко-фи.

Нравится, что я пишу? Присоединяйтесь к моему списку рассылки.

Любите читать? Присоединяйтесь к Medium (Если вы используете эту ссылку, это также поддерживает меня, потому что у меня есть небольшая комиссия от Medium).