{#load-from-load-from} # LOAD FROM 보통 테이블이나 뷰를 Cypher 파이프라인으로 읽어 들이며, 테이블의 행 하나마다 작업 행 하나를 만듭니다. {#load-from-synopsis} ## 개요
LOAD FROM table_name AS alias

굵게 키워드 · 기울임 직접 채우는 자리 · [ ] 생략 가능 · ... 반복 가능. 구문 표기 규약을 참고하십시오.

{#load-from-description} ## 설명 `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`](match.md)의 `WHERE`, [`WITH`](with.md)의 `WHERE`, 또는 [`FILTER`](filter.md)로 걸러 내십시오. - `SELECT`가 읽을 수 있는 것이면 무엇이든 됩니다. 테이블, 뷰, 스키마로 수식한 이름이 그렇습니다. {#load-from-parameters} ## 매개변수 table_name : 읽을 테이블이나 뷰의 이름이며, 스키마로 수식할 수도 있습니다. 존재하고 읽을 수 있어야 합니다. 알 수 없는 이름은 `relation "..." does not exist`를 냅니다. alias : 각 행에 바인딩되는 이름입니다. 컬럼은 `alias.column`으로, 행 전체는 `alias`로 읽습니다. {#load-from-examples} ## 예제 모든 예제는 [예제 데이터셋](../../get_started/example-dataset.md)에서 실행되며, 그 데이터셋에는 보통 테이블 `rating`이 포함돼 있습니다. {#load-from-read-a-table} ### 테이블 읽기 ```cypher 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 타입은 그대로입니다: ```cypher LOAD FROM rating AS r RETURN pg_typeof(r.score) AS t LIMIT 1; ``` ``` t ----------- "numeric" (1 row) ``` {#load-from-join-a-table-to-the-graph} ### 테이블을 그래프와 조인하기 테이블을 적재하고 그것에 대해 일치시킵니다. 관계형 컬럼과 그래프 속성이 곧바로 비교됩니다: ```cypher 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-read-a-whole-row} ### 행 전체 읽기 별칭 자체를 투영하면 그 행을 맵으로 얻습니다: ```cypher 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) ``` {#load-from-read-a-view} ### 뷰 읽기 `SELECT`가 읽을 수 있는 관계면 무엇이든 유효한 원천입니다: ```cypher CREATE VIEW critic AS SELECT title, score FROM rating WHERE source = 'critics'; ``` ``` CREATE VIEW ``` ```cypher 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) ``` ```cypher DROP VIEW critic; ``` ``` DROP VIEW ``` {#load-from-build-vertices-from-table-rows} ### 테이블 행으로 정점 만들기 원하는 속성을 이름으로 적으십시오: ```cypher 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 ``` ```cypher LOAD FROM tmp_people AS t CREATE (:person {name: t.name, born: t.born}); ``` ``` UPDATE 2 ``` 또는 맵 리터럴 대신 `= expression`을 써서 행 전체를 속성 맵으로 삼으십시오: ```cypher LOAD FROM tmp_people AS t CREATE (:person = to_jsonb(t)); ``` ``` UPDATE 2 ``` 두 적재를 되돌리고 그 테이블을 지웁니다: ```cypher MATCH (p:person) WHERE p.name IN ['Ana Lily Amirpour', 'Rian Johnson'] DETACH DELETE p; ``` ``` UPDATE 4 ``` ```cypher DROP TABLE tmp_people; ``` ``` DROP TABLE ``` {#load-from-notes} ## 참고 `LOAD FROM`은 읽습니다. 자체 대량 적재 장치도, 병렬 기록기도, 오류 우회 경로도 없습니다. 그 뒤에 오는 `CREATE`가 그래프 쓰기 경로를 통해 행 단위로 삽입합니다. 큰 테이블을 적재하는 방법과 그것을 빠르게 만드는 인덱스·로깅 설정은 [데이터 적재](../../guides/loading-data.md)를 참고하십시오. {#load-from-see-also} ## 관련 항목 - [`CREATE`](create.md) — 적재한 행을 정점과 간선으로 바꾸는 절 - [`MATCH`](match.md) — 적재한 행을 그래프와 조인하기 - [`WITH`](with.md) — 적재한 행을 걸러 내고 집계하기 - [SQL과 Cypher 섞기](../../querying/combining-sql-and-cypher.md) — 반대 방향, SQL 안의 Cypher 쿼리 - [데이터 적재](../../guides/loading-data.md) — 실제 적재 가이드