นำเข้าไฟล์ CSV ขนาดใหญ่ไปยัง PostGIS


12

ฉันกำลังพยายามนำเข้าไฟล์ CSV ไปยัง PostGIS ติดตามโพสต์นี้ฉันได้สร้างตารางก่อน ฉันพบข้อเสนอแนะอื่น ๆ ที่บอกว่าฉันสามารถเรียกใช้คำสั่งคัดลอก

ถ้าฉันใช้คำสั่งนี้:

COPY table FROM '/Users/macbook/file.csv' DELIMITERS ',' CSV HEADER;

มันไม่ได้คัดลอกตารางเลย มันบอกว่า "ตาราง" ไม่เป็นที่รู้จัก

ฉันลองสิ่งนี้:

COPY moulding
(Borough,Block,Lot,CD,CT2010,CB2010,SchoolDist,Council,ZipCode,FireComp,PolicePrct,Address,ZoneDist1,ZoneDist2,ZoneDist3,ZoneDist4,Overlay1,Overlay2,SPDist1,SPDist2,LtdHeight,AllZoning1,AllZoning2,SplitZone,BldgClass,LandUse,Easements,OwnerType,OwnerName,LotArea,BldgArea,ComArea,ResArea,OfficeArea,RetailArea,GarageArea,StrgeArea,FactryArea,OtherArea,AreaSource,NumBldgs,NumFloors,UnitsRes,UnitsTotal,LotFront,LotDepth,BldgFront,BldgDepth,Ext,ProxCode,IrrLotCode,LotType,BsmtCode,AssessLand,AssessTot,ExemptLand,ExemptTot,YearBuilt,BuiltCode,YearAlter1,YearAlter2,HistDist,Landmark,BuiltFAR,ResidFAR,CommFAR,FacilFAR,BoroCode,BBL,CondoNo,Tract2010,XCoord,YCoord,ZoneMap,ZMCode,Sanborn,TaxMap,EDesigNum,APPBBL,APPDate,PLUTOMapID,Version)
FROM
'/Users/macbook/file.csv'
DELIMITERS
','
CSV HEADER;

แต่ก็ไม่ได้ผลเหมือนกัน

ตัวอย่างของชุดข้อมูลดังกล่าวสามารถดาวน์โหลดได้จากลิงค์นี้:

ฉันควรสร้างแบบจำลองและเรียกใช้งานหรือไม่


3
คุณลองCOPY moulding FROM '/Users/macbook/file.csv' DELIMITERS ',' CSV HEADER;
อันเดอร์พาร์ก

คุณมีตารางชื่อtableในสคีมาสาธารณะของคุณหรือไม่
Luís de Sousa

ไม่! ฉันกำลังพยายามนำเข้าไฟล์นั้นโดยใช้ฟังก์ชั่นการคัดลอก
user3001937

คุณใช้ CSV หรือ Shapefile จริง ๆ หรือไม่ คำถามของคุณพูดว่า CSV แต่ตัวอย่างคือ shp ... นอกจากนี้คุณใช้ Postgis เวอร์ชันใด
BradHards

@BradHards: หากคุณดาวน์โหลดไฟล์ฉันพบไฟล์ที่มีนามสกุล CSV ฉันใช้ Postgis เวอร์ชันล่าสุด psql (9.3.1, เซิร์ฟเวอร์ 9.3.2)
3001937

คำตอบ:


10

คุณเกือบจะอยู่ที่นั่น แต่ฉันคิดว่าปัญหาอาจเป็นตารางที่คุณโหลดเข้ามา

คุณต้องมีตารางที่สร้างขึ้นใน PostGIS ด้วยประเภทคอลัมน์ที่ถูกต้อง

ตัวอย่างเช่น

CREATE TABLE nycdata (
    BOROUGH varchar,
    BLOCK varch,
    DATE date,
    VERSION numeric);

แต่คุณต้องจับคู่ประเภทคอลัมน์กับข้อมูลประเภทเดียวกันใน CSV

คุณสามารถดูประเภทข้อมูลทั้งหมดได้ที่นี่http://www.postgresql.org/docs/9.1/static/datatype.html

เมื่อคุณสร้างตารางคุณสามารถใช้คำสั่งเดิมได้

COPY nycdata FROM '/Users/macbook/data.csv' DELIMITERS ',' CSV HEADER;

จากนั้นคุณจะต้องสร้างดัชนีและรูปทรงเรขาคณิต


4

สิ่งนี้สามารถทำได้ด้วย GDAL โดยใช้ไฟล์. vrt แม้ว่าจะสามารถใช้หน่วยความจำมาก

คุณ vrt จะมีลักษณะดังนี้:

<OGRVRTDataSource> 
<OGRVRTLayer name="feature_name"> 
    <SrcDataSource>your_csv.csv</SrcDataSource> 
    <GeometryType>wkbPoint</GeometryType> 
    <LayerSRS>EPSG:27700</LayerSRS> 
    <GeometryField encoding="PointFromColumns" x="Eastings" y="Northings"/> 
</OGRVRTLayer> 

จากนั้นเพียง:

ogr2ogr -progress -nln table_name_doesnt_need_to_exist -skipfailures  PostgreSQL PG:"dbname='dbname' host='localhost' port='5432'  user='username' password='password'" vrt_filename.vrt

สำหรับคำแนะนำฉบับเต็มโปรดดู:

กำลังโหลดข้อมูล CodePoint ของระบบปฏิบัติการ CSV ลงใน PostGIS

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.