AssumeConsistentDataTypes 힌트 - Amazon Neptune

기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.

AssumeConsistentDataTypes 힌트

openCypher는 숫자 데이터 유형(예: int, byte, short, long 등)의 일치가 유형 승격 의미 체계에 따라 수행되는 패러다임을 따릅니다. 예를 들어 짧은 유형의 입력 값이 10인 모든 속성을 조회할 때 유형 승격 시맨틱에서 값이 10인 속성과도 일치합니다. 경우에 따라 형식 캐스팅은 오버헤드를 유발하여 형식 캐스팅이 수행되지 않은 경우보다 쿼리 계획이 덜 효율적일 수 있습니다. 특히 데이터 형식이 데이터에 일관되게 사용되는 경우(예: 모든 사람의 연령이 긴 값으로 저장되는 경우) 형식 프로모션을 수행하면 쿼리 결과에 영향을 주지 않고 오버헤드가 발생합니다.

데이터베이스에 저장된 숫자 속성 데이터 값이 일관된 유형인 것으로 알려진 경우를 최적화하기 위해 assumeConsistentDataTypes (값 , 기본값 false)라는 쿼리 힌트true/false를 사용할 수 있습니다. 이 쿼리 힌트에 값이 제공되면 true엔진은 속성 값만 항상 길거나 두 배라고 가정하고 유형 승격 의미 체계를 건너뜁니다. 쿼리에 지정된 숫자 값은 긴 값(부동 소수점 값의 경우)과 이중 값(부동 소수점 값의 경우)으로 간주됩니다.

데이터가 단일 데이터 유형을 일관되게 사용하는 경우(예: 모든 연령이 로 저장됨long) assumeConsistentDataTypes힌트를 사용하면 다른 숫자 유형에 대한 불필요한 동등성 검사를 건너뛰어 쿼리를 최적화할 수 있습니다. 그러나 데이터에 동일한 속성에 대해 일관되지 않은 데이터 형식이 있는 경우 쿼리가 힌트가 가정하는 단일 데이터 형식과만 일치하므로 힌트를 사용하면 일부 결과가 누락될 수 있습니다.

# Database loaded with following openCypher CSV's # File 1 :ID,age:Int n1,20 n2,25 # File 2 :ID,age:Long n3,25 # Example (no hint) MATCH (n:Person) WHERE n.age >= 25 RETURN n # Result n2 n3 Returns all person whose age is >= 25 and the values >= 25 can be with any of these datatypes i.e. byte, short, int, long, double or float ----------------------------------------------------------------------------------- # Example (with hint present) USING QUERY:assumeConsistentDataTypes "true" MATCH (n:Person) WHERE n.age >= 25 RETURN n # Result n3 Returns only "n3" and not "n2". The reason is that even though the numerical value matches (25), the datatype is "int" and is considered a non-match.

차이점은 설명을 통해 확인할 수도 있습니다.

설명이 없는 경우:

# Query MATCH (n) WHERE n.age = 20 RETURN n # Explain Snippet ╔═════╤══════════╤══════════╤══════════════════════════════╤═══════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════╤════════╤════════════╤══════════════╤═════════╤══════════════╗ ║ ID │ Out #1 │ Out #2 │ Name │ Arguments │ Mode │ Units In │ Units Out │ Ratio │ Time (ms) ║ ╠═════╪══════════╪══════════╪══════════════════════════════╪═══════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════╪════════╪════════════╪══════════════╪═════════╪══════════════╣ ║ 0 │ 1 │ - │ DFEPipelineScan (DFX) │ pattern=Node(?n) with property 'age' as ?n_age2 and label 'ALL' │ - │ 0 │ 1 │ 0.00 │ 0.10 ║ ║ │ │ │ │ inlineFilters=[(?n_age2 IN ["20"^^xsd:byte, "20"^^xsd:int, "20"^^xsd:long, "20"^^xsd:short, "20.0"^^xsd:double, "20.0"^^xsd:float])] │ │ │ │ │ ║ ║ │ │ │ │ patternEstimate=1 │ │ │ │ │ ║ ╟─────┼──────────┼──────────┼──────────────────────────────┼───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┼────────┼────────────┼──────────────┼─────────┼──────────────╢ # The inFilters field contains all numeric types

힌트 사용:

# Query MATCH (n) WHERE n.age = 20 RETURN n # Explain Snippet ╔═════╤══════════╤══════════╤══════════════════════════════╤═════════════════════════════════════════════════════════════════════════════════╤════════╤════════════╤══════════════╤═════════╤══════════════╗ ║ ID │ Out #1 │ Out #2 │ Name │ Arguments │ Mode │ Units In │ Units Out │ Ratio │ Time (ms) ║ ╠═════╪══════════╪══════════╪══════════════════════════════╪═════════════════════════════════════════════════════════════════════════════════╪════════╪════════════╪══════════════╪═════════╪══════════════╣ ║ 0 │ 1 │ - │ DFEPipelineScan (DFX) │ pattern=Node(?n) with property 'age' as ?n_age2 and label 'ALL' │ - │ 0 │ 1 │ 0.00 │ 0.07 ║ ║ │ │ │ │ inlineFilters=[(?n_age2 IN ["20"^^xsd:long])] │ │ │ │ │ ║ ║ │ │ │ │ patternEstimate=1 │ │ │ │ │ ║ ╟─────┼──────────┼──────────┼──────────────────────────────┼─────────────────────────────────────────────────────────────────────────────────┼────────┼────────────┼──────────────┼─────────┼──────────────╢ # The inFilters field only contains long datatype