LOAD FROM#
보통 테이블이나 뷰를 Cypher 파이프라인으로 읽어 들이며, 테이블의 행 하나마다 작업 행 하나를 만듭니다.
개요#
굵게 키워드 · 기울임 직접 채우는 자리 · [ ] 생략 가능 · ... 반복 가능. 구문 표기 규약을 참고하십시오.
설명#
LOAD FROM은 관계형 데이터를 공급하는 절입니다. 테이블을 스캔해 각 행을 alias에 바인딩하고,
그 뒤 파이프라인의 어디서든 그 컬럼을 alias.column으로 읽을 수 있게 합니다. 그래프와 테이블이
같은 데이터베이스에 있으므로 가져오기 단계도, 외부 데이터 래퍼도 필요하지 않습니다.
별칭의 컬럼은 자기 SQL 타입을 유지합니다.
numeric(3,1)컬럼에 대한r.score는 numeric이므로,r.score > 8.5는 jsonb 비교가 아니라 numeric 비교입니다.별칭 자체는 행 값입니다. 그것을 투영하면 행이 jsonb 객체로 나오므로
CREATE (:label = to_jsonb(alias))는 행 전체를 적재하는 것이 됩니다.LOAD FROM은 쿼리를 시작할 수도, 다른 절 뒤에 올 수도 있으며, 한 쿼리에 여러 개가 나올 수도 있습니다. 쿼리를 끝내지는 않습니다.이 절에는 자기
WHERE가 없습니다. 뒤따르는MATCH의WHERE,WITH의WHERE, 또는FILTER로 걸러 내십시오.SELECT가 읽을 수 있는 것이면 무엇이든 됩니다. 테이블, 뷰, 스키마로 수식한 이름이 그렇습니다.
매개변수#
- table_name
읽을 테이블이나 뷰의 이름이며, 스키마로 수식할 수도 있습니다. 존재하고 읽을 수 있어야 합니다. 알 수 없는 이름은
relation "..." does not exist를 냅니다.- alias
각 행에 바인딩되는 이름입니다. 컬럼은
alias.column으로, 행 전체는alias로 읽습니다.
예제#
모든 예제는 예제 데이터셋에서 실행되며, 그 데이터셋에는
보통 테이블 rating이 포함돼 있습니다.
테이블 읽기#
LOAD FROM rating AS r
RETURN r.title AS title, r.source AS source, r.score AS score
ORDER BY title, source
LIMIT 4;
title | source | score
---------------------+-----------+-------
"Avatar" | "critics" | 7.9
"Blade Runner" | "critics" | 8.1
"Blade Runner 2049" | "critics" | 8.0
"Elysium" | "critics" | 6.6
(4 rows)
값에 따옴표가 붙은 것은 컬럼이 jsonb이기 때문이 아니라, Cypher의 RETURN이 출력 컬럼을 jsonb로
감싸기 때문입니다. 그 SQL 타입은 그대로입니다:
LOAD FROM rating AS r RETURN pg_typeof(r.score) AS t LIMIT 1;
t
-----------
"numeric"
(1 row)
테이블을 그래프와 조인하기#
테이블을 적재하고 그것에 대해 일치시킵니다. 관계형 컬럼과 그래프 속성이 곧바로 비교됩니다:
LOAD FROM rating AS r
MATCH (m:movie {title: r.title})
WHERE r.source = 'critics' AND r.score > 8.5
RETURN m.title AS film, m.year AS year, r.score AS score
ORDER BY score DESC;
film | year | score
------------------------------+------+-------
"Inception" | 2010 | 8.8
"The Matrix" | 1999 | 8.7
"Interstellar" | 2014 | 8.7
"Terminator 2: Judgment Day" | 1991 | 8.6
(4 rows)
행 전체 읽기#
별칭 자체를 투영하면 그 행을 맵으로 얻습니다:
LOAD FROM rating AS r RETURN r LIMIT 2;
r
-------------------------------------------------------------
{"score": 8.7, "title": "The Matrix", "source": "critics"}
{"score": 9.1, "title": "The Matrix", "source": "audience"}
(2 rows)
뷰 읽기#
SELECT가 읽을 수 있는 관계면 무엇이든 유효한 원천입니다:
CREATE VIEW critic AS SELECT title, score FROM rating WHERE source = 'critics';
CREATE VIEW
LOAD FROM critic AS c
RETURN c.title AS film, c.score AS score
ORDER BY score DESC
LIMIT 3;
film | score
----------------+-------
"Inception" | 8.8
"Interstellar" | 8.7
"The Matrix" | 8.7
(3 rows)
DROP VIEW critic;
DROP VIEW
테이블 행으로 정점 만들기#
원하는 속성을 이름으로 적으십시오:
CREATE TABLE tmp_people (name text, born int);
INSERT INTO tmp_people VALUES ('Ana Lily Amirpour', 1980), ('Rian Johnson', 1973);
CREATE TABLE
INSERT 0 2
LOAD FROM tmp_people AS t
CREATE (:person {name: t.name, born: t.born});
UPDATE 2
또는 맵 리터럴 대신 = expression을 써서 행 전체를 속성 맵으로 삼으십시오:
LOAD FROM tmp_people AS t
CREATE (:person = to_jsonb(t));
UPDATE 2
두 적재를 되돌리고 그 테이블을 지웁니다:
MATCH (p:person) WHERE p.name IN ['Ana Lily Amirpour', 'Rian Johnson'] DETACH DELETE p;
UPDATE 4
DROP TABLE tmp_people;
DROP TABLE
참고#
LOAD FROM은 읽습니다. 자체 대량 적재 장치도, 병렬 기록기도, 오류 우회 경로도 없습니다. 그 뒤에
오는 CREATE가 그래프 쓰기 경로를 통해 행 단위로 삽입합니다. 큰 테이블을 적재하는 방법과 그것을
빠르게 만드는 인덱스·로깅 설정은 데이터 적재를 참고하십시오.
관련 항목#
CREATE— 적재한 행을 정점과 간선으로 바꾸는 절MATCH— 적재한 행을 그래프와 조인하기WITH— 적재한 행을 걸러 내고 집계하기SQL과 Cypher 섞기 — 반대 방향, SQL 안의 Cypher 쿼리
데이터 적재 — 실제 적재 가이드