Importieren Sie große CSV-Dateien in PostGIS

12

Ich versuche CSV-Dateien in PostGIS zu importieren. Nach diesem Beitrag habe ich bereits Tabellen erstellt. Ich habe andere Vorschläge gefunden, die besagen, dass ich den Kopierbefehl ausführen kann.

Wenn ich diesen Befehl ausführe:

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

es hat die Tabelle überhaupt nicht kopiert. Es heißt, dass "Tabelle" nicht erkannt wird.

Ich habe es versucht:

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;

hat aber auch nicht funktioniert.

Ein Beispiel eines solchen Datensatzes kann von diesem Link heruntergeladen werden :

Soll ich ein Modell erstellen und dann ausführen?

user3001937
quelle
3
Hast du versuchtCOPY moulding FROM '/Users/macbook/file.csv' DELIMITERS ',' CSV HEADER;
underdark
Haben Sie eine Tabelle tablein Ihrem öffentlichen Schema?
Luís de Sousa
Nein ! Ich versuche, diese Datei mit der Kopierfunktion zu importieren.
user3001937
Verwenden Sie wirklich CSV oder Shapefile? Ihre Frage lautet CSV, aber das Beispiel lautet shp ... Welche Postgis-Version verwenden Sie?
BradHards
@ BradHards: Wenn Sie die Datei herunterladen, finde ich die Datei mit der CSV-Erweiterung. Ich benutze die neueste Version von Postgis. psql (9.3.1, server 9.3.2)
user3001937

Antworten:

10

Sie sind fast da, aber ich denke, das Problem könnte der Tisch sein, in den Sie laden.

In PostGIS muss bereits eine Tabelle mit den richtigen Spaltentypen erstellt worden sein

Beispielsweise

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

Sie müssen jedoch den Spaltentyp mit dem gleichen Datentyp in der CSV abgleichen.

Sie können alle Datentypen hier sehen http://www.postgresql.org/docs/9.1/static/datatype.html

Nachdem Sie die Tabelle erstellt haben, können Sie den ursprünglichen Befehl verwenden

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

Sie müssen dann Indizes und eine Geometrie erstellen

tjmgis
quelle
4

Dies kann auch mit GDAL unter Verwendung einer .vrt-Datei erfolgen, obwohl dies speicherintensiv sein kann.

Sie vrt würde so aussehen:

<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> 

Dann einfach:

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

Für eine vollständige Anleitung siehe:

Laden von CSV OS CodePoint-Daten in PostGIS

HeikkiVesanto
quelle