Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Схема графа — это коллекция типов узлов, пограничных типов и их свойств, определяющих структуру графа. Хорошо разработанная схема графа упрощает запрос, обслуживание и расширение данных. В этой статье представлены лучшие практики по преобразованию табличных данных в lakehouse в эффективный помеченный граф свойств в Microsoft Fabric.
Используйте эти рекомендации перед началом моделирования в редакторе моделей графа. Пошаговые инструкции по созданию узлов и ребер см. в руководстве по графу. Примеры в этой статье используют пример набора данных Adventure Works.
В этой статье описывается поддерживаемый рабочий процесс моделирования Fabric. Для формальных концепций GQL и стандартного синтаксиса, описывающих структуры графов, см. типы графов GQL. Graph сейчас не поддерживает объявления типа графа напрямую.
Это важно
Граф в настоящее время не поддерживает эволюцию схемы. После создания модели графа и загрузки данных все структурные изменения, такие как добавление или удаление типов узлов, пограничных типов и свойств, требуют перезагрузки всех данных перед запросом обновленной структуры. Чтобы перезагрузить данные, нажмите кнопку "Сохранить " на верхней ленте. Этот процесс перезагрузки данных занимает время и потребляет емкость, поэтому перед началом моделирования запланируйте схему тщательно.
Необходимые условия
- Рабочая область Fabric с озером, содержащим исходные таблицы.
- Знакомство с редактором моделей графа.
- Этот шаг необязателен: используйте образец набора данных Adventure Works для выполнения примеров в этой статье.
Понятие типов узлов и типов рёбер
Прежде чем разрабатывать схему, ознакомьтесь с этими основными понятиями:
Тип узла определяет тип сущности в графе, например клиент, продукт или заказ. Она состоит из перечисленных ниже элементов.
-
Метка узла, которая определяет эту категорию узла. Например:
Customer. Метка используется в запросах для ссылки на узлы этого типа. - Исходная таблица, которая представляет собой таблицу Lakehouse, которая предоставляет исходные данные для типа узла. Например, таблица adventureworks_customers .
-
Ключевой столбец, который однозначно идентифицирует каждый узел. Например:
CustomerID_K. -
Свойства, которые являются столбцами из таблицы, которую можно добавить в качестве атрибутов на каждом узле. Например,
FirstName,LastNameиEmailAddress.
Узел — это отдельный экземпляр типа узла — одна строка в исходной таблице. Например, каждая строка в adventureworks_customers становится узлом Customer .
Тип края определяет тип связи между двумя типами узлов. Она состоит из перечисленных ниже элементов.
-
Граничная метка, которая является именем, определяющим эту категорию отношений. Например:
purchases. - Исходная таблица, содержащая данные связи между источником и целевыми узлами. Например, таблица adventureworks_orders .
- Тип исходного узла и тип целевого узла, которые соединяет ребро. Например,
Customerв качестве источника иOrderв качестве целевого объекта.
Ребро — это отдельный экземпляр типа ребра — одна строка в исходной таблице, которая соединяет два конкретных узла.
Замечание
В редакторе моделей графов кнопки "Добавить узел " и " Добавить пограничные кнопки" создают типы узлов и типы ребер, а не отдельные узлы или края.
Определение сущностей и связей
Начните с идентификации сущностей (вещей) и связей (подключений) в данных. Сущности становятся типами узлов. Соединения между сущностями становятся типами связей.
Задайте следующие вопросы о исходных таблицах:
- Что такое основные сущности? Строки, представляющие различные реальные вещи, являются кандидатами на типы узлов. Например, клиенты, продукты, заказы и сотрудники.
- Как эти сущности связаны друг с другом? Столбцы, ссылающиеся на строки в другой таблице (внешние ключи), указывают на типы ребер. Например,
CustomerID_FKвordersтаблице указывает наcustomersтаблицу, которая предлагает моделированиеpurchasesкрая. - Существуют ли внедренные сущности? Столбец в таблице может представлять собой самостоятельную сущность, которую имеет смысл извлечь в отдельный тип узла. Пример см. в разделе "Выбор типов узлов". Пошаговые инструкции см. в разделе Добавление нескольких типов узлов и ребер из одной исходной таблицы.
Выбор типов узлов
Создайте тип узла для каждой сущности, необходимой для запроса или самостоятельного обхода. Воспользуйтесь следующими инструкциями:
| Сделайте сущность типом узла , когда... | Сохраняйте его как свойство, когда... |
|---|---|
| Вам нужно добраться до него или пройти через него. | Это описательные метаданные, которые вы читаете, а не просматриваете. |
| Несколько сущностей имеют с ней связь. | Она уникальна для сущности, к которой она принадлежит. |
| Необходимо сопоставить или сгруппировать их непосредственно в запросах. | Вы фильтруете его только как свойство другой сущности. |
Пример: В наборе данных Adventure Works Country начинается как столбец на таблице employees. Если вам нужно запросить "какие сотрудники живут в той же стране?" или "какие страны имеют больше всего сотрудников?", извлеките Country в свой собственный тип узла. Если вам нужно отобразить только страну сотрудника в качестве метки, оставьте это свойством.
Выбор ключевых столбцов
Для каждого типа узла требуется ключевой столбец (или составной ключ), который однозначно идентифицирует каждый узел. Тщательно выберите ключи:
-
Используйте существующие уникальные идентификаторы из исходных таблиц. Например,
CustomerID_KилиProductID_K. -
Избегайте суррогатных ключей, которые не имеют бизнес-смысла , если не существует естественного ключа. Например, отдайте предпочтение
CustomerIDперед автоинкрементом номера строки. -
Используйте составные ключи , если один столбец не гарантирует уникальность. Например, узлу может потребоваться и
ProductVersion, иProductIDв качестве ключей дляVersionNumber. - Сопоставление типов данных между ключевыми столбцами и столбцами внешнего ключа, используемыми в пограничных сопоставлениях. Несогласованные типы вызывают сбои создания пограничных вычислений.
Добавление свойств узла
При создании типа узла выберите свойства из исходной таблицы, которые необходимо включить в тип узла, особенно свойства, для которых правила доступа OneLake Security были применены к базовой исходной таблице.
Добавьте свойства во время создания узла с помощью кнопки +Добавить свойство . Кроме того, добавьте свойства к существующему узлу, дважды щелкнув тип узла в редакторе моделей графа, чтобы открыть диалоговое окно редактирования узла и выбрав "Изменить определение". Выберите "Добавить свойство" и выберите столбцы из исходной таблицы.
Каждое свойство становится частью графовых данных, которые необходимо загружать и поддерживать. Избегайте добавления свойств, которые не нужны для запросов или анализа.
Для каждого типа узла сохраняйте только свойства, которые:
- Требуется для уникальности узла (ключевые столбцы)
- Используется в
WHEREфильтрах илиRETURNпроекциях в запросах - Требуется для последующего анализа или визуализации
Дополнительные сведения о том, как число свойств влияет на производительность запросов, см. в разделе "Возвращать только необходимые свойства".
Выбор типов данных
Выберите типы данных, представляющие исходные значения и операции, выполняемые запросами:
- Используйте
INTдля идентификаторов целых чисел и счётов, когда исходные значения числовые. - Используйте
ZONED DATETIMEдля меток времени вместо строковых дат. - Используйте
BOOLEANдля флагов true/false вместо строковых значений, например"yes"или"no".
Полный список поддерживаемых типов см. в разделе "Текущие ограничения" — типы данных.
Выбор типов рёбер
Типы рёбер определяют связи между типами узлов. Каждый тип ребра связывает тип исходного узла с типом целевого узла через исходную таблицу.
Следуйте этим рекомендациям:
-
Используйте описательные метки , которые считываются как глаголы или фразы глаголов. Например,
purchases,sells,livesIn, иbelongsTo. Хорошо именованный край упрощает чтение запросов. - Внимательно рассмотрим направление. Ребра в графе ориентированные. Выберите направление, которое лучше всего представляет реальные отношения. Например,
Customer— -- выглядит более естественно, >OrderчемOrder--приобретеноКем — >Customer. - Присвойте разные имена типам связей, которые соединяют разные пары типов узлов. Если и "сотрудник продает заказ", и "клиент покупает заказ" подключаются к
Order, назовите ихsellsиpurchases, чтобы не давать им одинаковые метки. Дополнительные сведения см. в разделе об ограничениях на создание сетей типа edge.
Добавление свойств к типам рёбер
Как и узлы, типы ребер начинаются без свойств. При необходимости можно добавить свойства, когда данные описывают саму связь, а не любую конечную точку. Свойства edge наиболее полезны при написании запросов GQL, которые должны фильтровать, агрегировать или возвращать данные о самой связи.
Чтобы добавить свойство, дважды щелкните тип края в редакторе моделей графа, чтобы открыть диалоговое окно редактирования края и выберите "Изменить определение". Выберите "Добавить свойство" и выберите столбцы из исходной таблицы.
Когда добавлять свойства ребра: Если столбец отвечает на вопрос «сколько?», «когда?» или «каким образом?» о связи между двумя узлами, его следует отнести к ребру, а не к одному из узлов.
Пример: В наборе данных Adventure Works ребро соединяет с contains через таблицу Order. Столбцы, такие как OrderQty, UnitPrice и LineTotal, описывают взаимосвязь: сколько единиц товара было в конкретном заказе и по какой цене. Столбцы, такие как OrderDate или ShipDate, которые описывают сам порядок и принадлежат типу узла Order, а не ребру.
Это важно
Исходная таблица для края должна содержать столбцы, соответствующие ключевым столбцам типов источников и целевых узлов в значениях и типе данных. Таблицы, используемые для создания типов узлов, также могут служить пограничными исходными таблицами, если они соответствуют этому требованию.
Распространенные шаблоны преобразования таблиц в графы
В следующей таблице приводится сводка того, как некоторые распространенные структуры табличных данных преобразуются в элементы графа.
| Табличная структура | Результат графа | Пример |
|---|---|---|
| Один ко многим: Родительская таблица и дочерняя таблица с внешним ключом | Два типа узлов, подключенные к пограничному типу. |
Customer
--
покупки->Order |
| Многие ко многим: Посредническая таблица, связывающая две таблицы | Пограничный тип между двумя типами узлов. |
Vendor
--
производит-->Product |
| Внедренная сущность: Столбец, представляющий общую сущность | Извлеченный тип узла с краем. |
Employee
--
живёт в-->Country |
| Иерархии: Цепочка родительских дочерних таблиц | Типы узлов, связанные ребрами на каждом уровне. |
Product
--
isOfType-->Subcategory --принадлежит-->Category |
Пошаговое руководство по встроенному шаблону сущностей см. в разделе "Добавление нескольких типов узлов и ребер" из одной исходной таблицы.
Изменение схемы графа
Graph не применяет структурные изменения постепенно. При изменении типов узлов, типов рёбер, свойств, ключей или отображений, сохранение существующей модели графа перезагружает все её данные и восстанавливает запрашиваемый граф.
Чтобы изменить схему графа, выполните приведенные действия.
- Откройте существующий элемент графа в редакторе моделей графов.
- Добавляйте, редактируйте или удаляйте типы узлов, ребер, свойства, ключи и отображения по мере необходимости.
- Выберите «Сохранить» для проверки обновлённой модели и загрузки всех данных графа.
- После завершения перезагрузки выполните репрезентативные запросы для проверки обновлённой структуры и данных.