Современная техника обработки данных
Современные технологии обработки данных
Инструменты, специфичные для платформы и продвинутые техники
Современная экосистема данных продолжает развиваться, и время от времени появляются новые инструменты для работы с данными. В этой статье я хочу поговорить о ключевых вещах, которые влияют на специалистов по обработке данных. Мы обсудим, как использовать это знание для разработки сложных аналитических конвейеров и операционного совершенства.
Я хотел бы обсудить некоторые популярные вопросы о разработке данных:
- Современная разработка данных. Что это такое?
- Работает ли ваша разработка данных достаточно хорошо для создания сложных конвейеров обработки данных и бизнес-аналитики?
- Эффективны ли ваши конвейеры обработки данных?
- Что требуется с технологической точки зрения, чтобы обеспечить операционное совершенство?
В октябре я писал о росте должности разработчика данных, о ее задачах, ответственности, ежедневной работе и о том, как стать успешным в этой области. Ландшафт разработки данных постоянно меняется, но основные тенденции, кажется, остаются прежними.
Как стать инженером по данным
Сокращение для начинающих в 2024 году
towardsdatascience.com
- Поднимите свою карьеру в области Data Science Как стать старшим специалистом по анализу данных
- «Почему я изучаю JavaScript как специалист по обработке данных»
- «Модель основы для спутниковых изображений»
Как инженер по данным мне часто приходится разрабатывать эффективные процессы работы с данными. Вот несколько вещей, которые следует учесть, чтобы помочь нам ответить на эти вопросы.
Современные тенденции в разработке данных
- ETL против ELT
- Упрощенные связи данных и API-интеграции
- Взрыв ETL-фреймворков
- Инфраструктура данных в виде кода
- Мешок данных и децентрализованное управление данными
- Демократизация конвейеров бизнес-аналитики с использованием ИИ
- Фокус на грамотности в работе с данными
ELT против ETL
Популярные инструменты для трансформации данных на SQL, такие как Dataform и DBT, внесли значительный вклад в популяризацию подхода ELT [1]. Логично проводить необходимые преобразования данных, такие как очистка, обогащение и извлечение, в месте их хранения. Часто это решение хранения данных (DWH) в центре нашей инфраструктуры. Ведущие облачные платформы сделали управление DWH (Snowflake, BigQuery, Redshift, Firebolt) действительно простым, и во многих сценариях они будут превосходить специальные инфраструктуры, созданные внутри компании, по экономической эффективности и скорости.

Также это может быть дата-озеро (datalake) в центре, и это зависит от типа нашей платформы данных и инструментов, которые мы используем. В этом случае SQL, во многих ситуациях, перестает быть вариантом, что усложняет выполнение запросов для пользователей, не знакомых с программированием. Инструменты, такие как Databricks, Tabular и Galaxy, пытаются решить эту проблему, и это действительно кажется будущим. Ведь дата-озера могут хранить все типы данных, включая неструктурированные, и мы все еще должны уметь анализировать эти наборы данных.

Представьте себе таблицы дата-озера с транзакционной согласованностью и изоляцией моментального снимка.
Я ранее писал об этом в одной из своих историй о формате таблиц Apache Iceberg [2].
Введение в таблицы Apache Iceberg
Несколько убедительных причин выбрать Apache Iceberg для Data Lakes
towardsdatascience.com
Упрощенная интеграция данных
Управляемые решения, такие как Fivetran и Stitch, были созданы для упрощения интеграции с API сторонних поставщиков. В настоящее время многие компании выбирают этот подход, чтобы упростить взаимодействие с внешними источниками данных. Это правильный путь для команд аналитиков данных, которые не знакомы с программированием.
В самом деле, зачем мы должны создавать коннектор данных с нуля, если он уже существует и управляется в облаке?
Однако недостатком этого подхода является его модель ценообразования.
Очень часто оно базируется на количестве строк и может стать довольно дорогим на предприятии в процессе приема данных, то есть в ситуациях с большими объемами данных. В таких случаях на сцену выступают альтернативы с открытым исходным кодом. Фреймворки, такие как Airbyte и Meltano, могут быть простым и быстрым решением для развертывания микросервиса интеграции источника данных.
Если у вас нет времени изучать новый фреймворк ETL, вы можете создать простой коннектор данных самостоятельно. Если вы знакомы с Python, это будет тривиальной задачей. В одной из моих предыдущих статей я написал, насколько легко создать микросервис, который извлекает данные из NASA API [3]:
Python для инженеров данных
Продвинутые техники ETL для новичков
towardsdatascience.com
Рассмотрим этот код для app.py
import requestssession = requests.Session()url="https://api.nasa.gov/neo/rest/v1/feed"apiKey="your_api_key"requestParams = { 'api_key': apiKey, 'start_date': '2023-04-20', 'end_date': '2023-04-21'}response = session.get(url, params = requestParams, stream=True)print(response.status_code)
Он может быть развернут на любой платформе облачного поставщика и запланирован для выполнения с необходимой частотой. Всегда полезно использовать что-то вроде Terraform для развертывания приложений нашего конвейера данных.
Взрыв фреймворков ETL
Мы можем наблюдать “камбрийскую вспышку” различных фреймворков ETL для извлечения и трансформации данных. Неудивительно, что многие из них являются открытым исходным кодом и базируются на Python.
Luigi [8] – один из них и он помогает создавать конвейеры ETL. Он был создан Spotify для управления массивными нагрузками обработки данных. Он имеет интерфейс командной строки и отличные средства визуализации. Однако, даже базовым конвейерам ETL требуется определенный уровень навыков программирования на Python. Из моего опыта могу сказать, что Luigi прекрасно подходит для простых и прямолинейных конвейеров. Однако мне сложно реализовать сложную логику ветвления с помощью Luigi, хотя во многих сценариях он работает отлично.
Python ETL (PETL) [9] – один из самых широко используемых фреймворков с открытым исходным кодом для простых трансформаций данных. Он бесценен в работе с таблицами, извлечении данных из внешних источников данных и выполнении основных операций ETL над данными. Во многих отношениях он похож на Pandas, но последний имеет больше возможностей для аналитики. PETL отлично подходит для агрегации данных и операций ETL на уровне строк.
Bonobo [10] – еще один легковесный инструмент для обработки данных с открытым исходным кодом, который отлично подходит для быстрой разработки, автоматизации и параллельного выполнения пакетных процессов конвейера данных. Мне нравится то, что с ним действительно легко работать с различными форматами файлов данных, такими как SQL, XML, XLS, CSV и JSON. Он будет отличным инструментом для тех, у кого есть только базовые навыки программирования на Python. Среди других преимуществ, мне нравится, что он хорошо работает с полусложными схемами данных. Он идеально подходит для простых операций ETL и может работать в контейнерах Docker (есть расширение Docker).
Pandas – абсолютное чудовище в мире данных, и нет необходимости описывать его возможности в этой статье. Стоит отметить, что его преобразования данных в виде фреймов были включены в один из основных методов загрузки данных для многих современных хранилищ данных. Рассмотрим образец загрузки данных в хранилище данных BigQuery:
от google.cloud импортировать bigqueryfrom google.oauth2 импортировать service_account...# Аутентифицируйте клиента BigQuery:service_acount_str = config.get('BigQuery') # Используйте configcredentials = service_account.Credentials.from_service_account_info(service_acount_str)client = bigquery.Client(credentials=credentials, project=credentials.project_id)...def load_table_from_dataframe(table_schema, table_name, dataset_id): #! Формат файла исходных данных должен быть внешним массивом JSON: """ [ {"id":"1"}, {"id":"2"} ] """ blob = """ [ {"id":"1","first_name":"John","last_name":"Doe","dob":"1968-01-22","addresses":[{"status":"current","address":"123 First Avenue","city":"Seattle","state":"WA","zip":"11111","numberOfYears":"1"},{"status":"previous","address":"456 Main Street","city":"Portland","state":"OR","zip":"22222","numberOfYears":"5"}]}, {"id":"2","first_name":"John","last_name":"Doe","dob":"1968-01-22","addresses":[{"status":"current","address":"123 First Avenue","city":"Seattle","state":"WA","zip":"11111","numberOfYears":"1"},{"status":"previous","address":"456 Main Street","city":"Portland","state":"OR","zip":"22222","numberOfYears":"5"}]} ] """ body = json.loads(blob) print(pandas.__version__) table_id = client.dataset(dataset_id).table(table_name) job_config = bigquery.LoadJobConfig() schema = create_schema_from_yaml(table_schema) job_config.schema = schema df = pandas.DataFrame( body, # В загруженной таблице порядок столбцов отражает порядок # колонок в DataFrame. columns=["id", "first_name","last_name","dob","addresses"], ) df['addresses'] = df.addresses.astype(str) df = df[['id','first_name','last_name','dob','addresses']] print(df) load_job = client.load_table_from_dataframe( df, table_id, job_config=job_config, ) load_job.result() print("Job finished.")
Apache Airflow, например, не является инструментом для ETL, но он помогает организовать наши ETL-пайплайны в красочную визуализацию графов зависимостей (DAGs) для описания отношений между задачами. Типичная архитектура Airflow включает планировщик на основе метаданных, исполнители, рабочие процессы и задачи.
Например, мы можем запускать операцию обучения ml_engine_training_op после экспорта данных в хранилище в облаке (bq_export_op) и запускать этот рабочий процесс ежедневно или еженедельно.

Рассмотрим приведенный ниже пример.
Он создает простой граф потоков данных для экспорта данных в хранилище в облаке, а затем обучает модель машинного обучения с использованием оператора MLEngineTrainingOperator.
"""Определение DAG для обучения модели рекомендаций_bespoke."""импортировать airflowиз airflow импортировать DAGиз airflow.contrib.operators.bigquery_operator импортировать BigQueryOperatorиз airflow.contrib.operators.bigquery_to_gcs импортировать BigQueryToCloudStorageOperatorиз airflow.hooks.base_hook импортировать BaseHookиз airflow.operators.app_engine_admin_plugin импортировать AppEngineVersionOperatorиз airflow.operators.ml_engine_plugin импортировать MLEngineTrainingOperatorиз datetimedef _get_project_id(): """Получить идентификатор проекта из соединения GCP по умолчанию.""" extras = BaseHook.get_connection('google_cloud_default').extra_dejson key = 'extra__google_cloud_platform__project' if key in extras: project_id = extras[key] else: raise ('Необходимо настроить project_id в глобальном соединении google_cloud_default ' 'из консоли Airflow') return project_idPROJECT_ID = _get_project_id()# Константы набора данных, используемые в задачах BigQuery. Вы можете изменить их# в соответствии с вашими данными.DATASET = 'статистика' #'аналитика'TABLE_NAME = 'рекомендация_bespoke'# Имена облачной хранилища GCS и регион, также можно изменить.BUCKET = 'gs://rec_wals_eu'REGION = 'us-central1' #'europe-west2' #'us-east1'JOB_DIR = BUCKET + '/jobs'default_args = { 'owner': 'airflow', 'depends_on_past': False, 'start_date': airflow.utils.dates.days_ago(2), 'email': ['mike.shakhomirov@gmail.com'], 'email_on_failure': True, 'email_on_retry': False, 'retries': 5, 'retry_delay': datetime.timedelta(minutes=5)}# Интервал расписания по умолчанию с использованием синтаксиса cronjob - может быть настроен здесь# или в консоли Airflow.schedule_interval = '00 21 * * *'dag = DAG('рекомендации_training_v6', default_args=default_args, schedule_interval=schedule_interval)dag.doc_md = __doc__### Определение задач### Экспорт данных обучения BigQuery в GCStraining_file = BUCKET + '/data/recommendations_small.csv' # только несколько записей для тестировкиst1 = BigQueryToCloudStorageOperator( task_id='bq_export_op', source_project_dataset_table='%s.recommendation_bespoke' % DATASET, destination_cloud_storage_uris=[training_file], export_format='CSV', dag=dag)# Рабочая операция обучения ML Enginetraining_file = BUCKET + '/data/recommendations_small.csv'job_id = 'recserve_{0}'.format(datetime.datetime.now().strftime('%Y%m%d%H%M'))job_dir = BUCKET + '/jobs/' + job_idoutput_dir = BUCKETdelimiter=','data_type='user_groups'master_image_uri='gcr.io/my-project/recommendation_bespoke_container:tf_rec_latest'training_args = ['--job-dir', job_dir, '--train-file', training_file, '--output-dir', output_dir, '--data-type', data_type]master_config = {"imageUri": master_image_uri,}t3 = MLEngineTrainingOperator( task_id='ml_engine_training_op', project_id=PROJECT_ID, job_id=job_id, training_args=training_args, region=REGION, scale_tier='CUSTOM', master_type='complex_model_m_gpu', master_config=master_config, dag=dag)t3.set_upstream(t1)
Пузыри [11] – это еще один инструмент с открытым исходным кодом для ETL в мире Python. Он отлично подходит для быстрой разработки, и мне нравится то, как он работает с метаданными для описания потоков данных. Создатели Bubbles называют его “абстрактным фреймворком” и говорят, что его можно использовать из многих других языков программирования, а не только из Python.
Есть и другие инструменты с более специфическими применениями, например, извлечение данных из веб-страниц (PyQuery, BeautifulSoup и т. д.) и параллельная обработка данных. Это может быть темой для другой истории, но ранее я писал о некоторых из них, например, библиотеке joblib
[12].
Инфраструктура данных как код
Инфраструктура как код (IaC) – популярный и очень функциональный подход для управления ресурсами платформы данных. Даже для данных он уже почти стандарт, и это определенно выглядит отлично на вашем резюме, говорящем вашим потенциальным работодателям о том, что вы знакомы с стандартами DevOps. С помощью таких инструментов, как Terraform (платформо-независимый) и CloudFormation, мы можем легко интегрировать нашу разработку и развертывание (операции).
В общем случае мы хотели бы иметь стадии тестирования и продуктивную среду для наших потоков данных. Это помогает тестировать наши потоки данных и облегчает сотрудничество между командами.
Рассмотрите эту диаграмму ниже. Она объясняет, как работают среды данных.

Часто нам может понадобиться дополнительная песочница для тестирования или запуска модульных тестов на трансформацию данных, когда наши службы ETL запускают рабочие процессы CI/CD. Об этом я ранее писал здесь:
Инфраструктура как код для начинающих
Развертывание потоков данных как профессионал с помощью этих шаблонов
levelup.gitconnected.com
С помощью шаблонов файлов AWS CloudFormation мы можем описать требуемые ресурсы и их зависимости, чтобы мы могли запустить и настроить их вместе в качестве единого стека.
Если вы являетесь специалистом по данным, этот подход определенно поможет вам работать с разными средами данных и быстрее и более последовательно воспроизводить ресурсы платформы данных без ошибок.
Проблема в том, что многие практики по работе с данными не знакомы с IaC, и это создает много ошибок в процессе разработки.
Data Mesh и децентрализованное управление данными
Пространство данных существенно развивается в последнее десятилетие, и сейчас у нас есть множество инструментов и фреймворков для работы с данными. Data Mesh определяет состояние, когда у нас есть различные области данных (отделы компании) с их собственными командами и общими ресурсами данных. Каждая команда имеет свои цели, KPI, роли и обязанности в области данных.
В течение длительного времени бюрократия данных была настоящей проблемой для многих компаний.
Этот тип платформы данных [4] может показаться немного хаотичным, но он был задуман, чтобы стать успешным и эффективным выбором для компаний, где децентрализация позволяет различным командам получать доступ к наборам данных из разных областей и выполнять аналитику или задачи ETL самостоятельно.
Действительно, Snowflake может стать вашим любимым решением для хранилища данных, если вы аналитик данных и не знакомы с Spark. Однако часто возникает проблема, когда вы хотите читать данные из хранилища данных без помощи специалистов по инженерии данных. В этом случае наборы метаданных о наборах данных могут быть очень полезными, и поэтому Data Mesh настолько успешен.
Он позволяет пользователям, обладающим знаниями о данных, их истоках и о том, как другие команды могут получить максимум от этих наборов данных, о которых они раньше не знали.
Иногда наборы данных и соединения с источниками данных становятся очень сложными, и всегда хорошая практика – иметь единое хранилище истины данных или репозиторий с метаданными и описаниями наборов данных.
В одной из моих предыдущих историй [5] я писал о роли SQL как единого языка запросов для команд и данных. Действительно, SQL является аналитическим, самоописывающимся и даже динамическим, что делает его идеальным инструментом для всех пользователей данных.
Часто это превращается в большой беспорядок
Этот факт делает платформы, основанные на SQL-шаблонах, такие как DBT, Jinja и Dataform, очень популярными. Представьте себе платформу, похожую на SQL, где все наборы данных и их преобразования описаны и подробно определены [6].

Может представлять собой большой вызов понять, как команды по обработке данных связаны с источниками данных и схемами. Очень часто это все запутано в клубке зависимостей наборов данных и преобразований ETL. Работа с данными играет критическую роль в наставничестве, повышении грамотности в работе с данными и предоставлении всей компании передовых техник обработки данных и bewt практик.
Демократизация трубопроводов бизнес-аналитики с использованием AI
Повышение доступности данных всегда было популярной темой в области данных, но интересно видеть, как весь процесс проектирования трубопровода данных становится все более доступным для команд, которые ранее не занимались данными. Теперь почти каждый отдел может использовать встроенные возможности искусственного интеллекта для создания сложных преобразований в бизнес-аналитике на основе данных.
Все, что им нужно, – это описать, что они хотят видеть в интерфейсе БА
Например, инструменты бизнес-аналитики, такие как Thoughspot, используют искусственный интеллект с интуитивным “поиском, похожим на Google” [7], для получения инсайтов из данных, хранящихся в современных решениях DWH, таких как Google Big Query, Redshift, Snowflake или Databricks.
Современный набор инструментов для работы с данными включает инструменты бизнес-аналитики, которые помогают в моделировании и визуализации данных. Многие из них уже имеют встроенные возможности искусственного интеллекта для быстрого получения инсайтов на основе поведения пользователя.
Я считаю, что интеграция GPT и BI – достаточно простая задача. В ближайшие несколько лет мы увидим много новых продуктов, использующих эту технологию.
GPT может предварительно обрабатывать текстовые данные для генерации SQL-запроса, понимающего вашу цель и отвечающего на ваш вопрос.
Заключение
В этой статье я постарался дать очень общий обзор основных тенденций в области данных, которые влияют на роль обработки данных в наши дни. Data Mesh и шаблонные SQL с графами зависимостей облегчают демократизацию всего аналитического процесса. Продвинутые трубопроводы данных с сложными техниками и трансформациями ETL могут быть прозрачными для всех в организации теперь. Трубопроводы данных становятся все более доступными для других команд, и им не нужно знать программирование, чтобы узнать и понять сложность ETL. Data Mesh и метаданные помогают решить эту проблему. По моему опыту, я вижу все больше людей, изучающих SQL, чтобы внести вклад в слой преобразования. Компании, родившиеся в эпоху “расширенной аналитики данных”, имеют преимущество легкого доступа к продуктам облачных поставщиков и их управляемым службам. Это определенно помогает приобрести необходимые навыки работы с данными и улучшить их для получения конкурентного преимущества.
Рекомендуемая литература
[1] https://medium.com/towards-data-science/data-pipeline-design-patterns-100afa4b93e3
[2] https://towardsdatascience.com/introduction-to-apache-iceberg-tables-a791f1758009
[3] https://towardsdatascience.com/python-for-data-engineers-f3d5db59b6dd
[4] https://medium.com/towards-data-science/data-platform-architecture-types-f255ac6e0b7
[5] https://medium.com/towards-data-science/advanced-sql-techniques-for-beginners-211851a28488
[7] https://docs.thoughtspot.com/cloud/latest/search-sage
[8] https://github.com/spotify/luigi
[9] https://petl.readthedocs.io/en/stable/
[10] https://www.bonobo-project.org
[11] http://bubbles.databrewery.org/
[12] https://medium.com/towards-data-science/how-to-become-a-data-engineer-c0319cb226c2