Трансформеры (Transformers)
Трансформеры позволяют модифицировать метаданные перед их поступлением в приемник (Sink). С их помощью можно добавлять теги, назначать владельцев, изменять свойства и многое другое. Более того, трансформеры обеспечивают возможность управлять поступающими метаданными без необходимости изменения кода фреймворка инджестора. Чтобы подключить трансформеры, необходимо добавить соответствующую конфигурацию в разделе transformers в рецепте инджестора.
Поддерживаемые трансформеры для датасетов
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"]
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 тега urntag: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 (например, urndomain: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 (например, urndomain: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, трансформер выполнит следующие действия:
- Поскольку replace_existing установлено как true, текущие владельцы входного объекта удалятся.
- Будут добавлены владельцы, указанные в рецепте для входного объекта.
- Так как semantics равно OVERWRITE, то нет необходимости извлекать владельцев, имеющихся в Каталоге данных для входного объекта.
- Вернуть входной объект.
Если replace_existing установлено как true и semantics установлено PATCH тогда:
- Поскольку replace_existing установлено как true, то сначала удалятся владельцы у входного объекта.
- Будут добавлены владельцы, указанные в рецепте для входного объекта.
- Так как semantics установлено как PATCH, то будут извлечены владельцы из Каталога для входного объекта.
- Будут добавлены владельцы, извлеченные из Каталога, для входного объекта.
- Вернуть входной объект.
Если параметр replace_existing установлен в false, а semantics задано как OVERWRITE, тогда выполняются следующие действия:
- Поскольку replace_existing задан как false, текущие владельцы входного объекта сохраняются.
- Добавляются владельцы, указанные в рецепте для входного объекта.
- Так как semantics равно OVERWRITE, нет необходимости извлекать владельцев из Каталога для входного объекта.
- Вернуть входной объект.
Если параметр replace_existing установлен на false, а semantics задано как PATCH, тогда выполняются следующие шаги:
- Поскольку replace_existing установлено на false, текущие владельцы входного объекта сохраняются.
- Добавляются владельцы, указанные в рецепте для входного объекта.
- В связи с тем, что semantics равно PATCH, владельцы будут извлечены из Каталога для входного объекта.
- Извлеченные владельцы из Каталога добавляются к входному объекту.
- Вернуть входной объект.