Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Замечание
В этой статье рассматривается архитектура решения из архитектуры решений CI/CD и ALM (управление жизненным циклом приложений) для потока данных 2-го поколения, которая зависит от интеграции библиотек переменных и применяется только к потоку данных 2-го поколения с поддержкой CI/CD.
Библиотеки переменных Fabric в Dataflow 2-го поколения позволяют централизованно и повторно использовать управление конфигурацией в различных средах. Ссылаясь на переменные непосредственно в скриптах потока данных, вы можете динамически настраивать поведение без жесткого ввода значений, что идеально подходит для рабочих процессов CI/CD. Эта интеграция упрощает развертывание на разных этапах, позволяя на этапе выполнения использовать значения, специфичные для рабочей области (например, идентификаторы Lakehouse или рабочей области), что обеспечивает большую адаптируемость и удобство поддержки потоков данных.
В этом руководстве описывается пример решения, использующего переменные ссылки в потоке данных, и показано, как:
- Установка переменных: использование библиотек переменных Fabric и их различных типов данных
- Источник, управляемый переменной: использование Lakehouse с примером набора данных WideWorldImpoters в качестве источника
- Логика на основе переменных: использование входных мини-приложений, доступных во всем интерфейсе потока данных
- Назначение, управляемое переменной: использование хранилища в качестве назначения
Замечание
Основные понятия, представленные в этой статье, являются универсальными для потока данных 2-го поколения и применимы к другим источникам и назначениям за пределами указанных здесь.
Сценарий
Поток данных, используемый в этом сценарии, прост, но основные принципы, описанные в этом сценарии, применяются ко всем типам потоков данных. Он подключается к таблице с именем dimension_city из примера набора данных Wide World Importers, хранящегося в Lakehouse. Он фильтрует строки, где столбец SalesTerritory равен юго-востоку, и загружает результат в новую таблицу с именем City в хранилище. Все компоненты — Lakehouse, Warehouse и Dataflow — находятся в одной рабочей области. Для динамического потока данных используются переменные для управления исходной таблицей, значением фильтра и целевой таблицей. Эти изменения позволяют потоку данных выполняться со значениями, хранящимися в библиотеках переменных Fabric, а не жестко закодированных.
Установка переменных
Замечание
Обязательно включите библиотеки переменных Fabric для вашей организации или группы безопасности. Узнайте больше о начале работы с библиотеками переменных.
Рекомендуется всегда иметь в виду дизайн перед созданием решения и определение, какие компоненты из вашего потока данных динамически извлекаются из библиотеки переменных. Хотя вы можете создать несколько библиотек в рабочей области, в этом примере используется одна библиотека с именем My Library , которая содержит переменные, которые использует поток данных 2-го поколения:
| Имя переменной | Тип | Цель |
|---|---|---|
| WorkspaceId | Гид | Используется для сценариев источника данных и назначения в потоке данных |
| LakehouseId | Гид | Определяет идентификатор лейкхауса, используемого в качестве источника |
| WarehouseId | Гид | Определяет идентификатор хранилища, используемого в качестве назначения |
| Территория | String | Задает значение, которое следует использовать для управления логикой фильтра в потоке данных. |
Обязательно задайте значения по умолчанию, соответствующие собственной среде, а затем сохраните библиотеку переменных.
Источник, управляемый переменной
При использовании любого соединителя Fabric , например Lakehouse, Warehouse или Fabric SQL, они все следуют одной структуре навигации и используют один и тот же формат входных данных. В этом сценарии ни один из соединителей не требует ручного ввода для установления подключения. Однако каждый из них показывает, к какой рабочей области и элементу он подключается с помощью шагов навигации в запросе. Например, первый шаг навигации включает идентификатор рабочей области, к которому подключается запрос.
Цель состоит в том, чтобы заменить жестко закодированные значения в строке формул переменными. В частности, вы хотите использовать переменные WorkspaceId и LakehouseId для выполнения этой логики. Сначала необходимо перенести эти переменные в поток данных 2-го поколения. Рекомендуемый подход — создать запросы для каждой отдельной переменной для централизованного управления любыми переменными, которые планируется использовать. Для этого создайте пустой запрос, перейдя в запись "Получить данные " на ленте и выбрав параметр "Пустой запрос" в раскрывающемся меню.
При выборе этого параметра откроется новое диалоговое окно, в котором можно увидеть пустой запрос, созданный. Чтобы принести новый пустой запрос, нажмите кнопку "ОК".
После создания и отображения запроса в потоке данных переименуйте его в WorkspaceId и замените формулу на шаге "Источник":
Variable.ValueOrDefault("$(/**/My Library/WorkspaceId)", "Your Workspace ID")
Этот скрипт в основном является тем, который может определить, какую библиотеку и переменную следует получить. Второй аргумент Variable.ValueOrDefault функции определяет, какое значение следует указать, когда переменная не может быть возвращена.
Замечание
Обязательно замените строку "Ваш идентификатор рабочей области", второй аргумент функции с соответствующим значением в вашей среде и сохраните запрос.
Повторите этот процесс для переменной LakehouseId и создайте запрос с тем же именем, что и переменная, но используйте следующую формулу для шага Source:
Variable.ValueOrDefault("$(/**/My Library/LakehouseId)", "Your Lakehouse ID")
Замечание
Обязательно замените строку "Your Lakehouse ID", которая является вторым аргументом функции, соответствующим значением в вашей среде и сохраните запрос.
После создания обоих запросов можно обновить скрипт запроса, чтобы использовать их вместо жестко закодированных значений. Это включает в себя ручное замена исходных значений в строке формул на ссылки на запросы WorkspaceId и LakehouseId. Исходный скрипт запроса выглядит следующим образом:
let
Source = Lakehouse.Contents([]),
#"Navigation 1" = Source{[workspaceId = "8b325b2b-ad69-4103-93ae-d6880d9f87c6"]}[Data],
#"Navigation 2" = #"Navigation 1"{[lakehouseId = "2455f240-7345-4c8b-8524-c1abbf107d07"]}[Data],
#"Navigation 3" = #"Navigation 2"{[Id = "dimension_city", ItemKind = "Table"]}[Data],
#"Filtered rows" = Table.SelectRows(#"Navigation 3", each ([SalesTerritory] = "Southeast")),
#"Removed columns" = Table.RemoveColumns(#"Filtered rows", {"ValidFrom", "ValidTo", "LineageKey"})
in
#"Removed columns"
После обновления ссылок на шаги навигации новый обновленный скрипт может выглядеть следующим образом:
let
Source = Lakehouse.Contents([]),
#"Navigation 1" = Source{[workspaceId = WorkspaceId]}[Data],
#"Navigation 2" = #"Navigation 1"{[lakehouseId = LakehouseId]}[Data],
#"Navigation 3" = #"Navigation 2"{[Id = "dimension_city", ItemKind = "Table"]}[Data],
#"Filtered rows" = Table.SelectRows(#"Navigation 3", each ([SalesTerritory] = "Southeast")),
#"Removed columns" = Table.RemoveColumns(#"Filtered rows", {"ValidFrom", "ValidTo", "LineageKey"})
in
#"Removed columns"
И вы заметили, что он всё ещё правильно оценивает предварительный просмотр данных в редакторе потока данных с прямыми ссылками, созданными в режиме диаграммы между всеми участвующими запросами.
Логика на основе переменных
Теперь, когда источник использует переменные, можно сосредоточиться на изменении логики преобразования потока данных. В этом сценарии шаг фильтра заключается в том, где применяется логика, а значение, отфильтрованное в настоящее время жестко закодированное как юго-восток, должно быть заменено запросом, ссылающимся на переменную. Для этого необходимо повторить тот же процесс создания пустого запроса и перепрофилировать формулу его шага "Источник", чтобы сохранить переменную для территории и изменить имя запроса на имя переменной. Используйте следующий скрипт:
Variable.ValueOrDefault("$(/**/My Library/Territory)", "Mideast")
Учитывая, что шаг фильтра был создан с помощью пользовательского интерфейса, вы можете переходить к шагу "Отфильтрованные строки", дважды выберите его и получите диалоговое окно параметров для шага фильтра. Это диалоговое окно позволяет вам выбрать, с помощью виджета ввода, хотите ли вы использовать запрос вместо статического значения:
После выбора параметра "Выбрать запрос" появится раскрывающийся список для отображения всех запросов, которые можно выбрать. В этом списке можно выбрать только что созданный запрос территории .
После нажатия кнопки "ОК" обратите внимание, что представление схемы уже создало связь между запросом "Территория" и используемым запросом. Не только это, но и предварительная версия данных теперь показывает сведения о территории Mideast .
Переменно управляемое назначение
Замечание
Рекомендуется ознакомиться с понятием назначения данных в Dataflow 2-го поколения и как его скрипт mashup создается из статьи о назначениях данных и управляемых параметрах.
Последним компонентом для изменения в этом сценарии является назначение. Хотя сведения о назначении данных можно найти в редакторе потока данных, чтобы изменить эту часть потока данных, необходимо использовать Git или REST API.
В этом руководстве показано, как внести изменения с помощью Git. Прежде чем вносить изменения с помощью Git, обязательно выполните следующие действия.
- Создайте запрос для переменной WarehouseId: выполните тот же процесс, который описан в предыдущих разделах, чтобы создать пустой запрос и заменить формулу для шага source:
Variable.ValueOrDefault("$(/**/My Library/WarehouseId)", "Your Warehouse ID")
Замечание
Обязательно замените строку "Идентификатор хранилища", второй аргумент функции с соответствующим значением в вашей среде и сохраните запрос.
Это важно
Убедитесь, что во всех запросах, содержащих переменные, отключена промежуточная стадия.
- Сохраните поток данных: нажмите кнопку "Сохранить" на домашней вкладке ленты.
После сохранения потока данных обязательно зафиксируйте изменения в репозитории Git и перейдите к репозиторию, чтобы просмотреть файл mashup.pq потока данных. При просмотре файла mashup.pq найдите запрос, с которым вы связали назначение данных. В этом сценарии имя этого запроса dimension_city. Вы видите атрибут записи над этим именем запроса:
[DataDestinations = {[Definition = [Kind = "Reference", QueryName = "dimension_city_DataDestination", IsNewTarget = true], Settings = [Kind = "Manual", AllowCreation = true, ColumnSettings = [Mappings = {[SourceColumnName = "CityKey", DestinationColumnName = "CityKey"], [SourceColumnName = "WWICityID", DestinationColumnName = "WWICityID"], [SourceColumnName = "City", DestinationColumnName = "City"], [SourceColumnName = "StateProvince", DestinationColumnName = "StateProvince"], [SourceColumnName = "Country", DestinationColumnName = "Country"], [SourceColumnName = "Continent", DestinationColumnName = "Continent"], [SourceColumnName = "SalesTerritory", DestinationColumnName = "SalesTerritory"], [SourceColumnName = "Region", DestinationColumnName = "Region"], [SourceColumnName = "Subregion", DestinationColumnName = "Subregion"], [SourceColumnName = "Location", DestinationColumnName = "Location"], [SourceColumnName = "LatestRecordedPopulation", DestinationColumnName = "LatestRecordedPopulation"]}], DynamicSchema = false, UpdateMethod = [Kind = "Replace"], TypeSettings = [Kind = "Table"]]]}]
shared dimension_city = let
Эта запись атрибута содержит поле с именем QueryName, которое содержит имя запроса с логикой назначения данных, связанной с этим запросом. Этот запрос выглядит следующим образом:
shared dimension_city_DataDestination = let
Pattern = Fabric.Warehouse([HierarchicalNavigation = null, CreateNavigationProperties = false]),
Navigation_1 = Pattern{[workspaceId = "8b325b2b-ad69-4103-93ae-d6880d9f87c6"]}[Data],
Navigation_2 = Navigation_1{[warehouseId = "527ba9c1-4077-433f-a491-9ef370e9230a"]}[Data],
TableNavigation = Navigation_2{[Item = "City", Schema = "dbo"]}?[Data]?
in
TableNavigation
Обратите внимание, что, аналогично скрипту источника для Lakehouse, этот сценарий для назначения имеет аналогичный шаблон, в котором он жестко кодирует идентификатор рабочей области, который необходимо использовать, а также warehouseId. Замените эти фиксированные значения идентификаторами созданных запросов, и скрипт должен выглядеть следующим образом:
shared dimension_city_DataDestination = let
Pattern = Fabric.Warehouse([HierarchicalNavigation = null, CreateNavigationProperties = false]),
Navigation_1 = Pattern{[workspaceId = WorkspaceId]}[Data],
Navigation_2 = Navigation_1{[warehouseId = WarehouseId]}[Data],
TableNavigation = Navigation_2{[Item = "City", Schema = "dbo"]}?[Data]?
in
TableNavigation
Теперь вы можете зафиксировать это изменение и обновить ваш поток данных, используя изменения через функцию управления версиями в вашей рабочей области.
Теперь вы можете запустить поток данных, который использует значения из библиотек переменных.