메모
이 기능은 현재 공개 미리 보기로 제공됩니다. 이 미리 보기는 서비스 수준 계약 없이 제공되며 프로덕션 워크로드에는 사용하지 않는 것이 좋습니다. 특정 기능이 지원되지 않거나 기능이 제한될 수 있습니다. 자세한 내용은 Microsoft Azure 미리 보기에 대한 사용 약관 참조하세요.
그래프 스키마는 그래프의 구조를 정의하는 노드 형식, 에지 형식 및 해당 속성의 컬렉션입니다. 잘 디자인된 그래프 스키마를 사용하면 데이터를 더 쉽게 쿼리, 유지 관리 및 확장할 수 있습니다. 이 문서에서는 레이크하우스의 테이블 형식 데이터를 Microsoft Fabric에서 효과적인 레이블이 지정된 속성 그래프로 변환하기 위한 모범 사례를 제공합니다.
그래프 모델 편집기에서 모델링을 시작하기 전에 다음 지침을 사용합니다. 노드 및 에지 만들기에 대한 단계별 지침은 그래프 자습서를 참조하세요. 이 문서의 예제에서는 Adventure Works 샘플 데이터 세트를 사용합니다.
중요합니다
그래프는 현재 스키마 진화를 지원하지 않습니다. 데이터를 모델링하면 노드, 에지 및 속성의 구조가 고정됩니다. 속성 추가, 레이블 수정 또는 관계 유형 변경과 같은 구조적 변경은 새 그래프 모델을 만들고 모든 데이터를 다시 로드해야 합니다. 이 프로세스는 시간이 걸리고 용량을 사용하므로 모델링을 시작하기 전에 스키마를 철저히 계획합니다.
사전 요구 사항
- 원본 테이블이 포함된 lakehouse가 있는 Fabric 작업 영역.
- 그래프 모델 편집기를 잘 알고 있습니다.
- 선택 사항: 이 문서의 예제를 따르기 위한 Adventure Works 샘플 데이터 세트 입니다.
노드 형식 및 에지 형식 이해
스키마를 디자인하기 전에 다음 핵심 개념을 이해합니다.
노드 형식은 고객, 제품 또는 주문과 같은 그래프의 엔터티 종류를 정의합니다. 이는 다음으로 구성됩니다.
- 이 노드 범주를 식별하는 이름인 레이블입니다.
Customer을 예로 들 수 있습니다. 쿼리에서 레이블을 사용하여 이 형식의 노드를 참조합니다. - 노드 형식에 대한 원본 데이터를 제공하는 lakehouse 테이블인 매핑 테이블입니다. 예를 들어 adventureworks_customers 테이블입니다.
- 각 노드를 고유하게 식별하는 키 열 입니다(그래프 모델 편집기에서 레이블이 지정된 ID ).
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. -
비즈니스 의미가 없는 서로게이트 키는 피하도록 하십시오, 자연 키가 없는 경우를 제외하고. 예를 들어 자동 증가 행 번호보다
을(를) 선호합니다. - 단일 열이 고유성을 보장하지 않는 경우 복합 키를 사용합니다. 예를 들어,
ProductVersion노드는 키로서ProductID와VersionNumber둘 다 필요할 수 있습니다. - 키 열과 에지 매핑에 사용된 외래 키 열 간의 데이터 형식을 일치시키십시오. 형식이 일치하지 않으면 에지 만들기 오류가 발생합니다.
팁 (조언)
쿼리 엔진이 키 속성에 대한 직접 조회를 수행할 수 있도록 노드 키 제약 조건을 정의합니다. 이 최적화는 키별로 특정 노드를 조회하는 쿼리의 속도를 향상합니다.
에지 형식 선택
에지 형식은 노드 형식 간의 관계를 정의합니다. 각 에지 형식은 매핑 테이블을 통해 원본 노드 형식을 대상 노드 형식에 연결합니다.
다음 지침을 따릅니다.
- 동사 또는 동사구처럼 읽히는 설명적 레이블을 사용하십시오. 예:
purchases,sells,livesIn및belongsTo. 잘 명명된 에지를 사용하면 쿼리를 더 쉽게 읽을 수 있습니다. - 방향을 신중하게 고려합니다. 그래프의 가장자리가 지시됩니다. 실제 관계를 가장 잘 나타내는 방향을 선택합니다. 예를 들어
Customer--구매라는 표현이>OrderOrder--보다 더 자연스럽게 읽힙니다. - 서로 다른 노드 형식 쌍을 연결하는 에지 형식에 고유한 이름을 지정합니다. "직원이 주문을 판매"하고 "고객이 주문을 구입"하는 것이 모두
Order에 연결되는 경우, 동일한 레이블을 둘 다 제공하는 대신sells과purchases로 각각 이름을 지정합니다. 자세한 내용은 에지 만들기 제한 사항을 참조하세요.
에지 형식에 속성 추가
노드 형식과 달리 에지 형식은 속성 없이 시작합니다. 데이터가 두 엔드포인트가 아닌 관계 자체를 설명할 때 필요에 따라 속성을 추가할 수 있습니다. 에지 속성은 관계 자체에 대한 데이터를 필터링, 집계 또는 반환해야 하는 GQL 쿼리를 작성할 때 가장 유용합니다.
속성을 추가하려면 그래프 모델 편집기에서 에지 유형을 두 번 클릭하여 에지 스키마 편집 대화 상자를 열고 속성 추가를 선택한 다음 매핑 테이블에서 열을 선택합니다.
에지 속성을 추가하는 경우: 열이 두 노드 간의 연결에 대해 "얼마나 됩니까?", "언제?", 또는 "어떤 방식으로?" 라고 대답하면 두 노드가 아닌 에지에 속합니다.
예제: Adventure Works 데이터 세트에서 contains 에지는 Order을(를) Product을(를) 통해 adventureworks_orders 테이블로 연결합니다.
OrderQty, UnitPrice, 그리고 LineTotal 열은 특정 주문에서 제품 개수가 얼마였는지, 그리고 어떤 가격에 책정되었는지를 설명합니다. 열은 OrderDate이나 ShipDate처럼 순서를 설명하며, 에지가 아닌 Order 노드 유형에 속합니다.
중요합니다
에지의 매핑 테이블에는 값과 데이터 형식의 원본 및 대상 노드 형식의 키 열과 일치하는 열이 포함되어야 합니다. 노드 형식을 만드는 데 사용하는 테이블은 이 요구 사항을 충족하는 경우 에지 매핑 테이블로도 사용할 수 있습니다.
불필요한 속성 제거
매핑 테이블에서 노드 형식을 만들면 테이블의 모든 열이 기본적으로 속성이 됩니다. 과도한 속성은 스토리지를 늘리고, 쿼리를 느리게 하며, 그래프를 유지 관리하기 어렵게 만듭니다. 이러한 이유로 쿼리 또는 분석에 필요하지 않은 속성을 제거합니다.
메모
에지 형식은 다르게 작동합니다. 속성 없이 시작합니다. 에지 스키마 편집 대화 상자에서 속성 추가 단추를 사용하여 필요한 속성만 수동으로 추가합니다.
각 노드 유형에 대해 다음과 같은 속성만 유지합니다.
- 노드의 고유성을 위해 필요(키 열을 사용하는 경우)
- 쿼리의
WHERE필터 또는RETURN프로젝션에 사용됨 - 다운스트림 분석 또는 시각화에 필요
속성 수가 쿼리 성능에 미치는 영향에 대한 자세한 내용은 필요한 속성만 반환을 참조하세요.
데이터 형식 선택
각 속성에 대해 가장 구체적인 데이터 형식을 선택합니다. 올바른 형식은 스토리지 효율성과 쿼리 성능을 모두 향상시킵니다.
- 숫자 식별자와 개수를 위해
INT또는UINT64을 사용하세요. 숫자 비교는 문자열 비교보다 빠릅니다. - 문자열 형식의 날짜 대신 타임스탬프에 사용합니다
ZONED DATETIME. - true/false 플래그에는
BOOLEAN를 사용하고,"yes"나"no"같은 문자열 값은 사용하지 마세요.
지원되는 형식의 전체 목록은 현재 제한 사항인 데이터 형식을 참조하세요.
일반적인 표 형식에서 그래프로의 변환 패턴
다음 표에서는 몇 가지 일반적인 테이블 형식 데이터 구조가 그래프 요소로 변환되는 방법을 요약합니다.
| 표 형식 구조 | 그래프 결과 | 예시 |
|---|---|---|
| 일대다: 외래 키가 있는 부모 테이블 + 자식 테이블 | 에지 형식으로 연결된 두 노드 형식입니다. |
Customer
--
구매-->Order |
| 다대다 관계: 두 테이블을 연결하는 조인 테이블 | 두 노드 형식 사이의 에지 형식입니다. |
Vendor
--
생성합니다>Product |
| 포함된 엔터티: 공유 엔터티를 나타내는 열 | 에지가 있는 추출된 노드 형식입니다. |
Employee
--
livesIn-->Country |
| 계층 구조: 부모-자식 테이블 체인 | 각 수준의 에지로 연결된 노드 형식입니다. |
Product
--
isOfType-->Subcategory --belongsTo-->Category |
포함된 엔터티 패턴의 단계별 연습은 하나의 매핑 테이블에서 여러 노드 및 에지 형식 추가를 참조하세요.
그래프 스키마 변경
그래프는 스키마 진화를 지원하지 않습니다. 그래프 모델을 저장하면 노드 형식, 에지 형식 및 해당 속성의 구조가 수정됩니다. 노드 형식에 속성 추가, 에지 형식 제거 또는 키 열 변경과 같은 구조적 변경을 수행하려면 새 그래프 모델을 만들고 데이터를 다시 로드해야 합니다.
그래프 스키마를 변경하려면 다음을 수행합니다.
- 작업 영역에서 동일한 레이크하우스에 연결하는 새 그래프 항목을 만듭니다.
- 그래프 모델 편집기에서 새 속성이나 수정된 속성을 포함하여 필요한 노드 형식 및 에지 형식을 추가합니다.
- 키 열 및 엣지 매핑을 구성합니다. 데이터 형식이 키 열과 외래 키 열 간에 일치하는지 확인합니다.
- 저장을 선택하여 데이터를 수집하고 새 그래프를 작성합니다.
- 새 그래프를 가리키도록 쿼리 세트를 업데이트합니다.
- 새 그래프가 예상대로 작동하는지 확인한 후 필요하지 않은 경우 원래 그래프 항목을 삭제합니다.