Skip to content

Трансформеры (Transformers)

Трансформеры позволяют модифицировать метаданные перед их поступлением в приемник (Sink). С их помощью можно добавлять теги, назначать владельцев, изменять свойства и многое другое. Более того, трансформеры обеспечивают возможность управлять поступающими метаданными без необходимости изменения кода фреймворка инджестора. Чтобы подключить трансформеры, необходимо добавить соответствующую конфигурацию в разделе transformers в рецепте инджестора.

Поддерживаемые трансформеры для датасетов

Property Transformers
ownership Simple Add Dataset ownership
Pattern Add Dataset ownership
Simple Remove Dataset ownership
Clean suffix prefix from Ownership
globalTags Simple Add Dataset globalTags
Pattern Add Dataset globalTags
Add Dataset globalTags
status Mark Dataset status
glossaryTerms Simple Add Dataset glossaryTerms
Pattern Add Dataset glossaryTerms
Tags to Term Mapping
schemaMetadata Pattern Add Dataset Schema Field glossaryTerms
Pattern Add Dataset Schema Field globalTags
datasetProperties Simple Add Dataset datasetProperties
Add Dataset datasetProperties
domains Simple Add Dataset domains
Pattern Add Dataset domains

Simple Add Dataset ownership

Простое добавление владельца

Поле Обязательность Тип По умолчанию Описание
owner_urns да list[string] Список URN владельцев.
ownership_type string "DATAOWNER" Тип владельца (enum или urn типа владельца).
replace_existing boolean false Следует ли удалить владельца объекта, полученного из источника.
semantics enum OVERWRITE Следует ли перезаписать или извлечь объект, находящийся в Каталоге.
on_conflict enum DO_UPDATE Определяет, следует ли вносить ли изменения, если домены уже существуют. Если установлено значение DO_NOTHING, настройка semantics не имеет значения.

С информацией о replace_existing и semantics можно ознакомиться в разделе Связь между replace_existing и semantics.

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

Нижеприведенная конфигурация добавит перечисленных пользователей (по их URN) как владельцев с типом PRODUCER.

transformers:
  - type: "simple_add_dataset_ownership"
    config:
      owner_urns:
        - "urn:li:corpuser:username1"
        - "urn:li:corpuser:username2"
        - "urn:li:corpGroup:groupname"
      ownership_type: "PRODUCER"

Добавить владельцев, но заменить существующих владельцев, полученных из источника, можно с помощью такой конфигурации:

transformers:
  - type: "simple_add_dataset_ownership"
    config:
      replace_existing: true  # false - значение по умолчанию
      owner_urns:
        - "urn:li:corpuser:username1"
        - "urn:li:corpuser:username2"
        - "urn:li:corpGroup:groupname"
      ownership_type: "urn:li:ownershipType:__system__producer"

Добавить новых владельцев, но удалить текущих владельцев в Каталоге данных:

transformers:
  - type: "simple_add_dataset_ownership"
    config:
      semantics: OVERWRITE  # OVERWRITE - значение по умолчанию
      owner_urns:
        - "urn:li:corpuser:username1"
        - "urn:li:corpuser:username2"
        - "urn:li:corpGroup:groupname"
      ownership_type: "urn:li:ownershipType:__system__producer" 

Добавить новых владельцев, но оставить текущих владельцев доступными для датасета в Каталоге данных:

transformers:
  - type: "simple_add_dataset_ownership"
    config:
      semantics: PATCH
      owner_urns:
        - "urn:li:corpuser:username1"
        - "urn:li:corpuser:username2"
        - "urn:li:corpGroup:groupname"
      ownership_type: "PRODUCER"

Pattern Add Dataset ownership

Добавление владельца по паттерну

Поле Обязательность Тип По умолчанию Описание
owner_pattern да map[regx, list[urn]] Регулярное выражение для urn объекта и список urn владельцев, которых следует добавить для объекта.
ownership_type string "DATAOWNER" Тип владельца (enum или urn типа владельца).
replace_existing boolean false Следует ли удалить владельца объекта, полученного из источника.
semantics enum OVERWRITE Следует ли перезаписать или извлечь объект, находящийся в Каталоге.
is_container bool false Указывает, следует ли учитывать контейнер. Если true, тип владельца будет применен как к датасету, так и к его контейнеру.
on_conflict enum DO_UPDATE Определяет, следует ли вносить ли изменения, если домены уже существуют. Если установлено значение DO_NOTHING, настройка semantics не имеет значения.

С информацией о replace_existing и semantics можно ознакомиться в разделе Связь между replace_existing и semantics.

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

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

Конфигурация, которую необходимо добавить к рецепту, будет выглядеть следующим образом:

transformers:
  - type: "pattern_add_dataset_ownership"
    config:
      owner_pattern:
        rules:
          ".*example1.*": ["urn:li:corpuser:username1"]
          ".*example2.*": ["urn:li:corpuser:username2"]
      ownership_type: "DEVELOPER"
Добавить владельца, но заменить существующего, полученного от источника можно с помощью такой конфигурации:

transformers:
  - type: "pattern_add_dataset_ownership"
    config:
      replace_existing: true  # false - значение по умолчанию
      owner_pattern:
        rules:
          ".*example1.*": ["urn:li:corpuser:username1"]
          ".*example2.*": ["urn:li:corpuser:username2"]
      ownership_type: "urn:li:ownershipType:__system__producer"

Добавить новых владельцев, но перезаписать текущих владельцев в Каталоге:

transformers:
  - type: "pattern_add_dataset_ownership"
    config:
      semantics: OVERWRITE  # OVERWRITE - значение по умолчанию
      owner_pattern:
        rules:
          ".*example1.*": ["urn:li:corpuser:username1"]
          ".*example2.*": ["urn:li:corpuser:username2"]
      ownership_type: "urn:li:ownershipType:__system__producer" 

Добавить нового владельца, но оставить текущих владельцев доступными для датасета в Каталоге:

transformers:
  - type: "pattern_add_dataset_ownership"
    config:
      semantics: PATCH
      owner_pattern:
        rules:
          ".*example1.*": ["urn:li:corpuser:username1"]
          ".*example2.*": ["urn:li:corpuser:username2"]
      ownership_type: "PRODUCER"

Добавить владельца к датасету и его контейнерам:

transformers:
  - type: "pattern_add_dataset_ownership"
    config:
      is_container: true
      replace_existing: true  # false - значение по умолчанию
      semantics: PATCH / OVERWRITE # В зависимости от пользователя 
      owner_pattern:
        rules:
          ".*example1.*": ["urn:li:corpuser:username1"]
          ".*example2.*": ["urn:li:corpuser:username2"]
      ownership_type: "PRODUCER"

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

transformers:
  - type: "pattern_add_dataset_ownership"
    config:
      is_container: true
      owner_pattern:
        rules:
          ".*example1.*": ["urn:li:corpuser:username1"]
          ".*example2.*": ["urn:li:corpuser:username2"]
Если example1 и example2 находятся в одном контейнере, то оба URN urn🇱🇮corpuser:username1 и urn🇱🇮corpuser:username2 будут добавлены для соответствующих контейнеров датасетов.

Simple Remove Dataset ownership

Простое удаление владельца

Если необходимо удалить существующих владельцев, полученных из источника, то можно использовать трансформер simple_remove_dataset_ownership, который удаляет всех владельцев, полученных из источника.

transformers:
  - type: "simple_remove_dataset_ownership"
    config: {}

Основной вариант использования simple_remove_dataset_ownership — удаление неверных владельцев, присутствующих в источнике. Вы можете использовать его вместе с Simple Add Dataset Ownership, чтобы удалить неверных владельцев и добавить желаемых.

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

Clean suffix prefix from Ownership

Очистить URN владельца

Поле Обязательность Тип По умолчанию Описание
pattern_for_cleanup да list[string] Список суффиксов/префиксов для удаления из URN владельца.

Удаляет соответствующую часть шаблона из URN владельца:

transformers:
  - type: "pattern_cleanup_ownership"
    config:
      pattern_for_cleanup:
        - "ABCDEF"
        - (?<=_)(\w+)

Simple Add Dataset globalTags

Простое добавление Тегов

Поле Обязательность Тип По умолчанию Описание
tag_urns да list[string] Список urn тегов.
replace_existing boolean false Следует ли удалить владельца объекта, полученного из источника.
semantics enum OVERWRITE Следует ли перезаписать или извлечь объект, находящийся в Каталоге.

Если необходимо добавить набор тегов, то можно использовать трансформер simple_add_dataset_tags. Конфигурация, которую необходимо добавить к рецепту, будет выглядеть следующим образом:

transformers:
  - type: "simple_add_dataset_tags"
    config:
      tag_urns:
        - "urn:li:tag:NeedsDocumentation"
        - "urn:li:tag:Legacy"

Добавить теги, но заменить существующие теги, полученные от источника:

transformers:
  - type: "simple_add_dataset_tags"
    config:
      replace_existing: true  # false - значение по умолчанию
      tag_urns:
        - "urn:li:tag:NeedsDocumentation"
        - "urn:li:tag:Legacy"

Добавить новые теги, однако перезаписать текущие теги, доступные для датасета в Каталоге:

transformers:
  - type: "simple_add_dataset_tags"
    config:
      semantics: OVERWRITE  # OVERWRITE - значение по умолчанию
      tag_urns:
        - "urn:li:tag:NeedsDocumentation"
        - "urn:li:tag:Legacy"

Добавить новые теги, но оставить текущие теги доступными для датасета в Каталоге:

transformers:
  - type: "simple_add_dataset_tags"
    config:
      semantics: PATCH
      tag_urns:
        - "urn:li:tag:NeedsDocumentation"
        - "urn:li:tag:Legacy"

Pattern Add Dataset globalTags

Добавление тегов по шаблону

Поле Обязательность Тип По умолчанию Описание
tag_pattern да map[regx, list[urn]] Регулярное выражение для urn объекта и список urn тегов, которые необходимо применить к соответствующим объектам.
replace_existing boolean false Следует ли удалить теги для объекта, полученного из источника.
semantics enum OVERWRITE Следует ли перезаписать или извлечь объект, находящийся в Каталоге.

Чтобы добавить ряд тегов к определенным датасетам необходимо использовать трансформер pattern_add_dataset_tags. Это сопоставит шаблон регулярного выражения с urn датасета и назначит им соответствующие теги, urn которых указаны в списке.

Конфигурация, которую необходимо добавить к рецепту, будет выглядеть следующим образом:

transformers:
  - type: "pattern_add_dataset_tags"
    config:
      tag_pattern:
        rules:
          ".*example1.*": ["urn:li:tag:NeedsDocumentation", "urn:li:tag:Legacy"]
          ".*example2.*": ["urn:li:tag:NeedsDocumentation"]

Добавить теги, но заменить существующие теги, полученные из источника:

transformers:
  - type: "pattern_add_dataset_tags"
    config:
      replace_existing: true  # false - значение по умолчанию
      tag_pattern:
        rules:
          ".*example1.*": ["urn:li:tag:NeedsDocumentation", "urn:li:tag:Legacy"]
          ".*example2.*": ["urn:li:tag:NeedsDocumentation"]

Добавить новые теги, но перезаписать текущие теги, доступные для датасета в Каталоге:

transformers:
  - type: "pattern_add_dataset_tags"
    config:
      semantics: OVERWRITE  # OVERWRITE - значение по умолчанию 
      tag_pattern:
        rules:
          ".*example1.*": ["urn:li:tag:NeedsDocumentation", "urn:li:tag:Legacy"]
          ".*example2.*": ["urn:li:tag:NeedsDocumentation"]

Добавить новые теги, но оставить текущие теги доступными для датасета в Каталоге:

transformers:
  - type: "pattern_add_dataset_tags"
    config:
      semantics: PATCH
      tag_pattern:
        rules:
          ".*example1.*": ["urn:li:tag:NeedsDocumentation", "urn:li:tag:Legacy"]
          ".*example2.*": ["urn:li:tag:NeedsDocumentation"]

Add Dataset globalTags

Извлечение Тегов из URN

Поле Обязательность Тип По умолчанию Описание
get_tags_to_add да callable[[str], list[TagAssociationClass]] Функция, которая принимает urn объекта в качестве входных данных и возвращает TagAssociationClass.
replace_existing boolean false Следует ли удалить тег объекта, полученного из источника.
semantics enum OVERWRITE Следует ли перезаписать или извлечь объект, находящийся в Каталоге.

Для добавления более сложной логики назначения тегов можно использовать трансформер add_dataset_tags, который вызывает предоставленную пользователем функцию для определения тегов каждого датасета.

transformers:
  - type: "add_dataset_tags"
    config:
      get_tags_to_add: "<your_module>.<your_function>"

Затем необходимо определить функцию для возврата списка TagAssociationClass тегов, например:

import logging

import datahub.emitter.mce_builder as builder
from datahub.metadata.schema_classes import (
    TagAssociationClass
)

def custom_tags(entity_urn: str) -> List[TagAssociationClass]:
    """Compute the tags to associate to a given dataset."""

    tag_strings = []

    ### Пропишите здесь пользовательскую логику
    tag_strings.append('custom1')
    tag_strings.append('custom2')

    tag_strings = [builder.make_tag_urn(tag=n) for n in tag_strings]
    tags = [TagAssociationClass(tag=tag) for tag in tag_strings]

    logging.info(f"Tagging dataset {entity_urn} with {tag_strings}.")
    return tags

Добавить теги, но заменить существующие теги, полученные от источника:

transformers:
  - type: "add_dataset_tags"
    config:
      replace_existing: true  # false - значение по умолчанию
      get_tags_to_add: "<your_module>.<your_function>"

Добавить новые теги, но перезаписать текущие теги, доступные для датасета в Каталоге:

transformers:
  - type: "add_dataset_tags"
    config:
      semantics: OVERWRITE  # OVERWRITE - значение по умолчанию
      get_tags_to_add: "<your_module>.<your_function>"

Добавить новые теги, но оставить текущие теги доступными для датасета в Каталоге:

transformers:
  - type: "add_dataset_tags"
    config:
      semantics: PATCH
      get_tags_to_add: "<your_module>.<your_function>"

Mark Dataset Status

Установить статус датасета

Поле Обязательность Тип По умолчанию Описание
removed да boolean Флаг для управления видимостью датасета в пользовательском интерфейсе.

Для того, чтобы не отображать датасет в пользовательском интерфейсе, вам нужно добавить статус removed. Вы можете использовать трансформер mark_dataset_status в рецепте, чтобы добавить статус:

transformers:
  - type: "mark_dataset_status"
    config:
      removed: true

Simple Add Dataset glossaryTerms

Простое добавление Термина Глоссария

Поле Обязательность Тип По умолчанию Описание
term_urns да list[string] Список urn терминов глоссария.
replace_existing boolean false Следует ли удалить термин для объекта, полученного из источника.
semantics enum OVERWRITE Следует ли перезаписать или извлечь объект, находящийся в Каталоге.

В Каталоге данных предусмотрена возможность связывания терминов глоссария с датасетами с использованием трансформера simple_add_dataset_terms.

Конфигурация, которую необходимо добавить к рецепту, будет выглядеть следующим образом:

transformers:
  - type: "simple_add_dataset_terms"
    config:
      term_urns:
        - "urn:li:glossaryTerm:Email"
        - "urn:li:glossaryTerm:Address"

Добавить термины, но заменить существующие термины, полученные из источника:

transformers:
  - type: "simple_add_dataset_terms"
    config:
      replace_existing: true  # false - значение по умолчанию
      term_urns:
        - "urn:li:glossaryTerm:Email"
        - "urn:li:glossaryTerm:Address"

Добавить новые термины, но перезаписать текущие термины для датасетов в Каталоге:

transformers:
  - type: "simple_add_dataset_terms"
    config:
      semantics: OVERWRITE  # OVERWRITE - значение по умолчанию
      term_urns:
        - "urn:li:glossaryTerm:Email"
        - "urn:li:glossaryTerm:Address"

Добавить новые термины, но сохранить текущие термины доступными для датасета в Каталоге:

transformers:
  - type: "simple_add_dataset_terms"
    config:
      semantics: PATCH
      term_urns:
        - "urn:li:glossaryTerm:Email"
        - "urn:li:glossaryTerm:Address"

Pattern Add Dataset glossaryTerms

Добавление Термина Глоссария по паттерну

Поле Обязательность Тип По умолчанию Описание
term_pattern да map[regx, list[urn]] Регулярное выражение для urn объекта и список urn терминов глоссария, которые необходимо применить к соответствующим объектам.
replace_existing boolean false Следует ли удалить термин для объекта, полученного из источника.
semantics enum OVERWRITE Следует ли перезаписать или извлечь объект, находящийся в Каталоге.

В Каталоге данных предусмотрена возможность связывания терминов глоссария с датасетами с использованием трансформера pattern_add_dataset_terms.

Конфигурация, которую необходимо добавить к рецепту, будет выглядеть следующим образом:

transformers:
  - type: "pattern_add_dataset_terms"
    config:
      term_pattern:
        rules:
          ".*example1.*": ["urn:li:glossaryTerm:Email", "urn:li:glossaryTerm:Address"]
          ".*example2.*": ["urn:li:glossaryTerm:PostalCode"]

Добавить термины, но заменить существующие термины, полученные от источника:

transformers:
  - type: "pattern_add_dataset_terms"
    config:
      replace_existing: true  # false - значение по умолчанию
      term_pattern:
        rules:
          ".*example1.*": ["urn:li:glossaryTerm:Email", "urn:li:glossaryTerm:Address"]
          ".*example2.*": ["urn:li:glossaryTerm:PostalCode"]

Добавить новые термины, но перезаписать текущие термины, доступные для датасета в Каталоге:

transformers:
  - type: "pattern_add_dataset_terms"
    config:
      semantics: OVERWRITE  # OVERWRITE - значение по умолчанию 
      term_pattern:
        rules:
          ".*example1.*": ["urn:li:glossaryTerm:Email", "urn:li:glossaryTerm:Address"]
          ".*example2.*": ["urn:li:glossaryTerm:PostalCode"]

Добавить новые термины, но сохранить текущие термины доступными для датасета в Каталоге:

transformers:
  - type: "pattern_add_dataset_terms"
    config:
      semantics: PATCH
      term_pattern:
        rules:
          ".*example1.*": ["urn:li:glossaryTerm:Email", "urn:li:glossaryTerm:Address"]
          ".*example2.*": ["urn:li:glossaryTerm:PostalCode"]

Tags to Term Mapping

Маппинг Тега и Термина

Поле Обязательность Тип По умолчанию Описание
tags да List[str] Список имен тегов, на основе которых будут созданы термины и связаны с датасетами.
semantics enum OVERWRITE Следует ли перезаписать или извлечь объект, находящийся в Каталоге.

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

Важно. При указании тегов в конфигурации используйте имя тега, а не полный urn тега.

Например, вместо использования urn тега urn🇱🇮tag:snowflakedb.snowflakeschema.tag_name:tag_value, следует указать только имя тега tag_name в файле конфигурации инджестора:

transformers:
  - type: "tags_to_term"
    config:
      semantics: OVERWRITE  # OVERWRITE - значение по умолчанию
      tags:
        - "tag_name"

Добавить новые термины на основе тегов, однако перезаписать текущие термины, доступные для датасета в Каталоге:

    transformers:
      - type: "tags_to_term"
        config:
          semantics: OVERWRITE  # OVERWRITE - значение по умолчанию
          tags:
            - "example1"
            - "example2"
            - "example3"

Добавить новые термины на основе тегов, но сохранить текущие термины, доступные для датасета в Каталоге:

    transformers:
      - type: "tags_to_term"
        config:
          semantics: PATCH
          tags:
            - "example1"
            - "example2"
            - "example3"

Pattern Add Dataset Schema Field glossaryTerms

Добавление Термина к схеме по паттерну

Поле Обязательность Тип По умолчанию Описание
term_pattern да map[regx, list[urn]] Регулярное выражение для urn объекта и список urn терминов глоссария, которые необходимо применить к объектам.
replace_existing boolean false Следует ли удалить термин для объекта, полученного из источника.
semantics enum OVERWRITE Следует ли перезаписать или извлечь объект, находящийся в Каталоге.

Важно. Обратите внимание, что применяются только термины из первого совпадающего шаблона.

transformers:
  - type: "pattern_add_dataset_schema_terms"
    config:
      term_pattern:
        rules:
          ".*email.*": ["urn:li:glossaryTerm:Email"]
          ".*name.*": ["urn:li:glossaryTerm:Name"]

Добавить термины, но заменить существующие термины, полученные от источника:

transformers:
  - type: "pattern_add_dataset_schema_terms"
    config:
      replace_existing: true  # false - значение по умолчанию
      term_pattern:
        rules:
          ".*email.*": ["urn:li:glossaryTerm:Email"]
          ".*name.*": ["urn:li:glossaryTerm:Name"]

Добавить новые термины, но перезаписать текущие термины, доступные для датасета в Каталоге:

transformers:
  - type: "pattern_add_dataset_schema_terms"
    config:
      semantics: OVERWRITE  # OVERWRITE - значение по умолчанию 
      term_pattern:
        rules:
          ".*email.*": ["urn:li:glossaryTerm:Email"]
          ".*name.*": ["urn:li:glossaryTerm:Name"]

Добавить новые термины, но сохранить текущие термины доступными для датасета в Каталоге:

transformers:
  - type: "pattern_add_dataset_schema_terms"
    config:
      semantics: PATCH
      term_pattern:
        rules:
          ".*email.*": ["urn:li:glossaryTerm:Email"]
          ".*name.*": ["urn:li:glossaryTerm:Name"]

Pattern Add Dataset Schema Field globalTags

Добавление Тегов к схеме по паттерну

Поле Обязательность Тип По умолчанию Описание
term_pattern да map[regx, list[urn]] Регулярное выражение для urn объекта и список urn тегов, которые необходимо применить к соответствующим объектам.
replace_existing boolean false Следует ли удалить владельца объекта, полученного из источника.
semantics enum OVERWRITE Следует ли перезаписать или извлечь объект, находящийся в Каталоге.

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

Важно. Обратите внимание, что будут применены теги из первого совпадающего шаблона, а не все совпадающие шаблоны.

Конфигурация будет выглядеть так:

transformers:
  - type: "pattern_add_dataset_schema_tags"
    config:
      tag_pattern:
        rules:
          ".*email.*": ["urn:li:tag:Email"]
          ".*name.*": ["urn:li:tag:Name"]

Добавить теги, но заменить существующие, полученные из источника:

transformers:
  - type: "pattern_add_dataset_schema_tags"
    config:
      replace_existing: true  # false - значение по умолчанию
      tag_pattern:
        rules:
          ".*example1.*": ["urn:li:tag:NeedsDocumentation", "urn:li:tag:Legacy"]
          ".*example2.*": ["urn:li:tag:NeedsDocumentation"]

Добавить новые теги, но перезаписать текущие теги, доступные для датасета в Каталоге:

transformers:
  - type: "pattern_add_dataset_schema_tags"
    config:
      semantics: OVERWRITE  # OVERWRITE - значение по умолчанию 
      tag_pattern:
        rules:
          ".*example1.*": ["urn:li:tag:NeedsDocumentation", "urn:li:tag:Legacy"]
          ".*example2.*": ["urn:li:tag:NeedsDocumentation"]

Добавить новые теги, но оставить текущие теги доступными для датасетов в Каталоге:

transformers:
  - type: "pattern_add_dataset_schema_tags"
    config:
      semantics: PATCH
      tag_pattern:
        rules:
          ".*example1.*": ["urn:li:tag:NeedsDocumentation", "urn:li:tag:Legacy"]
          ".*example2.*": ["urn:li:tag:NeedsDocumentation"]

Simple Add Dataset datasetProperties

Простое добавление свойств

Поле Обязательность Тип По умолчанию Описание
properties да dict[str, str] Пара ключ-значение.
replace_existing boolean false Следует ли удалить свойства объекта, полученного из источника.
semantics enum OVERWRITE Следует ли перезаписать или извлечь объект, находящийся в Каталоге.

Трансформер simple_add_dataset_properties добавляет свойства датасету из конфигурации. Поле свойств (properties) — это словарь строковых значений. Обратите внимание, что в случае любого конфликта ключей значение будет перезаписано.

transformers:
  - type: "simple_add_dataset_properties"
    config:
      properties:
        prop1: value1
        prop2: value2

Добавить свойства датасета, но заменить существующие свойства, полученные от источника:

transformers:
  - type: "simple_add_dataset_properties"
    config:
      replace_existing: true  # false - значение по умолчанию
      properties:
        prop1: value1
        prop2: value2

Добавить новые свойства датасета, но перезаписать текущие свойства, доступные в Каталоге:

transformers:
  - type: "simple_add_dataset_properties"
    config:
      semantics: OVERWRITE  # OVERWRITE - значение по умолчанию 
      properties:
        prop1: value1
        prop2: value2

Добавить новые свойства датасета, но оставить текущие свойства доступными в Каталоге:

transformers:
  - type: "simple_add_dataset_properties"
    config:
      semantics: PATCH
      properties:
        prop1: value1
        prop2: value2

Add Dataset datasetProperties

Добавление свойств

Поле Обязательность Тип По умолчанию Описание
add_properties_resolver_class да Type[AddDatasetPropertiesResolverBase] Класс наследуется от AddDatasetPropertiesResolverBase.
replace_existing boolean false Следует ли удалить свойства для объекта, полученного из источника.
semantics enum OVERWRITE Следует ли перезаписать или извлечь объект, находящийся в Каталоге.

Для добавления более сложной логику для назначения свойств, можно использовать трансформер add_dataset_properties, который вызывает пользователем класс (который наследуется от класса AddDatasetPropertiesResolverBase) для определения свойств для каждого датасета.

Конфигурация, которую необходимо добавить в файл рецепта, будет выглядеть следующим образом:

transformers:
  - type: "add_dataset_properties"
    config:
      add_properties_resolver_class: "<your_module>.<your_class>"

Затем необходимо определить свой класс для возврата списка пользовательских свойств, например:

import logging
from typing import Dict
from datahub.ingestion.transformer.add_dataset_properties import AddDatasetPropertiesResolverBase

class MyPropertiesResolver(AddDatasetPropertiesResolverBase):
    def get_properties_to_add(self, entity_urn: str) -> Dict[str, str]:
        ### Add custom logic here        
        properties= {'my_custom_property': 'property value'}
        logging.info(f"Adding properties: {properties} to dataset: {entity_urn}.")
        return properties

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

transformers:
  - type: "add_dataset_properties"
    config:
      replace_existing: true  # false - значение по умолчанию
      add_properties_resolver_class: "<your_module>.<your_class>"

Добавить новые свойства датасета, но перезаписать текущие свойства, доступные в Каталоге:

transformers:
  - type: "add_dataset_properties"
    config:
      semantics: OVERWRITE  # OVERWRITE - значение по умолчанию
      add_properties_resolver_class: "<your_module>.<your_class>"

Добавить новые свойства датасета, но оставить текущие свойства доступными в Каталоге:

transformers:
  - type: "add_dataset_properties"
    config:
      semantics: PATCH
      add_properties_resolver_class: "<your_module>.<your_class>"

Simple Add Dataset domains

Простое добавление Домена

Поле Обязательность Тип По умолчанию Описание
domains да list[union[urn, str]] Список имен или urn доменов.
replace_existing boolean false Следует ли удалить домен для объекта, полученного из источника.
semantics enum OVERWRITE Следует ли перезаписать или извлечь объект, находящийся в Каталоге.

Для того, чтобы добавить несколько доменов для датасета можно использовать трансформер simple_add_dataset_domain. С помощью этого трансформера можно задать домены как urn (например, urn🇱🇮domain:engineering) или как простое доменное имя (например, engineering); в обоих случаях домен должен быть присутствовать в Каталоге.

Конфигурация, которую необходимо добавить к рецепту, будет выглядеть следующим образом:

transformers:
  - type: "simple_add_dataset_domain"
    config:
      semantics: OVERWRITE
      domains:
        - urn:li:domain:engineering

Добавить домены, однако заменить существующие домены, полученные от источника:

transformers:
  - type: "simple_add_dataset_domain"
    config:
      replace_existing: true  # false - значение по умолчанию
      domains:
        - "urn:li:domain:engineering"
        - "urn:li:domain:hr"

Добавить новые домены, но перезаписать текущие домены, доступные для датасета в Каталоге:

transformers:
  - type: "simple_add_dataset_domain"
    config:
      semantics: OVERWRITE  # OVERWRITE - значение по умолчанию
      domains:
        - "urn:li:domain:engineering"
        - "urn:li:domain:hr"

Добавить новые домены, но оставить текущие домены доступными для датасета в Каталоге:

transformers:
  - type: "simple_add_dataset_domain"
    config:
      semantics: PATCH
      domains:
        - "urn:li:domain:engineering"
        - "urn:li:domain:hr"

Pattern Add Dataset domains

Добавление Домена по паттерну

Поле Обязательность Тип По умолчанию Описание
domain_pattern да map[regx, list[union[urn, str]]] Urn датасета с регулярным выражением и список urn доменов, которые необходимо добавить к
replace_existing boolean false Следует ли удалить домен для объекта, полученного из источника.
semantics enum OVERWRITE Следует ли перезаписать или извлечь объект, находящийся в Каталоге.
is_container bool false Указывает, следует ли учитывать контейнер. Если true, домен будет прикреплен как к датасету, так и к его контейнеру.

Для того, чтобы добавить несколько доменов для датасета необходимо использовать трансформер simple_add_dataset_domain. С помощью данного трансформера можно задать домены как urn (например, urn🇱🇮domain:engineering) или как доменное имя (например, engineering); в обоих случаях домен должен быть предоставлен в Каталоге.

Конфигурация, которую необходимо добавить к рецепту, будет выглядеть следующим образом:

transformers:
  - type: "simple_add_dataset_domain"
    config:
      semantics: OVERWRITE
      domains:
        - urn:li:domain:engineering

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

transformers:
  - type: "simple_add_dataset_domain"
    config:
      replace_existing: true  # false - значение по умолчанию
      domains:
        - "urn:li:domain:engineering"
        - "urn:li:domain:hr"

Добавить новые домены, но перезаписать текущие домены, доступные для датасета в Каталоге:

transformers:
  - type: "simple_add_dataset_domain"
    config:
      semantics: OVERWRITE  # OVERWRITE - значение по умолчанию 
      domains:
        - "urn:li:domain:engineering"
        - "urn:li:domain:hr"

Добавить новые домены, но оставить текущие домены доступными для датасета в Каталоге:

transformers:
  - type: "simple_add_dataset_domain"
    config:
      semantics: PATCH
      domains:
        - "urn:li:domain:engineering"
        - "urn:li:domain:hr"

replace_existing, semantics

Связь между replace_existing и semantics в данном разделе рассматривается в контексте трансформера simple_add_dataset_ownership, однако оно применимо ко всем трансформерам датасетов, которые поддерживают атрибуты конфигурации replace_existing и semantics. То есть, например, simple_add_dataset_tags будет добавлять или удалять теги в соответствии с поведением, упомянутым в этом разделе.

  • replace_existing управляет удалением владельцев из текущего пайплайна инджестора.
  • semantics контролирует, следует ли перезаписывать (overwrite) или извлекать (patch) владельцев, имеющихся в Каталоге.

Примеры конфигураций этих атрибутов друг с другом:

Если параметр replace_existing имеет значение true, а semantics задано как OVERWRITE, трансформер выполнит следующие действия:

  1. Поскольку replace_existing установлено как true, текущие владельцы входного объекта удалятся.
  2. Будут добавлены владельцы, указанные в рецепте для входного объекта.
  3. Так как semantics равно OVERWRITE, то нет необходимости извлекать владельцев, имеющихся в Каталоге данных для входного объекта.
  4. Вернуть входной объект.

Если replace_existing установлено как true и semantics установлено PATCH тогда:

  1. Поскольку replace_existing установлено как true, то сначала удалятся владельцы у входного объекта.
  2. Будут добавлены владельцы, указанные в рецепте для входного объекта.
  3. Так как semantics установлено как PATCH, то будут извлечены владельцы из Каталога для входного объекта.
  4. Будут добавлены владельцы, извлеченные из Каталога, для входного объекта.
  5. Вернуть входной объект.

Если параметр replace_existing установлен в false, а semantics задано как OVERWRITE, тогда выполняются следующие действия:

  1. Поскольку replace_existing задан как false, текущие владельцы входного объекта сохраняются.
  2. Добавляются владельцы, указанные в рецепте для входного объекта.
  3. Так как semantics равно OVERWRITE, нет необходимости извлекать владельцев из Каталога для входного объекта.
  4. Вернуть входной объект.

Если параметр replace_existing установлен на false, а semantics задано как PATCH, тогда выполняются следующие шаги:

  1. Поскольку replace_existing установлено на false, текущие владельцы входного объекта сохраняются.
  2. Добавляются владельцы, указанные в рецепте для входного объекта.
  3. В связи с тем, что semantics равно PATCH, владельцы будут извлечены из Каталога для входного объекта.
  4. Извлеченные владельцы из Каталога добавляются к входному объекту.
  5. Вернуть входной объект.