В Azure Synapse я использую соединитель SAP CDC для подключения к системе S4Hana. Моя цель — отфильтровать данные на стороне источника перед их хранением в моем ADLS Gen2, так как есть определенные ограничения по данным, которым я должен следовать.
Мне необходимо извлекать несколько объектов из SAP, и обычно я использую параметризованный подход для этого. У меня есть файл JSON, который содержит параметры и запросы для каждого объекта, который я хочу извлечь из источника. Например, я определяю SQL-запросы в файле JSON для выполнения фильтрации. Этот метод хорошо работает с SQL-соединителями.
Однако с соединителем SAP CDC я не смог найти никаких функций, которые позволяли бы мне применять такую фильтрацию непосредственно на источнике.
В данный момент я использую поток данных в цикле for each. Однако в потоке данных я не могу передать SQL-запросы (или подобные), и я застрял на конструкторе выражений. Я не могу понять, как динамически передавать фильтры, подобные запросам. Поэтому я просто получаю неотфильтрованные объекты, что является неприемлемым вариантом. У меня так много объектов, что я не могу поддерживать версию без параметров.
Я также пробовал использовать активность копирования данных, однако, когда я выбираю её, у меня нет возможности выбрать интеграционный набор данных SAP CDC. Отключена ли служба связки CDC для активности копирования данных?
Ответ
Вопрос о том, как фильтровать данные SAP на уровне источника с использованием Synapse/ADF CDC, действительно интересный и требует внимательного подхода. Давайте разберемся с вашей задачей по шагам.
Общая информация
SAP CDC (Change Data Capture) Connectors позволяют извлекать измененные данные из SAP систем, таких как S4Hana. Однако ограничение заключается в том, что функциональность фильтрации на стороне источника может быть менее развитой по сравнению с SQL-подключениями.
Решение
-
Использование параметризованных запросов:
Вы упомянули, что используете JSON-файл с параметрами и запросами. К сожалению, SAP CDC Connector не поддерживает напрямую параметризованные SQL запросы в Data Flow. Однако вы можете использоватьStored Procedures
, если ваша бизнес-логика это позволяет. -
Создание функциях
Stored Procedure
в SAP:
Один из способов обойти ограничения — создатьStored Procedure
на стороне SAP, которая будет возвращать только те данные, которые вам нужны. В вашемStored Procedure
вы можете включить логику фильтрации и передать параметры. После этого в ADF/Synapse можно вызывать этотStored Procedure
с параметрами. -
Использование Data Flow с параметрами:
Если вы все же хотите использовать Data Flow, вы можете попробовать встроить логику фильтрации на уровне ADF, используяConditional Split
илиFilter
после извлечения данных. Также стоит проверить, есть ли возможность использоватьMapping Data Flow
для подсистем, которые поддерживают фильтрацию. -
Копирование данных:
Вы упомянули, что не можете выбрать SAP CDC Integration Dataset для Copy Data Activity. Это связано с тем, что Copy Data Activity в ADF в основном используется для копирования данных в одном и том же формате без возможности произвести Filtering на уровне источника. Вместо этого, рекомендуется использовать Data Flow, как указано выше. - Использование Azure Functions или других ETL-ресурсов:
Вы также можете рассмотреть использование Azure Functions или других ETL-решений, которые позволяют вам подключаться к SAP, извлекать данные и фильтровать их согласно вашим требованиям, а затем загружать результаты в ADLS Gen2.
Заключение
Настройка эффективного ETL-процесса из SAP в Azure требует учёта ряда факторов, включая ограничения источника. К сожалению, использование SAP CDC Connector имеет свои ограничения, и фильтрация данных непосредственно на уровне источника может быть невозможна. Постарайтесь использовать возможности хранимых процедур в SAP или внешние инструменты ETL для достижения вашей цели.
Если вам нужны дополнительные детали по конкретным шагам реализации, пожалуйста, дайте знать!