{#load-from-load-from}
# LOAD FROM
보통 테이블이나 뷰를 Cypher 파이프라인으로 읽어 들이며, 테이블의 행 하나마다 작업 행 하나를
만듭니다.
{#load-from-synopsis}
## 개요
LOAD FROMtable_nameASalias
굵게 키워드 · 기울임 직접 채우는 자리 · [ ] 생략 가능 · ... 반복 가능. 구문 표기 규약을 참고하십시오.
{#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) — 실제 적재 가이드