Importar archivos CSV grandes en PostGIS

12

Estoy tratando de importar archivos CSV en PostGIS. Después de esta publicación , he creado tablas antes. Encontré otras sugerencias que dicen que puedo ejecutar el comando copiar.

Si ejecuto este comando:

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

no copió la tabla en absoluto. Dice que "tabla" no se reconoce.

Intenté esto:

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;

pero tampoco funcionó.

Se puede descargar un ejemplo de dicho conjunto de datos desde este enlace :

¿Debo crear un modelo y luego ejecutarlo?

user3001937
fuente
3
¿Lo intentasteCOPY moulding FROM '/Users/macbook/file.csv' DELIMITERS ',' CSV HEADER;
Underdark
¿Tiene una tabla nombrada tableen su esquema público?
Luís de Sousa
No ! Estoy tratando de importar ese archivo usando la función Copiar.
user3001937
¿Realmente estás usando CSV o Shapefile? Su pregunta dice CSV, pero la muestra es shp ... Además, ¿qué versión de postgis está utilizando?
BradHards
@BradHards: si descargas el archivo, encuentro el archivo con la extensión CSV. Yo uso la última versión de Postgis. psql (9.3.1, servidor 9.3.2)
user3001937

Respuestas:

10

Ya casi estás allí, pero creo que el problema podría ser la tabla en la que estás cargando.

Ya debe haber creado una tabla en PostGIS con los tipos de columna correctos

Por ejemplo

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

Pero debe hacer coincidir el tipo de columna con el mismo tipo de datos en el CSV.

Puede ver todos los tipos de datos aquí http://www.postgresql.org/docs/9.1/static/datatype.html

Una vez que haya creado la tabla, puede usar el comando original

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

Luego deberá crear índices y una geometría

tjmgis
fuente
4

Esto también se puede hacer con GDAL usando un archivo .vrt, aunque puede requerir mucha memoria.

Tu vrt se vería así:

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

Entonces simplemente:

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

Para una guía completa ver:

Carga de datos de CSPoint OS CodePoint en PostGIS

HeikkiVesanto
fuente