Zaimportuj duży plik CSV do PostGIS

12

Próbuję zaimportować pliki CSV do PostGIS. Po tym poście wcześniej utworzyłem tabele. Znalazłem inne sugestie mówiące, że mogę uruchomić polecenie kopiowania.

Jeśli uruchomię to polecenie:

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

w ogóle nie skopiowało tabeli. Mówi, że „tabela” nie jest rozpoznawana.

Próbowałem tego:

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;

ale też nie działał.

Przykład takiego zestawu danych można pobrać z tego linku :

Czy powinienem stworzyć model, a następnie go wykonać?

użytkownik3001937
źródło
3
PróbowałeśCOPY moulding FROM '/Users/macbook/file.csv' DELIMITERS ',' CSV HEADER;
podmrok
Czy masz tabelę o nazwie tablew schemacie publicznym?
Luís de Sousa
Nie! Próbuję zaimportować ten plik za pomocą funkcji kopiowania.
user3001937
Czy naprawdę używasz CSV lub Shapefile? Twoje pytanie brzmi CSV, ale próbka to shp ... Z której wersji postgis korzystasz?
BradHards
@BradHards: Jeśli pobierzesz plik, znajdę plik z rozszerzeniem CSV. Korzystam z najnowszej wersji Postgis. psql (9.3.1, serwer 9.3.2)
użytkownik3001937

Odpowiedzi:

10

Już prawie jesteś, ale myślę, że problemem może być tabela, do której się ładujesz.

Musisz mieć już utworzoną tabelę w PostGIS z poprawnymi typami kolumn

Na przykład

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

Ale musisz dopasować typ kolumny do tego samego typu danych w CSV.

Możesz zobaczyć wszystkie typy danych tutaj http://www.postgresql.org/docs/9.1/static/datatype.html

Po utworzeniu tabeli możesz użyć oryginalnego polecenia

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

Następnie musisz utworzyć indeksy i geometrię

tjmgis
źródło
4

Można to również zrobić za pomocą GDAL przy użyciu pliku .vrt, chociaż może to wymagać dużej ilości pamięci.

Wyglądałbyś tak:

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

Następnie po prostu:

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

Pełny przewodnik patrz:

Ładowanie danych CSV OS CodePoint do PostGIS

HeikkiVesanto
źródło