Migrate from Shapefiles

On this page Carat arrow pointing down
Warning:
Cockroach Labs will stop providing Assistance Support for v23.1 on November 15, 2024. Prior to that date, upgrade to a more recent version to continue receiving support. For more details, refer to the Release Support Policy.

CockroachDB supports efficiently storing and querying spatial data.

This page has instructions for migrating data from ESRI Shapefiles into CockroachDB using shp2pgsql and IMPORT.

Tip:

We are using shp2pgsql in the example below, but ogr2ogr could also be used, e.g. ogr2ogr -f PGDUMP file.sql -lco LAUNDER=NO -lco DROP_TABLE=OFF file.shp

Note:

An ogr2ogr version of 3.1.0 or higher is required to generate data that can be imported into CockroachDB.

In the example below we will import a tornadoes data set that is available from the US National Weather Service (NWS).

Note:

Please refer to the documentation of your GIS software for instructions on exporting GIS data to Shapefiles.

Before You Begin

To follow along with the example below, you will need the following prerequisites:

Step 1. Download the Shapefile data

  1. Download the tornado data:

    icon/buttons/copy
    wget http://web.archive.org/web/20201018170120/https://www.spc.noaa.gov/gis/svrgis/zipped/1950-2018-torn-initpoint.zip
    
  2. Unzip the data file:

    icon/buttons/copy
    unzip 1950-2018-torn-initpoint.zip
    
  3. Change to the data folder:

    icon/buttons/copy
    cd 1950-2018-torn-initpoint/
    

Step 2. Convert the Shapefile data to SQL

To load the tornado Shapefile into CockroachDB, we must first convert it to SQL using the shp2pgsql tool:

icon/buttons/copy
shp2pgsql 1950-2018-torn-initpoint.shp > tornado-points.sql &

Step 3. Host the files where the cluster can access them

Each node in the CockroachDB cluster needs to have access to the files being imported. There are several ways for the cluster to access the data; for a complete list of the types of storage IMPORT can pull from, see import file locations.

For local testing, you can start a local file server. The following command will start a local file server listening on port 3000:

icon/buttons/copy
python3 -m http.server 3000

Step 4. Prepare the database

Next, create a tornadoes database to store the data in, and switch to it:

icon/buttons/copy
cockroach sql --insecure
icon/buttons/copy
CREATE DATABASE IF NOT EXISTS tornadoes;
USE tornadoes;

Step 5. Import the SQL

Since the file is being served from a local server and is formatted as PostgreSQL-compatible SQL, we can import the data using the following IMPORT PGDUMP statement:

icon/buttons/copy
IMPORT PGDUMP ('http://localhost:3000/tornado-points.sql') WITH ignore_unsupported_statements;
        job_id       |  status   | fraction_completed | rows  | index_entries |  bytes
---------------------+-----------+--------------------+-------+---------------+-----------
  584874782851497985 | succeeded |                  1 | 63645 |             0 | 18287213
(1 row)

See also


Yes No
On this page

Yes No