原始网页:https://www.cockroachlabs.com/docs/stable/migrate-from-mysql.html


本小节介绍如何使用IMPORT语句从CSV文件迁移数据到CockroachDB当中。

以下示例从Amazon S3拉取真实的数据,其使用的employees数据集也被使用在MySQL文档当中,文件格式为CSV格式。

目前不支持导入数据到已经存在的表。

Step 1: 导出CSV格式的数据

根据导出CSV文件的源数据库,查看其相应的文档,导出CSV格式的数据文件。

用户为每张表导出的CSV格式的数据文件,需要满足以下要求:

Step 2: 上传文件到集群能访问到的位置

CockroachDB集群中的每个节点都需要访问到导入使用的数据文件。有几种方式能够使得集群访问到数据文件。关于IMPORT语句支持的存储位置的类型,可以查看Import File URL

TIPS: 我们强烈推荐使用云存储(例如Amazon S3或是Google Cloud)托管需要导入的数据文件。

Step 3: 导入CSV格式文件

用户可以根据情况使用并调整IMPORT TABLE语句来导入数据。

例如,可以使用以下语句从employees.csv导入数据到employees表:

IMPORT TABLE employees (
    emp_no INT PRIMARY KEY,
    birth_date DATE NOT NULL,
    first_name STRING NOT NULL,
    last_name STRING NOT NULL,
    gender STRING NOT NULL,
    hire_date DATE NOT NULL
  ) CSV DATA ('https://s3-us-west-1.amazonaws.com/cockroachdb-movr/datasets/employees-db/csv/employees.csv.gz');
       job_id       |  status   | fraction_completed |  rows  | index_entries | system_records |  bytes   
--------------------+-----------+--------------------+--------+---------------+----------------+----------
 381866942129111041 | succeeded |                  1 | 300024 |             0 |              0 | 13258389
(1 row)

对每个CSV文件通过以上方式导入数据。

在导入完成后可以使用ALTER TABLE ... ADD CONSTRAINT命令添加外键约束

配置选项

IMPORT ... CSV语句相关的配置选项有:

列分隔符

delimiter选项是用来设置用于标记列结束位置的Unicode字符。默认是,

示例:

IMPORT TABLE employees (
  emp_no INT PRIMARY KEY,
  birth_date DATE NOT NULL,
  first_name STRING NOT NULL,
  last_name STRING NOT NULL,
  gender STRING NOT NULL,
  hire_date DATE NOT NULL
)
CSV DATA ('s3://acme-co/employees.csv?AWS_ACCESS_KEY_ID=123&AWS_SECRET_ACCESS_KEY=456')
      WITH delimiter = e'\t';

注释语法

comment选项是用来设置跳过该行所有内容的Unicode字符。

示例:

IMPORT TABLE employees (
  emp_no INT PRIMARY KEY,
  birth_date DATE NOT NULL,
  first_name STRING NOT NULL,
  last_name STRING NOT NULL,
  gender STRING NOT NULL,
  hire_date DATE NOT NULL
)
CSV DATA ('s3://acme-co/employees.csv?AWS_ACCESS_KEY_ID=123&AWS_SECRET_ACCESS_KEY=456') 
      WITH comment = '#';

跳过首行

skip选项是用来设置跳过首部的行数。

示例:

IMPORT TABLE employees (
  emp_no INT PRIMARY KEY,
  birth_date DATE NOT NULL,
  first_name STRING NOT NULL,
  last_name STRING NOT NULL,
  gender STRING NOT NULL,
  hire_date DATE NOT NULL
)
CSV DATA ('s3://acme-co/employees.csv?AWS_ACCESS_KEY_ID=123&AWS_SECRET_ACCESS_KEY=456')
      WITH skip = '2';

空字符串

nullif选项用来设置将转义为NULL值的字符串。

示例:

IMPORT TABLE employees (
  emp_no INT PRIMARY KEY,
  birth_date DATE NOT NULL,
  first_name STRING NOT NULL,
  last_name STRING NOT NULL,
  gender STRING NOT NULL,
  hire_date DATE NOT NULL
)
CSV DATA ('s3://acme-co/employees.csv?AWS_ACCESS_KEY_ID=123&AWS_SECRET_ACCESS_KEY=456')
      WITH nullif = '';

文件压缩

compress选项用来设置解压缩CSV文件用的编解码器,可选值包括:

示例:

IMPORT TABLE employees (
  emp_no INT PRIMARY KEY,
  birth_date DATE NOT NULL,
  first_name STRING NOT NULL,
  last_name STRING NOT NULL,
  gender STRING NOT NULL,
  hire_date DATE NOT NULL
)
CSV DATA ('s3://acme-co/employees.csv.gz?AWS_ACCESS_KEY_ID=123&AWS_SECRET_ACCESS_KEY=456')
      WITH compress = 'gzip';