CSV 파일 데이터를 PostgreSQL 테이블로 가져 오는 방법은 무엇입니까?
CSV 파일에서 데이터를 가져 와서 테이블을 채우는 저장 프로 시저를 작성하려면 어떻게해야합니까?
이
살펴보십시오 .
여기에 솔루션이 해석되었습니다.
테이블을 작성하십시오.
CREATE TABLE zip_codes (ZIP char(5), LATITUDE double precision, LONGITUDE double precision, CITY varchar, STATE char(2), COUNTY varchar, ZIP_CLASS varchar);
CSV 파일에서 테이블로 데이터를 복사하십시오.
COPY zip_codes FROM '/path/to/csv/ZIP_CODES.txt' WITH (FORMAT csv);
사용할 수있는 권한이 없으면
COPY
(db 서버
\copy
에서 작동) 대신 (db 클라이언트에서 작동) 사용할 수 있습니다 . Bozhidar Batsov와 동일한 예를 사용하십시오.
테이블을 작성하십시오.
CREATE TABLE zip_codes (ZIP char(5), LATITUDE double precision, LONGITUDE double precision, CITY varchar, STATE char(2), COUNTY varchar, ZIP_CLASS varchar);
CSV 파일에서 테이블로 데이터를 복사하십시오.
\copy zip_codes FROM '/path/to/csv/ZIP_CODES.txt' DELIMITER ',' CSV
읽을 열을 지정할 수도 있습니다.
\copy zip_codes(ZIP,CITY,STATE) FROM '/path/to/csv/ZIP_CODES.txt' DELIMITER ',' CSV
이를 수행하는 한 가지 빠른 방법은 Python pandas 라이브러리를 사용하는 것입니다 (0.15 이상 버전이 가장 효과적 임). 이것은 데이터 유형에 대한 선택이 원하는 것이 아닐 수도 있지만 열 작성을 처리합니다. 원하는 것을 수행하지 않으면 항상 템플릿으로 생성 된 '테이블 만들기'코드를 사용할 수 있습니다.다음은 간단한 예입니다.
import pandas as pd df = pd.read_csv('mypath.csv') df.columns = [c.lower() for c in df.columns] #postgres doesn't like capitals or spaces from sqlalchemy import create_engine engine = create_engine('postgresql://username:password@localhost:5432/dbname') df.to_sql("my_table_name", engine)
다음은 다양한 옵션을 설정하는 방법을 보여주는 코드입니다.
# Set it so the raw sql output is logged import logging logging.basicConfig() logging.getLogger('sqlalchemy.engine').setLevel(logging.INFO) df.to_sql("my_table_name2", engine, if_exists="append", #options are ‘fail’, ‘replace’, ‘append’, default ‘fail’ index=False, #Do not output the index of the dataframe dtype={'col1': sqlalchemy.types.NUMERIC, 'col2': sqlalchemy.types.String}) #Datatypes should be [sqlalchemy types][1]
가져 오기를 수행하는 GUI를 제공하는 pgAdmin을 사용할 수도 있습니다. 이
됩니다. pgAdmin을 사용하면 원격 데이터베이스에서도 작동한다는 장점이 있습니다.그러나 이전 솔루션과 마찬가지로 데이터베이스에 이미 테이블이 있어야합니다. 각 사람은 자신의 솔루션을 가지고 있지만 일반적으로 Excel에서 CSV를 열고 헤더를 복사하고 다른 워크 시트에 조옮김으로 붙여 넣은 다음 해당 열에 해당 데이터 유형을 다음 열에 놓고 텍스트 편집기에 붙여 넣습니다. 적절한 SQL 테이블 작성 쿼리와 함께 다음과 같이하십시오.
CREATE TABLE my_table ( /*paste data from Excel here for example ... */ col_1 bigint, col_2 bigint, /* ... */ col_n bigint )
Paul이 언급했듯이 가져 오기는 pgAdmin에서 작동합니다.테이블을 마우스 오른쪽 버튼으로 클릭-> 가져 오기로컬 파일, 형식 및 코딩을 선택하십시오.다음은 독일어 pgAdmin GUI 스크린 샷입니다.
DbVisualizer로 할 수있는 비슷한 일 (라이센스가 있지만 무료 버전에 대해서는 확실하지 않습니다)테이블을 마우스 오른쪽 버튼으로 클릭-> 테이블 데이터 가져 오기 ...
여기에있는 대부분의 다른 솔루션에서는 미리 / 수동으로 테이블을 작성해야합니다. 경우에 따라 실용적이지 않을 수 있습니다 (예 : 대상 테이블에 많은 열이있는 경우). 따라서 아래 접근 방식이 유용 할 수 있습니다.csv 파일의 경로 및 열 수를 제공하면 다음 함수를 사용하여 테이블을 임시 테이블에 다음과 같이 이름을 지정할 수 있습니다
target_table
.맨 윗줄에는 열 이름이 있다고 가정합니다.
create or replace function data.load_csv_file ( target_table text, csv_path text, col_count integer ) returns void as $$ declare iter integer; -- dummy integer to iterate columns with col text; -- variable to keep the column name at each iteration col_first text; -- first column name, e.g., top left corner on a csv file or spreadsheet begin create table temp_table (); -- add just enough number of columns for iter in 1..col_count loop execute format('alter table temp_table add column col_%s text;', iter); end loop; -- copy the data from csv file execute format('copy temp_table from %L with delimiter '','' quote ''"'' csv ', csv_path); iter := 1; col_first := (select col_1 from temp_table limit 1); -- update the column names based on the first row which has the column names for col in execute format('select unnest(string_to_array(trim(temp_table::text, ''()''), '','')) from temp_table where col_1 = %L', col_first) loop execute format('alter table temp_table rename column col_%s to %s', iter, col); iter := iter + 1; end loop; -- delete the columns row execute format('delete from temp_table where %s = %L', col_first, col_first); -- change the temp table name to the name given as parameter, if not blank if length(target_table) > 0 then execute format('alter table temp_table rename to %I', target_table); end if; end; $$ language plpgsql;
COPY table_name FROM 'path/to/data.csv' DELIMITER ',' CSV HEADER;
- 먼저 테이블을 만들
- 그런 다음 copy 명령을 사용하여 테이블 세부 사항을 복사하십시오.
'경로에서 CSV 파일 경로로'구분자 ','csv 헤더
에서
table_name (C1, C2, C3 ....) 복사감사
PostgreSQL에 대한 개인적인 경험으로 여전히 더 빠른 길을 기다리고 있습니다.
1. 파일이 로컬로 저장된 경우 먼저 테이블 스켈레톤을 작성하십시오.
drop table if exists ur_table; CREATE TABLE ur_table ( id serial NOT NULL, log_id numeric, proc_code numeric, date timestamp, qty int, name varchar, price money ); COPY ur_table(id, log_id, proc_code, date, qty, name, price) FROM '\path\xxx.csv' DELIMITER ',' CSV HEADER;
2. \ path \ xxx.csv가 서버에있는 경우 postgreSQL에 서버 액세스 권한이 없으면 pgAdmin 내장 기능을 통해 .csv 파일을 가져와야합니다.
테이블 이름을 마우스 오른쪽 버튼으로 클릭하고 가져 오기를 선택하십시오.
여전히 문제가있는 경우이 자습서를 참조하십시오.
http://www.postgresqltutorial.com/import-csv-file-into-posgresql-table/
이 SQL 코드를 사용하십시오
copy table_name(atribute1,attribute2,attribute3...) from 'E:\test.csv' delimiter ',' csv header
header 키워드는 csv 파일에 속성이있는 헤더가 있음을 DBMS에 알려줍니다.자세한 내용은 http://www.postgresqltutorial.com/import-csv-file-into-posgresql-table/을 방문하십시오
IMHO에서 가장 편리한 방법은 pip를 통해 설치할 수있는 파이썬 패키지 인 csvkit의 csvsql 을 사용하여 "
CSV 데이터를 편안한 방법으로 postgresql로 가져 오기 ;-)
"를
것 입니다.
Python에서는이 코드를 열 이름으로 자동 PostgreSQL 테이블 생성에 사용할 수 있습니다.
import pandas, csv from io import StringIO from sqlalchemy import create_engine def psql_insert_copy(table, conn, keys, data_iter): dbapi_conn = conn.connection with dbapi_conn.cursor() as cur: s_buf = StringIO() writer = csv.writer(s_buf) writer.writerows(data_iter) s_buf.seek(0) columns = ', '.join('"{}"'.format(k) for k in keys) if table.schema: table_name = '{}.{}'.format(table.schema, table.name) else: table_name = table.name sql = 'COPY {} ({}) FROM STDIN WITH CSV'.format(table_name, columns) cur.copy_expert(sql=sql, file=s_buf) engine = create_engine('postgresql://user:password@localhost:5432/my_db') df = pandas.read_csv("my.csv") df.to_sql('my_table', engine, schema='my_schema', method=psql_insert_copy)
또한 비교적 빠르므로 약 4 분 안에 330 만 개 이상의 행을 가져올 수 있습니다.
테이블을 작성하고 csv 파일에서 테이블을 작성하는 데 사용되는 필수 열이 있습니다.
- postgres를 열고로드 할 대상 테이블을 마우스 오른쪽 단추로 클릭하고 가져 오기를 선택한 후
파일 옵션
섹션 에서 다음 단계를 업데이트 하십시오. - 이제 파일 이름으로 파일을 찾아보십시오
- 형식으로 CSV를 선택하십시오
- ISO_8859_5로 인코딩
이제
기타로 이동하십시오. 옵션을 선택
하고 헤더를 확인하고 가져 오기를 클릭하십시오.
텍스트 / 구문 분석 여러 줄 CSV에서 가져 오는 간단한 메커니즘이 필요한 경우 다음을 사용할 수 있습니다.
CREATE TABLE t -- OR INSERT INTO tab(col_names) AS SELECT t.f[1] AS col1 ,t.f[2]::int AS col2 ,t.f[3]::date AS col3 ,t.f[4] AS col4 FROM ( SELECT regexp_split_to_array(l, ',') AS f FROM regexp_split_to_table( $$a,1,2016-01-01,bbb c,2,2018-01-01,ddd e,3,2019-01-01,eee$$, '\n') AS l) t;
csv
PostgreSQL로 파일을 매우 쉽게 가져 오는 작은 도구를 만들었습니다. 명령 만하면 불행히도 테이블이 자동으로 생성 된 모든 필드가 TEXT 유형을 사용하는 순간 불행히도 테이블을 만들고 채 웁니다.
csv2pg users.csv -d ";" -H 192.168.99.100 -U postgres -B mydatabase
이 도구는 https://github.com/eduardonunesp/csv2pg 에서 찾을 수 있습니다
CSV 파일 데이터를 PostgreSQL 테이블로 가져 오는 방법은 무엇입니까?단계 :
- 터미널에서 postgresql 데이터베이스를 연결해야합니다
psql -U postgres -h localhost
- 데이터베이스를 만들어야 함
create database mydb;
- 사용자를 생성해야 함
create user siva with password 'mypass';
- 데이터베이스와 연결
\c mydb;
- 스키마를 만들어야합니다
create schema trip;
- 테이블을 만들어야 함
create table trip.test(VendorID int,passenger_count int,trip_distance decimal,RatecodeID int,store_and_fwd_flag varchar,PULocationID int,DOLocationID int,payment_type decimal,fare_amount decimal,extra decimal,mta_tax decimal,tip_amount decimal,tolls_amount int,improvement_surcharge decimal,total_amount );
- PostgreSQL로 CSV 파일 데이터 가져 오기
COPY trip.test(VendorID int,passenger_count int,trip_distance decimal,RatecodeID int,store_and_fwd_flag varchar,PULocationID int,DOLocationID int,payment_type decimal,fare_amount decimal,extra decimal,mta_tax decimal,tip_amount decimal,tolls_amount int,improvement_surcharge decimal,total_amount) FROM '/home/Documents/trip.csv' DELIMITER ',' CSV HEADER;
- 주어진 테이블 데이터 찾기
select * from trip.test;
참고 URL :
https://stackoverflow.com/questions/2987433/how-to-import-csv-file-data-into-a-postgresql-table
도움이 되겠다면 ↓↓↓ 배너 한번만 클릭 해주시면 감사합니다 ^^
'programing' 카테고리의 다른 글
Go에서 여러 줄로 된 문자열을 어떻게 작성합니까? (0) | 2020.02.09 |
---|---|
iloc, ix 및 loc은 어떻게 다른가요? (0) | 2020.02.09 |
열의 최대 값이있는 행을 가져옵니다. (0) | 2020.02.09 |
힘내 GitHub에서 특정 지점을 당겨 (0) | 2020.02.09 |
파이썬의 디렉토리 트리 목록 (0) | 2020.02.09 |