비고
이 기능은 현재 공개 미리 보기로 제공됩니다. 이 미리 보기는 서비스 수준 계약 없이 제공되며 프로덕션 워크로드에는 사용하지 않는 것이 좋습니다. 특정 기능이 지원되지 않거나 기능이 제한될 수 있습니다. 자세한 내용은 Microsoft Azure Preview에 대한 추가 사용 약관을 참조하세요.
그래프 형식은 존재할 수 있는 노드와 가장자리를 정의하여 그래프의 구조를 설명합니다. 청사진 또는 스키마처럼 생각하면 레이블 및 속성 측면에서 그래프의 노드 및 가장자리 모양을 지정합니다. 에지(노드 간 연결)의 경우 어떤 종류의 에지를 연결할 수 있는 노드 종류를 지정합니다. 관계형 데이터베이스에 익숙한 경우 그래프 형식은 ER 다이어그램에서 테이블 및 외래 키 관계를 설명하는 방법과 유사하게 작동합니다.
중요합니다
이 글은 오직 소셜 네트워크 예시 그래프 데이터셋만을 사용합니다.
그래프 형식은 다음과 같은 몇 가지 주요 이점을 제공합니다.
- 데이터 유효성 검사: 그래프에 유효한 노드와 에지 조합만 포함되어 있는지 확인합니다.
- 쿼리 최적화: 쿼리 엔진이 성능 향상을 위해 데이터 구조를 이해하는 데 도움이 됩니다.
- 설명서: 개발자 및 분석가를 위한 그래프 구조에 대한 명확한 사양으로 사용됩니다.
비고
이 문서에서는 개념적으로 그래프 형식을 소개하고 GQL 표준에 정의된 구문을 사용하여 해당 정의를 보여 줍니다. 그러나 이 구문은 현재 Microsoft Fabric의 그래프에 대해 직접 지원되지 않습니다.
구조적으로 그래프 형식은 그래프 형식의 허용되는 노드 형식 및 에지 형식을 정의하고 해당 그래프를 추가로 제한하는 추가 제약 조건을 정의합니다.
비고
그래프 형식은 노드 형식, 에지 형식 및 제약 조건 정의 집합을 제공하여 정의됩니다. 이러한 정의의 순서를 변경해도 정의되는 그래프 형식은 변경되지 않습니다.
노드 형식 정의
노드 형식은 노드에 포함할 수 있는 레이블 및 속성 형식을 지정합니다. 기본 노드 형식을 지정하는 방법은 다음과 같습니다.
(:Organization => {
id :: UINT64 NOT NULL,
name :: STRING,
url :: STRING
})
이 예제에서는 다음을 사용하여 노드를 정의하는 노드 형식을 만듭니다.
- 레이블
Organization입니다. -
id부호 없는 정수 값을 보유하며 null일 수 없는 속성입니다. -
name문자열 값을 보유하는 속성입니다(null일 수 있음). -
url문자열 값을 보유하는 속성입니다(null일 수 있음).
연산자는 :: 각 속성에 대한 데이터 형식을 지정하고 NOT NULL 속성에 항상 값이 있어야 임을 나타냅니다.
비고
NOT NULL 는 SQL과 다른 GQL 형식의 일부로 간주됩니다.
노드 형식은 더 많은 속성과 데이터 형식을 사용하여 더 복잡할 수도 있습니다.
(:Person => {
id :: UINT64 NOT NULL,
creationDate :: ZONED DATETIME,
firstName :: STRING,
lastName :: STRING,
gender :: STRING,
birthday :: UINT64,
browserUsed :: STRING,
locationIP :: STRING
})
여러 레이블이 있는 노드 형식
노드에는 상속 및 분류를 지원하는 여러 레이블이 있을 수 있습니다. 노드 형식에 대해 여러 레이블을 지정할 수 있지만 하나의 레이블("키 레이블")은 노드 유형을 고유하게 식별 해야 합니다 (레이블을 하나만 지정하면 노드 형식의 키 레이블로 사용됩니다).
예를 들어 다음을 고려합니다.
(:University => :Organization),
(:Company => :Organization)
University
Company 여기서는 정의된 두 노드 형식의 키 레이블이며 두 Organization 형식에서 공유하는 보조 레이블입니다. 키 레이블과 보조 레이블이 각 노드 형식으로 => 구분되는 방식을 확인합니다. 이 방법은 대학과 회사 모두 조직의 유형인 형식 계층 구조를 만듭니다.
키 레이블은 노드 형식을 식별하므로 이 구문을 사용할 때 보조 레이블로 식별되는 노드 형식의 속성이 자동으로 상속됩니다. 따라서 이전 구문을 이해하여 다음 노드 형식을 효과적으로 정의할 수 있습니다.
(:University => :Organization {
id :: UINT64 NOT NULL,
name :: STRING,
url :: STRING
}),
(:Company => :Organization {
id :: UINT64 NOT NULL,
name :: STRING,
url :: STRING
})
비고
키 레이블은 노드 형식 계층 구조를 정의할 때 필수적입니다. 여러 형식이 동일한 레이블을 공유할 때 참조하는 노드 형식을 시스템에서 이해하는 데 도움이 됩니다.
상속 바로 가기를 사용하여 시간 절약
부모 노드 형식에서 레이블 및 속성을 반복하면 지루하고 오류가 발생하기 쉽습니다. Microsoft Fabric의 그래프는 연산자를 += 제공하므로 추가(편집되지 않은) 레이블 및 속성 형식만 지정할 수 있습니다.
(:Post => :Message += {
language :: STRING,
imageFile :: STRING
})
추가 속성이 지정되지 않은 경우 그래프는 부모 형식에서 필요한 모든 속성을 상속합니다.
(:Comment => :Message) -- Same as: (:Comment => :Message += {})
추상 노드 형식 사용
그래프에 해당 형식의 구체적인 노드가 없는 경우에도 계층 구조를 빌드하기 위한 노드 형식만 정의할 수 있습니다. 추상 노드 형식은 개념적 그룹화 및 공유 속성 집합을 만드는 데 유용합니다. 이를 위해 Microsoft Fabric의 그래프와 같이 ABSTRACT 노드 형식을 정의할 수 있습니다.
ABSTRACT (:Message => {
id :: UINT64 NOT NULL,
creationDate :: ZONED DATETIME,
browserUsed :: STRING,
locationIP :: STRING,
content :: STRING,
length :: UINT64
})
추상 노드 형식은 직접 그래프 로드에 사용할 수 없으며 계층 구조를 구성하고 공유 속성을 정의하기 위해서만 존재합니다. 추상 형식에서 상속되는 구체적인 노드 형식은 데이터로 로드할 수 있습니다.
에지 형식 및 패밀리 정의
에지 형식은 에지에 대한 키 레이블, 속성 형식 및 엔드포인트 노드 형식을 정의합니다. 그래프 데이터베이스에서 에지는 노드 간의 연결을 나타냅니다. 에지 정의는 그래프에서 허용되는 관계를 시스템에 알려줍니다.
(:Person)-[:knows { creationDate :: ZONED DATETIME }]->(:Person)
이 에지 형식은 다음을 사용하여 모든 가장자리를 정의합니다.
- (키) 레이블
knows입니다. -
creationDate값을 보유ZONED DATETIME하는 속성입니다(타임스탬프와 표준 시간대 오프셋이 함께 표시됨). - 둘 다
Person노드여야 하는 원본 및 대상 엔드포인트입니다.
화살표 -> 는 원본에서 대상으로 가장자리의 방향을 나타냅니다. 이 방향 정보는 그래프의 의미 체계를 이해하는 데 매우 중요합니다.
다음은 에지 형식의 더 많은 예입니다.
(:Person)-[:studyAt { classYear :: UINT64 }]->(:University)
(:Person)-[:workAt { workFrom :: UINT64 }]->(:Company)
엔드포인트 노드 형식에 대한 키 레이블(PersonUniversity또는Company)만 지정하면 됩니다. 전체 노드 형식 정의를 반복할 필요는 없습니다. 시스템은 전체 노드 형식 정의에 대한 이러한 참조를 확인합니다.
그래프 에지 형식 패밀리
그래프 에지 키 레이블은 노드 키 레이블과 다르게 작동합니다. 동일한 레이블 및 속성 형식이 있는 한 그래프 형식에 동일한 키 레이블을 가진 여러 에지 형식을 가질 수 있습니다. 그러나 키 레이블이 동일한 두 에지 형식은 하나 이상의 엔드포인트 노드 형식에서 달라야 합니다. 동일한 키 레이블이 있는 에지 형식 집합을 에지 형식 패밀리라고 합니다.
이 개념을 사용하면 서로 다른 유형의 엔터티 간에 동일한 유형의 관계를 모델링할 수 있습니다.
Example:
(:City)-[:isPartOf]->(:Country),
(:Country)-[:isPartOf]->(:Continent)
두 에지 형식 모두 레이블을 isPartOf 사용하지만 서로 다른 유형의 노드를 연결하여 계층적 포함 관계를 나타내는 에지 형식 패밀리를 형성합니다.
엣지 타입 정의에서 노드 서브타이핑을 활용하세요
각 가능한 엣지 유형을 명확히 설명해야 하는 것은 다소 번거로울 수 있습니다. 단순화하기 위해, 엔드포인트가 암시하는 노드 타입 계층 구조와 일치하는 엣지 타입 패밀리를 정의할 수도 있습니다.
예제:
-- Node types
ABSTRACT (:Message { ... }),
(:Post => :Message { ... }),
(:Comment => :Message { ... }),
-- All edge types (x)-[:hasTag]->(:Tag) where x is at least a (:Message)
(<:Message)-[:hasTag]->(:Tag)
이는 암묵적으로 다음과 같은 엣지 유형을 정의합니다:
(:Post)-[:hasTag]->(:Tag)
(:Comment)-[:hasTag]->(:Tag)
지원되는 속성 형식
속성 형식을 정의할 때 속성 값 형식은 Microsoft Fabric의 그래프에서 지원하는 형식이어야 합니다. 올바른 데이터 형식을 선택하는 것은 스토리지 효율성 및 쿼리 성능에 중요합니다.
속성 값에 사용할 수 있는 데이터 형식은 다음과 같습니다.
-
INT(또한:INT64) -
UINT(또한:UINT64) STRING-
BOOL(또한:BOOLEAN) -
DOUBLE(또한:FLOAT64,FLOAT) -
T NOT NULL- 위의 데이터 형식은 어디에T있나요? -
LIST<T>및LIST<T> NOT NULL, 위의 데이터 형식은 어디에 있나요T?
값 형식에 대한 자세한 내용은 GQL 값 및 값 형식을 참조하세요.
중요합니다
지정된 그래프 형식의 노드 형식 또는 에지 형식에서 발생하는 이름이 같은 모든 속성 형식은 동일한 속성 값 형식을 지정해야 합니다.
유일한 예외: null 값을 포함하는지 여부에 따라 다를 수 있습니다.
예를 들어 이 규칙에 따라 그래프 형식은 (:A { id :: STRING }), (:B { id :: STRING NOT NULL}) 유효하지만 그래프 형식 (:A { id :: STRING }), (:B { id :: INT}) 은 유효하지 않습니다.
노드 키 제약 조건 설정
노드 키 제약 조건은 그래프의 각 노드가 하나 이상의 속성 값으로 고유하게 식별되는 방법을 정의합니다. 키 제약 조건은 관계형 데이터베이스의 기본 키 제약 조건처럼 작동하며 데이터 무결성을 보장합니다. 노드 키 제약 조건은 여러 노드 형식의 노드를 대상으로 할 수 있으므로 전체 개념 계층에 대한 노드 키를 정의할 수 있습니다.
주요 제약 조건을 이해하는 것은 다음과 같은 이유로 중요합니다.
- 고유성 확인: 비즈니스 논리에 따라 중복 노드를 방지합니다.
- 효율적인 조회 사용: 시스템에서 특정 노드를 검색하는 쿼리를 최적화할 수 있습니다.
- 데이터 통합 지원: 다양한 데이터 원본에서 노드를 참조하는 안정적인 방법을 제공합니다.
중요합니다
Microsoft Fabric 그래프의 경우 정확히 하나의 키 제약 조건이 모든 노드를 제한해야 합니다.
노드 키 제약 조건의 작동 방식
그래프 형식에서 노드 키 제약 조건을 지정할 수 있습니다. 각 노드 키 제약 조건에는 효과적으로 작동할 수 있는 특정 특성이 있습니다.
노드 키 제약 조건의 구성 요소:
- 쉽게 참조할 수 있는 그래프 형식 내에 고유한 이름이 있습니다.
- 제약 조건이 적용되는 노드를 지정하는 간단한 제약 조건 패턴을 사용하여 대상 노드를 정의합니다.
- 고유 키 값을 형성하는 속성을 정의합니다.
Example:
CONSTRAINT person_pk
FOR (n:Person) REQUIRE n.id IS KEY
이 구문은 person_pk 이상이 있는 모든 노드에 대해 호출되는 Person 노드 키 제약 조건을 만듭니다. 제약 조건은 그래프의 각 노드가 해당 id 속성으로 고유하게 식별되도록 합니다. 레이블이 있는 두 노드는 Person 동일한 id 값을 가질 수 없습니다.
구문을 사용하여 고유성을 보장하기 위해 여러 속성을 함께 사용하는 CONSTRAINT ... FOR ... REQUIRE (n.prop1, n.prop2) IS KEY 복합 키를 정의할 수도 있습니다.
중요합니다
키 제약 조건에 사용되는 속성:
- null일 수 없습니다.
- 키 제약 조건이 대상으로 하는 노드 형식 및 에지 형식에서와 같이
NOT NULL선언해야 합니다.