SQLite | SQLite 명령어 | CSV 형식의 데이터를 파일에서 가져오기 (.import 명령)
CSV 형식으로 작성된 외부 데이터 파일를 SQLite에서 읽어와 테이블로 가져올 수 있다. 여기에서는 .import 명령을 사용하여 데이터를 가져 오는 방법에 대해 설명한다.
.import 명령 사용
작성된 데이터 파일를 테이블의 데이터로 가져오려면 .import 명령을 사용한다. 형식은 다음과 같다.
.import FILE TABLE
첫 번째 인수에는 파일명, 두 번째 인수에는 가져온 데이터를 추가할 테이블명을 지정한다. 파일명은 SQLite 커멘드 라인 도구를 실행한 커런트 디렉터리로 부터의 상대 경로 또는 절대 경로로 지정한다.
가져올 때 기존 테이블로 가져오는 경우와 존재하지 않는 테이블에 가져올 경우에 방법이 다르다. 각각 살펴보겠다.
기존 테이블로 가져오기
먼저 기존 테이블에 가져오는 경우이다. 먼저 다음과 같이 테이블을 미리 만들어두고, 데이터도 몇건 추가한다.
create table user (id integer, name text, address text);
insert into user values (1, 'devkuma', 'Seoul');
insert into user values (2, 'kimkc', 'Busan');
sqlite> create table user (id integer, name text, address text);
sqlite>
sqlite> insert into user values (1, 'devkuma', 'Seoul');
sqlite> insert into user values (2, 'kimkc', 'Busan');
sqlite>
다음 가져올 데이터를 작성한다. 데이터는 CSV 형식으로 작성해야 한다. 생성된 파일은 현재 디렉터리에 userdata.csv로 저장한다.
3,araikuma,Seoul
4,happykuma,Seoul
5,mykuma,Daejeon
파일을 user 테이블에 가져온다. 가져오기 전에 .mode 명령을 사용하여 csv 모드로 변경한다. 그 후에 .import 명령을 다음과 같이 실행한다.
.mode csv
.import ./userdata.csv user
sqlite> .mode csv
sqlite> .import ./userdata.csv user
sqlite>
가져온 후에 SELECT 문에서 user 테이블의 데이터를 확인한다.
select * from user;
sqlite> select * from user;
1,devkuma,Seoul
2,kimkc,Busan
3,araikuma,Seoul
4,happykuma,Seoul
5,mykuma,Daejeon
sqlite>
기존 데이터에 추가하는 형태로 가져온 데이터가 테이블에 저장되었다.
존재하지 않는 테이블로 가져오기
존재하지 않는 테이블에 가져오려면 조금 방법이 다르다. 새로운 테이블이 생성되는 것이기에, 가져온 데이터의 첫 행에 쓰여져 있는 값이 컬럼명이다.
그럼 실제로 해보도록 하겠다. 먼저 가져올 데이터를 작성한다. 데이터는 CSV 형식으로 작성해야 한다. 생성된 파일은 현재 디렉터리에 userdata2.csv로 저장한다.
id,name,address
1,devkuma,Seoul
2,kimkc,Busan
3,araikuma,Seoul
파일을 user2 테이블에 가져온다. 가져오기 전에 .mode 명령을 사용하여 csv 모드로 변경한다. 그 후에 .import 명령을 다음과 같이 실행한다.
.mode csv
.import ./userdata2.csv user2
sqlite> .mode csv
sqlite> .import ./userdata2.csv user2
sqlite>
새로 user2 테이블이 생성되고, 그 테이블에 가져온 데이터가 테이블에 저장되었다.
그럼 먼저 .schema 명령을 사용하여 테이블이 어떻게 만들어 졌는지를 확인한다.
.schema user2
sqlite> .schema user2
CREATE TABLE user2(
"id" TEXT,
"name" TEXT,
"address" TEXT
);
sqlite>
가져온 데이터의 첫 행에 작성된 값이 컬럼명으로 테이블이 작성되었다. 데이터는 모든 TEXT 형태이다.
다음은 SELECT 문에서 user2 테이블의 데이터를 확인한다.
select * from user2;
sqlite> select * from user2;
1,devkuma,Seoul
2,kimkc,Busan
3,araikuma,Seoul
sqlite>
가져온 데이터의 2행 이후의 데이터가 테이블의 데이터로 저장된 것을 확인할 수 있다.