Importar arquivo CSV grande para PostGIS

12

Estou tentando importar arquivos CSV para o PostGIS. Após este post , eu criei tabelas antes. Encontrei outras sugestões dizendo que eu posso executar o comando copy.

Se eu executar este comando:

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

não copiava a tabela. Diz que "tabela" não é reconhecida.

Eu tentei isso:

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;

mas também não funcionou.

Um exemplo desse conjunto de dados pode ser baixado deste link :

Devo criar um modelo e depois executá-lo?

user3001937
fonte
3
Você tentouCOPY moulding FROM '/Users/macbook/file.csv' DELIMITERS ',' CSV HEADER;
underdark
Você tem uma tabela nomeada tableem seu esquema público?
Luís de Sousa
Não ! Estou tentando importar esse arquivo usando a função Copiar.
precisa saber é o seguinte
Você está realmente usando CSV ou Shapefile? Sua pergunta diz CSV, mas a amostra é shp ... Além disso, qual versão do postgis você está usando?
BradHards
@ BradHards: Se você baixar o arquivo, encontro o arquivo com extensão CSV. Eu uso a versão mais recente do Postgis. psql (9.3.1, servidor 9.3.2)
user3001937

Respostas:

10

Você está quase lá, mas acho que o problema pode ser a tabela na qual você está carregando.

Você já deve ter uma tabela criada no PostGIS com os tipos de coluna corretos

Por exemplo

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

Mas você precisa combinar o tipo de coluna com o mesmo tipo de dados no CSV.

Você pode ver todos os tipos de dados aqui http://www.postgresql.org/docs/9.1/static/datatype.html

Depois de criar a tabela, você poderá usar o comando original

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

Você precisará criar índices e uma geometria

tjmgis
fonte
4

Isso também pode ser feito com o GDAL usando um arquivo .vrt, embora possa consumir muita memória.

Você vrt ficaria assim:

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

Então simplesmente:

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 um guia completo, consulte:

Carregando dados do CodePoint OS CSV no PostGIS

HeikkiVesanto
fonte