Ontological Studio 튜토리얼
부록22

Cypher·패브릭 치트시트

이 튜토리얼에서 쓴 문장을 한 장에 모았습니다. 포털 옆에 띄워 두고 쓰세요. 예제는 sample 그래프 기준입니다.

읽기#

하고 싶은 일 Cypher
노드 찾기 MATCH (s:Supplier) RETURN s
속성 고르기 MATCH (s:Supplier) RETURN s.name, s.country
키로 하나 MATCH (s:Supplier {supplier_id: 'S-CN-01'}) RETURN s
거르기 WHERE s.country = 'China' AND s.tier = 1
목록 포함 WHERE sh.ship_status IN ['IN_TRANSIT', 'CUSTOMS_HOLD']
문자열 WHERE s.name CONTAINS 'Gold' · STARTS WITH · ENDS WITH
날짜 WHERE c.opened_date >= '2026-08-29'
정렬·자르기 ORDER BY po.amount_usd DESC SKIP 2 LIMIT 3
이름 바꾸기 RETURN po.po_id AS 발주
중복 제거 RETURN DISTINCT s.country
조건 값 CASE WHEN sh.delay_days > 3 THEN '지연' ELSE '정상' END
목록 펼치기 UNWIND ['SHP-02','SHP-03'] AS no MATCH (sh:Shipment {shipment_no: no}) RETURN sh

관계#

하고 싶은 일 Cypher
한 걸음 MATCH (po:PurchaseOrder)-[:ORDERED_FROM]->(s:Supplier)
거꾸로 MATCH (s:Supplier)<-[:ORDERED_FROM]-(po:PurchaseOrder)
여러 걸음 (sh:Shipment)-[:SHIPS]->(po:PurchaseOrder)-[:ORDERED_FROM]->(s:Supplier)
관계도 돌려받기 MATCH (a:Shipment)-[r:SHIPS]->(b:PurchaseOrder) RETURN a, r, b
갈래 둘 MATCH (i:Item)<-[:FOR_ITEM]-(so:SalesOrder), (i:Item)<-[:OF_ITEM]-(l:PoLine)
짝 없어도 남기기 OPTIONAL MATCH (sh:Shipment)-[:SHIPS]->(po:PurchaseOrder)
짝 없는 것만 … OPTIONAL MATCH … WITH sh, po WHERE po IS NULL RETURN sh

집계#

하고 싶은 일 Cypher
세기 RETURN count(s) · count(*)
묶어 세기 RETURN po.status, count(*) AS n, sum(po.amount_usd) AS total
목록으로 모으기 RETURN s.name, collect(po.po_id) AS orders
집계로 다시 거르기 WITH s, count(po) AS n WHERE n >= 2 RETURN s.name, n
소수 합계로 거르기 WITH s, sum(toFloat(po.amount_usd)) AS total WHERE total > 50000
목록 길이 size(collect(po.po_id))

쓰기 (저장 그래프에서만)#

하고 싶은 일 Cypher
그래프 만들기 CREATE GRAPH tut
노드 CREATE (:Employee {emp_no: 'E1', name: '김하늘'})
관계 MATCH (a:Employee {emp_no:'E1'}), (b:Employee {emp_no:'E2'}) CREATE (a)-[:MENTORS]->(b)
값 바꾸기 MATCH (e:Employee {emp_no:'E1'}) SET e.salary = 4500
없으면 만들기 MERGE (d:Dept {name:'구매'})
지우기 MATCH (e:Employee {emp_no:'E2'}) DETACH DELETE e

데이터 패브릭#

하고 싶은 일 문장
데이터소스 목록 SHOW DATASOURCES
연결 CREATE DATASOURCE mydb WITH ENGINE = 'postgres', PARAMETERS = {host: '…', port: 5432, database: '…', schema: 'public', user: '…', password: '…'}
테이블 SHOW TABLES FROM erp
컬럼 SHOW COLUMNS FROM erp.po_line
다시 읽기 · 해제 REFRESH DATASOURCE erp · DROP DATASOURCE erp
가상 노드 CREATE VIRTUAL NODE PoLine IN sample FROM erp.po_line KEY po_line_id
속성 이름 바꾸기 … KEY po_line_id PROPERTIES (po_line_id, po_id, item_id, qty AS quantity)
가상 관계 CREATE VIRTUAL RELATIONSHIP IN_ORDER IN sample FROM PoLine(po_id) TO PurchaseOrder(po_id)
목록 SHOW VIRTUAL NODES · SHOW VIRTUAL RELATIONSHIPS
지우기 DROP VIRTUAL RELATIONSHIP IN_ORDER IN sample · DROP VIRTUAL NODE PoLine IN sample
실행 계획 EXPLAIN FABRIC MATCH …

시간 여행#

하고 싶은 일 방법
그때의 사실 포털 ⏱ 막대의 valid at
그때 알던 것 포털 ⏱ 막대의 as known at
시간 버전 켜기 (SQL) SELECT og_enable_temporal('hr', 'Employee');
변경 기록 (SQL) BEGIN; SET LOCAL og.valid_from = '2024-01-01'; SELECT og_cypher('hr', $$…$$); COMMIT;
정정 기록 (SQL) SET LOCAL og.valid_from = '-infinity'

함수#

count sum avg min max collect · toUpper toLower trim substring replace split toString · abs ceil floor round sqrt rand toInteger toFloat · id elementId labels type length size keys exists · coalesce timestamp datetime · vector.similarity vector.distance genai.vector.encode

코드 앱 SDK#

import { query, schema, theme, onTheme, color, actions, act } from '/apps/_runtime/og.js'
const rows = await query('MATCH (s:Supplier) WHERE s.country = $c RETURN s.name AS name', { c: 'China' })
const out = await act({ class: 'Shipment', action: 'expediteShipment', ids: ['SHP-03'], params: { reason: '…' } })  // 0.1.1부터
© uEngine Solutions · 문의하기 · 이 튜토리얼의 화면과 결과는 Ontological Studio 0.1에서 실제로 실행해 얻었습니다(앱의 액션 버튼은 0.1.1).