앎을 경계하기

[가짜연구소3기] Data Engineer

[가짜연구소 3기] 데이터 엔지니어링 50 - Database Operations on the Command Line

양갱맨 2021. 9. 25. 21:01

csvkit 라이브러리가 SQL과 같은 기능을 명령 줄에 제공하는 방법을 배운다.

sql2csv

csvkit 라이브러리 명령

다양한 SQL 데이터베이스 및 방언에 액세스한다.

데이터베이스 클라이언트를 거치지 않아도 된다.

sql2csv 결과를 CSV 파일로 저장한다.

sql2csv --db "sqlite:///SpotifyDatabase.db"\
				--query "SELECT * FROM Spotify_Popularity"\
				> Spotify_Popularity.csv
  1. 데이터베이스 연결 방법을 설정한다.--db : 데이터베이스 연결 및 위치를 나타내는 따옴표로 묶기
  1. 쿼리 작성--query : SQL 쿼리 작성, 항상 한 줄로 작성해야한다.
  1. 결과 저장리디렉션하지 않으면 터미널에 출력한다.
  2. 리디렉션 기호를 사용하여 결과를 csv에 저장할 수 있다.

복잡한 SQL문을 작성하기에 적합하지 않다.

csvsql

하나 이상의 로컬로 저장된 csv 파일에 sql과 같은 명령문을 적용한다.

처리 중인 csv 파일을 임시로 호스팅하는 메모리 내에 sql 데이터베이스를 생성한다.

큰 파일 처리나 복잡한 SQL 쿼리에는 적합하지 않다.

csvsql --query "SELECT * FROM Spotify_MusicAttributes LIMIT 1" Spotify_MusicAttributes.csv

LIMIT 1을 사용했기 때문에 위에서 1개의 레코드를 출력한다.

파이프 연산을 사용하여 csvsql 쿼리 결과를 csvlook으로 출력할 수 있다.

csvs2ql --query "SELECT * FROM Spotify_MusicAttributes LIMIT 1" data/Spotify_MusicAttributes.csv | csvlook

결과를 저장하려면 리디렉션 기호를 사용하면 된다.

csvs2ql --query "SELECT * FROM Spotify_MusicAttributes LIMIT 1" data/Spotify_MusicAttributes.csv > OneSongFile.csv

여러 개의 csv파일을 사용하려면 간단하게 파일을 나열해서 작성해주면 된다.

여러가지 옵션 확인하기

  • --insert : 연결된 데이터베이스가 있어야지만 데이터베이스에 데이터 삽입이 가능함. 항상 --db와 같이 사용함
  • --db
  • --no-inference & --no-consgtraints
csvsql --db "sqlite:///SpotifyDatabase.db"\
			 --insert Spotify_MusicAttributes.csv