导入

neo4j-admin database import 以尽可能快的速度将 CSV 数据写入 Neo4j 的原生文件格式。当以下情况发生时,您应该使用此工具

  • 导入性能非常重要,因为您有大量数据(数百万/数十亿个实体)。

  • 数据库可以脱机,并且您可以直接访问托管 Neo4j DBMS 的服务器之一。

  • 数据库为空,或者其内容自上次增量导入以来未更改。

  • CSV 数据干净/无故障(节点不重复,关系的起始节点和结束节点存在)。此工具可以处理数据故障,但性能未优化。如果您的数据有很多故障,建议在导入之前使用专用工具对其进行清理。

其他将数据导入 Neo4j 的方法可能更适合非管理员用户

变更数据捕获(CDC)**不会**捕获使用neo4j-admin database import命令产生的任何数据变更。更多信息,请参见 变更数据捕获 → 关键注意事项.

概述

neo4j-admin database import命令有两种模式,均用于初始数据导入

  • 完整 — 用于将数据导入到不存在的空数据库中。

  • 增量 — 当无法通过单个完整导入完成导入时使用,允许导入为一系列较小的导入。

运行neo4j-admin database import的用户必须对server.directories.dataserver.directories.log拥有写入权限。

本节介绍neo4j-admin database import选项。

有关LOAD CSV的信息,请参见 Cypher 手册 → LOAD CSV。有关使用neo4j-admin database import命令的深入示例,请参考 教程 → Neo4j Admin 导入.

在创建输入文件时,需要牢记以下几点

  • 默认情况下,字段以逗号分隔,但可以指定不同的分隔符。

  • 所有文件必须使用相同的分隔符。

  • 节点和关系可以使用多个数据源。

  • 数据源可以选择使用多个文件。

  • 一个单独的文件,包含提供数据字段信息的标题,必须是每个数据源的第一个指定文件。

  • 没有标题中对应信息的字段将不会被读取。

  • 使用 UTF-8 编码。

  • 默认情况下,导入程序会修剪字符串开头和结尾的多余空格。引用您的数据以保留开头和结尾的空格。

索引和约束

导入过程中不会创建索引和约束。相反,您需要在之后添加这些内容(参见 Cypher 手册 → 索引)。

从 Neo4j 5.24 开始,可以使用--schema选项在导入过程中创建索引和约束。该选项在企业版中可用,仅适用于块格式。有关更多信息,请参见 在导入期间提供索引和约束

完整导入

语法

导入一组 CSV 文件的语法为

neo4j-admin database import full [-h] [--expand-commands] [--verbose] [--auto-skip-subsequent-headers[=true|false]]
                                 [--ignore-empty-strings[=true|false]] [--ignore-extra-columns[=true|false]]
                                 [--legacy-style-quoting[=true|false]] [--multiline-fields[=true|false]]
                                 [--normalize-types[=true|false]] [--overwrite-destination[=true|false]]
                                 [--skip-bad-entries-logging[=true|false]] [--skip-bad-relationships[=true|false]]
                                 [--skip-duplicate-nodes[=true|false]] [--strict[=true|false]] [--trim-strings
                                 [=true|false]] [--additional-config=<file>] [--array-delimiter=<char>]
                                 [--bad-tolerance=<num>] [--delimiter=<char>] [--format=<format>]
                                 [--high-parallel-io=on|off|auto] [--id-type=string|integer|actual]
                                 [--input-encoding=<character-set>] [--max-off-heap-memory=<size>] [--quote=<char>]
                                 [--read-buffer-size=<size>] [--report-file=<path>] [--schema=<path>] [--threads=<num>]
                                 --nodes=[<label>[:<label>]...=]<files>... [--nodes=[<label>[:<label>]...=]
                                 <files>...]... [--relationships=[<type>=]<files>...]... <database>

描述

初始导入到不存在的空数据库中。

参数

表 1. neo4j-admin database import full 参数
参数 描述 默认值

<database>

要导入的数据库的名称。如果您要导入的数据库在导入之前不存在,则必须使用CREATE DATABASE随后创建它。

neo4j

以下选项中的一些标记为**高级**。这些选项不应用于实验。

有关更多信息,请联系 Neo4j 专业服务。

选项

表 2. neo4j-admin database import full 选项
选项 描述 默认值

--additional-config=<file>

包含附加配置的配置文件。

--array-delimiter=<char>

CSV 数据中值内数组元素之间的分隔符。也接受TAB和例如U+20AC,用于使用 Unicode 指定字符。

  • ASCII 字符 — 例如 --array-delimiter=";"

  • \ID — 带 ID 的 Unicode 字符,例如 --array-delimiter="\59"

  • U+XXXX — 使用 4 个十六进制字符指定的 Unicode 字符,例如 --array-delimiter="U+20AC"

  • \t — 水平制表符 (HT),例如 --array-delimiter="\t"

对于水平制表符 (HT),请使用\t或 Unicode 字符 ID\9

如果使用\作为前缀,可以使用 Unicode 字符 ID。

;

--auto-skip-subsequent-headers[=true|false]

在具有多个文件的文件组中,自动跳过后续文件中意外的标题行。

false

--bad-tolerance=<num>

导入中止前允许出现的错误条目数量。导入过程针对无错误数据进行了优化。因此,强烈建议在导入之前清理数据。如果您在导入过程中遇到任何错误条目,可以将错误条目的数量设置为满足您需求的特定值。但是,设置较高的值可能会影响工具的性能。

1000

--delimiter=<char>

CSV 数据中值之间的分隔符。也接受TAB和例如U+20AC,用于使用 Unicode 指定字符。

  • ASCII 字符 — 例如 --delimiter=","

  • \ID — 带 ID 的 Unicode 字符,例如 --delimiter="\44"

  • U+XXXX — 使用 4 个十六进制字符指定的 Unicode 字符,例如 --delimiter="U+20AC"

  • \t — 水平制表符 (HT),例如 --delimiter="\t"

对于水平制表符 (HT),请使用\t或 Unicode 字符 ID\9

如果使用\作为前缀,可以使用 Unicode 字符 ID。

,

--expand-commands

允许在配置值评估中进行命令扩展。

--format=<format>

数据库格式的名称。导入的数据库将以指定的格式创建,或使用配置中设置的格式。有效格式为standardalignedhigh_limitblock

-h, --help

显示此帮助消息并退出。

--high-parallel-io=on|off|auto

忽略基于环境的启发式方法,并指示目标存储子系统是否可以支持具有高吞吐量的并行 I/O 或自动检测。通常,对于 SSD、大型 RAID 阵列和网络连接存储,此值为on

auto

--id-type=string|integer|actual

每个节点都必须提供一个唯一的 ID。这用于在创建关系时查找正确的节点。

可能的值为

  • string — 用于标识节点的任意字符串。

  • integer — 用于标识节点的任意整数值。

  • actual — (高级)实际节点 ID。

string

--ignore-empty-strings[=true|false]

是否忽略空字符串字段,即输入源中的 "",即将其视为 null。

false

--ignore-extra-columns[=true|false]

如果未指定的列应在导入期间被忽略。

false

--input-encoding=<character-set>

输入数据的编码字符集。

UTF-8

--legacy-style-quoting[=true|false]

是否将反斜杠转义的引号(例如 \")解释为内部引号。

false

--max-off-heap-memory=<size>

neo4j-admin可用于各种数据结构和缓存以提高性能的最大内存。

值可以是普通数字,例如10000000,也可以是20G(表示 20 千兆字节)。也可以将其指定为可用内存的百分比,例如70%

90%

--multiline-fields[=true|false]

输入源中的字段是否可以跨越多行,即包含换行符。

设置--multiline-fields=true可能会严重降低导入程序的性能。因此,请谨慎使用,尤其是在大型导入中。

false

--nodes=[<label>[:<label>]…​=]<files>…​

节点 CSV 标题和数据。

  • 多个文件从导入程序的角度来看将被逻辑地视为一个大文件。

  • 第一行必须包含标题。

  • 在一次导入中可以指定多个这样的数据源,其中每个数据源都有自己的标题。

  • 文件也可以使用正则表达式指定。

可以使用适当的 URI 作为路径,从 AWS S3 存储桶、Google Cloud 存储桶和 Azure 存储桶导入文件。

--normalize-types[=true|false]

当为true时,非数组属性值将转换为其等效的 Cypher 类型。例如,所有整数值都将转换为 64 位长整型。

true

--overwrite-destination[=true|false]

在导入之前删除任何现有的数据库文件。

false

--quote=<char>

用作 CSV 数据中值的引号字符的字符。

引号可以根据 RFC 4180 进行转义,方法是将其加倍,例如""将被解释为字面量"

您不能使用\进行转义。

"

--read-buffer-size=<size>

用于读取输入数据的每个缓冲区的尺寸。

它必须至少大到足以容纳输入数据中最大的单个值。该值可以是普通数字或字节单位字符串,例如128k1m

4194304

--relationships=[<type>=]<files>…​

关系 CSV 标题和数据。

  • 多个文件从导入程序的角度来看将被逻辑地视为一个大文件。

  • 第一行必须包含标题。

  • 在一次导入中可以指定多个这样的数据源,其中每个数据源都有自己的标题。

  • 文件也可以使用正则表达式指定。

可以使用适当的 URI 作为路径,从 AWS S3 存储桶、Google Cloud 存储桶和 Azure 存储桶导入文件。

--report-file=<path>

用于存储 csv-import 报告的文件。

可以使用--report-file选项控制导入日志文件的存放位置。如果您运行的是数据质量较低的 CSV 文件的大型导入,则导入日志文件可能会变得非常大。例如,包含重复节点 ID 或尝试在不存在的节点之间创建关系的 CSV 文件,可以被归类为数据质量较低。在这种情况下,您可能希望将输出定向到可以处理大型日志文件的存放位置。

如果您在类似 UNIX 的系统上运行,并且对输出不感兴趣,则可以通过将报告文件定向到/dev/null完全消除输出。

如果您需要调试导入,收集堆栈跟踪可能会有所帮助。这可以通过使用--verbose选项来完成。

import.report

--schema=<path>

在 5.24 中引入 企业版 包含在数据导入期间创建索引和约束的 Cypher 命令的文件的路径。

--skip-bad-entries-logging[=true|false]

设置为true时,错误条目的详细信息不会写入日志。当数据包含大量错误时,禁用日志记录可以提高性能。强烈建议在导入之前清理数据,因为错误会严重影响工具的性能,即使没有日志记录也是如此。

false

--skip-bad-relationships[=true|false]

是否跳过导入引用丢失节点 ID 的关系,即开始或结束节点 ID/组引用未由节点输入数据指定的节点。

跳过的关系将被记录,最多包含由--bad-tolerance指定的实体数量,除非由--skip-bad-entries-logging选项另行指定。

false

--skip-duplicate-nodes[=true|false]

是否跳过导入具有相同 ID/组的节点。

如果同一组中的多个节点具有相同的 ID,则将导入第一个遇到的节点,而后续此类节点将被跳过。

跳过的节点将被记录,最多包含由--bad-tolerance指定的实体数量,除非由--skip-bad-entries-logging选项另行指定。

false

--strict[=true|false]

在 5.6 中引入 是否需要严格检查从关系中引用的节点的查找。如果禁用,大多数但并非所有引用不存在的节点的关系都将被检测到。如果启用,所有这些关系都将被找到,但代价是降低性能。

false 在 5.8 中更改

--threads=<num>

(高级)导入程序使用的最大工作线程数量。默认值为 JVM 报告的可用处理器数量。需要一定数量的最小线程,因此此值的最小值没有下限。为了获得最佳性能,此值不应大于可用处理器的数量。

20

--trim-strings[=true|false]

是否应该修剪字符串的空格。

false

--verbose

启用详细输出。

导入的堆大小

您需要将最大堆大小设置为与导入相关的值。这可以通过在启动导入之前定义HEAP_SIZE环境参数来完成。例如,2G 是较小导入的合适值。

如果进行约 1000 亿个实体的导入,20G 将是一个合适的价值。

记录格式

如果您的导入数据导致图形的大小超过 340 亿个节点、340 亿个关系或 680 亿个属性,则需要配置导入器以使用 `block` 格式。这可以通过使用导入命令的 `format` 选项并将值设置为 `block` 来实现。

bin/neo4j-admin database import full --format=block

`block` 格式仅在企业版中可用。

在文件中提供参数

所有选项都可以在文件中提供,并使用 `@` 前缀传递到命令。当命令行变得过长而难以管理时,这很有用。例如,以下命令

bin/neo4j-admin database import full @/path/to/your/<args-filename> mydb

有关更多信息,请参见 Picocli → AtFiles 官方文档。

同时使用多值选项和位置参数

当同时使用多值选项(例如 `--nodes` 和 `--relationships`)和位置参数(例如,在 `--additional-config neo4j.properties --nodes 0-nodes.csv mydatabase` 中)时,`--nodes` 选项会“贪婪地”使用,而下一个选项(在本例中为 `mydatabase`)将通过节点转换器拉取。

这是底层库 Picocli 的限制,并非 Neo4j Admin 特有。有关更多信息,请参见 Picocli → 可变元数选项和位置参数 官方文档。

要解决此问题,请使用以下解决方案之一

  • 将位置参数放在首位。例如,`mydatabase --nodes 0-nodes.csv`。

  • 将位置参数放在末尾,在 `--` 和最后一个多值选项的最终值之后。例如,`nodes 0-nodes.csv -- mydatabase`。

从云存储导入

`--nodes` 和 `--relationships` 选项还可以从 AWS S3 存储桶(从 Neo4j 5.19 开始)、Google Cloud 存储桶(从 Neo4j 5.21 开始)和 Azure 存储桶(从 Neo4j 5.24 开始)导入文件。有关更多信息,请参见 从云存储导入文件

示例

如果导入到在导入之前尚未显式创建的数据库,则必须随后创建该数据库才能使用。

从 CSV 文件导入数据

假设您已根据 CSV 标头格式 格式化您的数据,以便将其保存在六个不同的文件中

  1. movies_header.csv

  2. movies.csv

  3. actors_header.csv

  4. actors.csv

  5. roles_header.csv

  6. roles.csv

以下命令导入三个数据集

bin/neo4j-admin database import full --nodes import/movies_header.csv,import/movies.csv \
--nodes import/actors_header.csv,import/actors.csv \
--relationships import/roles_header.csv,import/roles.csv

在导入过程中提供索引和约束

从 Neo4j 5.24 开始,您可以使用 `--schema` 选项,该选项允许提供 Cypher 命令以在初始导入过程中创建索引/约束。它目前仅适用于 block 格式和完整导入。

您应该有一个 Cypher 脚本,其中只包含要解析和执行的 `CREATE INDEX|CONSTRAINT` 命令。此文件使用 `;` 作为分隔符。

例如

CREATE INDEX PersonNameIndex FOR (i:Person) ON (i.name);
CREATE CONSTRAINT PersonAgeConstraint FOR (c:Person) REQUIRE c.age IS :: INTEGER

导入工具可以创建的支持索引和约束列表

  • RANGE

  • LOOKUP

  • POINT

  • TEXT

  • FULL-TEXT

  • VECTOR

例如

bin/neo4j-admin database import full neo4j --nodes=import/movies.csv --nodes=import/actors.csv --relationships=import/roles.csv --schema=import/schema.cypher

使用正则表达式从 CSV 文件导入数据

假设您要包含一个标头,然后包含多个与模式匹配的文件(例如,包含数字)。在这种情况下,可以使用正则表达式。可以保证数字组将按数字顺序排序,而不是按字典顺序排序。

例如

bin/neo4j-admin database import full --nodes import/node_header.csv,import/node_data_\d+\.csv

使用更复杂的正则表达式从 CSV 文件导入数据

对于包含逗号的正则表达式模式,而逗号也是一组文件之间的分隔符,可以引用该模式以保留该模式。

例如

bin/neo4j-admin database import full --nodes import/node_header.csv,'import/node_data_\d{1,5}.csv' databasename

从云存储导入文件

以下示例展示了如何使用 `--nodes` 和 `--relationships` 选项从云存储桶中导入数据。

Neo4j 使用 AWS SDK v2 通过 AWS URL 调用 AWS 上的 API。或者,您可以覆盖端点,以便 AWS SDK 可以使用系统变量 `aws.endpointUrls3`、`aws.endpointUrlS3` 或 `aws.endpointUrl`,或环境变量 `AWS_ENDPOINT_URL_S3` 或 `AWS_ENDPOINT_URL` 与其他存储系统(如 Ceph、Minio 或 LocalStack)进行通信。

  1. 按照 AWS 官方文档中的说明安装 AWS CLI - 安装 AWS CLI 版本 2

  2. 使用 AWS CLI 创建一个 S3 存储桶和一个目录来存储备份文件

    aws s3 mb --region=us-east-1 s3://myBucket
    aws s3api put-object --bucket myBucket --key myDirectory/

    有关如何创建存储桶和使用 AWS CLI 的更多信息,请参见 AWS 官方文档 - 使用 AWS CLI 使用 Amazon S3使用高级(s3)命令与 AWS CLI

  3. 通过运行以下命令验证 `~/.aws/config` 文件是否正确

    cat ~/.aws/config

    输出应如下所示

    [default]
    region=us-east-1
  4. 通过在 `~/.aws/credentials` 文件中设置 `aws_access_key_id` 和 `aws_secret_access_key` 来配置对 AWS S3 存储桶的访问,如果需要,可以使用存储桶策略。例如

    1. 使用 `aws configure set aws_access_key_id aws_secret_access_key` 命令从 AWS 设置您的 IAM 凭据,并验证 `~/.aws/credentials` 是否正确

      cat ~/.aws/credentials

      输出应如下所示

      [default]
      aws_access_key_id=this.is.secret
      aws_secret_access_key=this.is.super.secret
    2. 此外,您可以使用基于资源的策略来授予对 S3 存储桶及其中的对象的访问权限。使用以下内容创建一个策略文档,并将其附加到存储桶。请注意,这两个资源条目对于能够下载和上传文件都很重要。

      {
          "Version": "2012-10-17",
          "Id": "Neo4jBackupAggregatePolicy",
          "Statement": [
              {
                  "Sid": "Neo4jBackupAggregateStatement",
                  "Effect": "Allow",
                  "Action": [
                      "s3:ListBucket",
                      "s3:GetObject",
                      "s3:PutObject",
                      "s3:DeleteObject"
                  ],
                  "Resource": [
                      "arn:aws:s3:::myBucket/*",
                      "arn:aws:s3:::myBucket"
                  ]
              }
          ]
      }
  5. 运行 `neo4j-admin database import` 命令从 AWS S3 存储桶中导入数据。该示例假设您在存储桶中的 `myBucket/data` 文件夹中存储了数据。

    bin/neo4j-admin database import full --nodes s3://myBucket/data/nodes.csv --relationships s3://myBucket/data/relationships.csv newdb
  1. 确保您拥有 Google 帐户以及在 Google Cloud Platform (GCP) 中创建的项目。

    1. 按照 Google 官方文档中的说明安装 `gcloud` CLI - 安装 gcloud CLI

    2. 使用 Google 官方文档创建服务帐户和服务帐户密钥 - 创建服务帐户创建和管理服务帐户密钥

    3. 下载服务帐户的 JSON 密钥文件。

    4. 分别将 `GOOGLE_APPLICATION_CREDENTIALS` 和 `GOOGLE_CLOUD_PROJECT` 环境变量设置为 JSON 密钥文件的路径和项目 ID

      export GOOGLE_APPLICATION_CREDENTIALS="/path/to/keyfile.json"
      export GOOGLE_CLOUD_PROJECT=YOUR_PROJECT_ID
    5. 使用您创建的服务帐户的电子邮件地址、JSON 密钥文件的路径和项目 ID 对 `gcloud` CLI 进行身份验证

      gcloud auth activate-service-account service-account@example.com --key-file=$GOOGLE_APPLICATION_CREDENTIALS --project=$GOOGLE_CLOUD_PROJECT

      有关更多信息,请参见 Google 官方文档 - gcloud auth activate-service-account

    6. 使用 Google 官方文档在 Google Cloud Storage 中创建存储桶 - 创建存储桶

    7. 通过运行以下命令验证存储桶是否已创建

      gcloud storage ls

      输出应该列出创建的存储桶。

  2. 运行 `neo4j-admin database import` 命令从 Google 存储桶中导入数据。该示例假设您在存储桶中的 `myBucket/data` 文件夹中存储了数据。

    bin/neo4j-admin database import full --nodes gs://myBucket/data/nodes.csv --relationships gs://myBucket/data/relationships.csv newdb
  1. 确保您拥有 Azure 帐户、Azure 存储帐户和 Blob 容器。

    1. 您可以使用 Azure 门户创建存储帐户。
      有关更多信息,请参见 Azure 官方文档 - 创建存储帐户

    2. 在 Azure 门户中创建 Blob 容器。
      有关更多信息,请参见 Azure 官方文档 - 快速入门:使用 Azure 门户上传、下载和列出 Blob

  2. 按照 Azure 官方文档中的说明安装 Azure CLI - Azure 官方文档

  3. 使用默认 Azure 凭据对 neo4j 或 neo4j-admin 进程进行身份验证。
    有关更多信息,请参见 Azure 官方文档 - 默认 Azure 凭据

    az login

    然后您应该准备好使用 neo4j 或 neo4j-admin 中的 Azure URL。

  4. 要验证您是否有权使用登录凭据访问容器,请运行以下命令

    # Upload a file:
    az storage blob upload --file someLocalFile  --account-name accountName - --container someContainer --name remoteFileName  --auth-mode login
    
    # Download the file
    az storage blob download  --account-name accountName --container someContainer --name remoteFileName --file downloadedFile --auth-mode login
    
    # List container files
    az storage blob list  --account-name someContainer --container someContainer  --auth-mode login
  5. 运行 `neo4j-admin database import` 命令从 Azure Blob 存储容器中导入数据。该示例假设您在容器中的 `myStorageAccount/myContainer/data` 文件夹中存储了数据。

    bin/neo4j-admin database import full --nodes azb://myStorageAccount/myContainer/data/nodes.csv --relationships azb://myStorageAccount/myContainer/data/relationships.csv newdb

增量导入

增量导入从 Neo4j 5.20 开始支持 `block` 格式。

增量导入允许您将大量数据分批合并到图形中。您可以在无法一次性完成完整导入的情况下,将此操作作为初始数据加载的一部分运行。此外,您可以通过增量导入数据来更新图形,这比对这类数据进行事务性插入的效率更高。

增量导入需要使用 `--force`,并且只能在现有数据库上运行。

如果要在一个命令中执行增量导入,则必须停止数据库。

如果您无法承受数据库的完全停机时间,请将操作分成多个阶段

  • 准备阶段(脱机)

  • 构建阶段(脱机或只读)

  • 合并阶段(脱机)

数据库必须在 `准备` 和 `合并` 阶段停止。在 `构建` 阶段,可以使数据库保持在线状态,但将其置于只读模式。有关详细示例,请参见 分阶段增量导入

强烈建议在运行增量导入之前备份数据库,因为如果 *合并* 阶段失败、中止或崩溃,可能会损坏数据库。

语法

neo4j-admin database import incremental [-h] [--expand-commands] --force [--verbose] [--auto-skip-subsequent-headers
                                        [=true|false]] [--ignore-empty-strings[=true|false]] [--ignore-extra-columns
                                        [=true|false]] [--legacy-style-quoting[=true|false]] [--multiline-fields
                                        [=true|false]] [--normalize-types[=true|false]] [--skip-bad-entries-logging
                                        [=true|false]] [--skip-bad-relationships[=true|false]] [--skip-duplicate-nodes
                                        [=true|false]] [--strict[=true|false]] [--trim-strings[=true|false]]
                                        [--additional-config=<file>] [--array-delimiter=<char>] [--bad-tolerance=<num>]
                                        [--delimiter=<char>] [--high-parallel-io=on|off|auto]
                                        [--id-type=string|integer|actual] [--input-encoding=<character-set>]
                                        [--max-off-heap-memory=<size>] [--quote=<char>] [--read-buffer-size=<size>]
                                        [--report-file=<path>] [--schema=<path>] [--stage=all|prepare|build|merge]
                                        [--threads=<num>] --nodes=[<label>[:<label>]...=]<files>... [--nodes=[<label>
                                        [:<label>]...=]<files>...]... [--relationships=[<type>=]<files>...]... <database>

描述

增量导入到现有数据库中。

用法和限制

增量导入命令可用于添加

  • 带有标签和属性的新节点。

    请注意,您必须为构成主键的属性键和标签组合或唯一可识别节点设置节点属性唯一性约束。否则,命令将抛出错误并退出。有关更多信息,请参见 CSV 标头格式

  • 现有节点或新节点之间的新关系。

增量导入命令不能用于

  • 向现有节点或关系添加新属性。

  • 更新或删除节点或关系中的属性。

  • 更新或删除节点中的标签。

  • 删除现有节点和关系。

导入器在独立服务器上运行良好。在具有数据库多个副本的集群环境中,必须重新播种更新的数据库。

参数

表 3. `neo4j-admin database import incremental` 参数
参数 描述 默认值

<database>

要导入的数据库的名称。如果您要导入的数据库在导入之前不存在,则必须使用CREATE DATABASE随后创建它。

neo4j

选项

表 4. `neo4j-admin database import incremental` 选项
选项 描述 默认值

--additional-config=<file>

包含附加配置的配置文件。

--array-delimiter=<char>

CSV 数据中值内数组元素之间的分隔符。也接受TAB和例如U+20AC,用于使用 Unicode 指定字符。

  • ASCII 字符 — 例如 --array-delimiter=";"

  • \ID — 带 ID 的 Unicode 字符,例如 --array-delimiter="\59"

  • U+XXXX — 使用 4 个十六进制字符指定的 Unicode 字符,例如 --array-delimiter="U+20AC"

  • \t — 水平制表符 (HT),例如 --array-delimiter="\t"

对于水平制表符 (HT),请使用\t或 Unicode 字符 ID\9

如果使用\作为前缀,可以使用 Unicode 字符 ID。

;

--auto-skip-subsequent-headers[=true|false]

在具有多个文件的文件组中,自动跳过后续文件中意外的标题行。

false

--bad-tolerance=<num>

导入中止前允许出现的错误条目数量。导入过程针对无错误数据进行了优化。因此,强烈建议在导入之前清理数据。如果您在导入过程中遇到任何错误条目,可以将错误条目的数量设置为满足您需求的特定值。但是,设置较高的值可能会影响工具的性能。

1000

--delimiter=<char>

CSV 数据中值之间的分隔符。也接受TAB和例如U+20AC,用于使用 Unicode 指定字符。

  • ASCII 字符 — 例如 --delimiter=","

  • \ID — 带 ID 的 Unicode 字符,例如 --delimiter="\44"

  • U+XXXX — 使用 4 个十六进制字符指定的 Unicode 字符,例如 --delimiter="U+20AC"

  • \t — 水平制表符 (HT),例如 --delimiter="\t"

对于水平制表符 (HT),请使用\t或 Unicode 字符 ID\9

如果使用\作为前缀,可以使用 Unicode 字符 ID。

,

--expand-commands

允许在配置值评估中进行命令扩展。

--force

通过设置此标志来确认增量导入。

-h, --help

显示此帮助消息并退出。

--high-parallel-io=on|off|auto

忽略基于环境的启发式方法,并指示目标存储子系统是否可以支持具有高吞吐量的并行 I/O 或自动检测。通常,对于 SSD、大型 RAID 阵列和网络连接存储,此值为on

auto

--id-type=string|integer|actual

在 5.1 中引入 每个节点必须提供唯一的 ID。这用于在创建关系时查找正确的节点。

可能的值为

  • string — 用于标识节点的任意字符串。

  • integer — 用于标识节点的任意整数值。

  • actual — (高级)实际节点 ID。

string

--ignore-empty-strings[=true|false]

是否忽略空字符串字段,即输入源中的 "",即将其视为 null。

false

--ignore-extra-columns[=true|false]

如果未指定的列应在导入期间被忽略。

false

--input-encoding=<character-set>

输入数据的编码字符集。

UTF-8

--legacy-style-quoting[=true|false]

是否将反斜杠转义的引号(例如 \")解释为内部引号。

false

--max-off-heap-memory=<size>

neo4j-admin可用于各种数据结构和缓存以提高性能的最大内存。

值可以是普通数字,例如10000000,也可以是20G(表示 20 千兆字节)。也可以将其指定为可用内存的百分比,例如70%

90%

--multiline-fields[=true|false]

输入源中的字段是否可以跨越多行,即包含换行符。

设置--multiline-fields=true可能会严重降低导入程序的性能。因此,请谨慎使用,尤其是在大型导入中。

false

--nodes=[<label>[:<label>]…​=]<files>…​

节点 CSV 标题和数据。

  • 多个文件从导入程序的角度来看将被逻辑地视为一个大文件。

  • 第一行必须包含标题。

  • 在一次导入中可以指定多个这样的数据源,其中每个数据源都有自己的标题。

  • 文件也可以使用正则表达式指定。

可以使用适当的 URI 作为路径,从 AWS S3 存储桶、Google Cloud 存储桶和 Azure 存储桶导入文件。

--normalize-types[=true|false]

当为true时,非数组属性值将转换为其等效的 Cypher 类型。例如,所有整数值都将转换为 64 位长整型。

true

--quote=<char>

用作 CSV 数据中值的引号字符的字符。

引号可以根据 RFC 4180 进行转义,方法是将其加倍,例如""将被解释为字面量"

您不能使用\进行转义。

"

--read-buffer-size=<size>

用于读取输入数据的每个缓冲区的尺寸。

它必须至少大到足以容纳输入数据中最大的单个值。该值可以是普通数字或字节单位字符串,例如128k1m

4194304

--relationships=[<type>=]<files>…​

关系 CSV 标题和数据。

  • 多个文件从导入程序的角度来看将被逻辑地视为一个大文件。

  • 第一行必须包含标题。

  • 在一次导入中可以指定多个这样的数据源,其中每个数据源都有自己的标题。

  • 文件也可以使用正则表达式指定。

可以使用适当的 URI 作为路径,从 AWS S3 存储桶、Google Cloud 存储桶和 Azure 存储桶导入文件。

--report-file=<path>

用于存储 csv-import 报告的文件。

可以使用--report-file选项控制导入日志文件的存放位置。如果您运行的是数据质量较低的 CSV 文件的大型导入,则导入日志文件可能会变得非常大。例如,包含重复节点 ID 或尝试在不存在的节点之间创建关系的 CSV 文件,可以被归类为数据质量较低。在这种情况下,您可能希望将输出定向到可以处理大型日志文件的存放位置。

如果您在类似 UNIX 的系统上运行,并且对输出不感兴趣,则可以通过将报告文件定向到/dev/null完全消除输出。

如果您需要调试导入,收集堆栈跟踪可能会有所帮助。这可以通过使用--verbose选项来完成。

import.report

--schema=<path> [1]

在 5.24 中引入 包含用于在数据导入期间创建索引和约束的 Cypher 命令的文件的路径。

--skip-bad-entries-logging[=true|false]

设置为true时,错误条目的详细信息不会写入日志。当数据包含大量错误时,禁用日志记录可以提高性能。强烈建议在导入之前清理数据,因为错误会严重影响工具的性能,即使没有日志记录也是如此。

false

--skip-bad-relationships[=true|false]

是否跳过导入引用丢失节点 ID 的关系,即开始或结束节点 ID/组引用未由节点输入数据指定的节点。

跳过的关系将被记录,最多包含由--bad-tolerance指定的实体数量,除非由--skip-bad-entries-logging选项另行指定。

false

--skip-duplicate-nodes[=true|false]

是否跳过导入具有相同 ID/组的节点。

如果同一组中的多个节点具有相同的 ID,则将导入第一个遇到的节点,而后续此类节点将被跳过。

跳过的节点将被记录,最多包含由--bad-tolerance指定的实体数量,除非由--skip-bad-entries-logging选项另行指定。

false

--stage=all|prepare|build|merge

增量导入的阶段。

对于增量导入到现有数据库中,请使用 `all`(这需要数据库停止)。

对于半在线增量导入,请运行 `prepare`(在已停止的数据库上)然后运行 `build`(在可能正在运行的数据库上),最后运行 `merge`(在已停止的数据库上)。

all

--strict[=true|false]

在 5.6 中引入 是否需要严格检查从关系中引用的节点的查找。如果禁用,大多数但并非所有引用不存在的节点的关系都将被检测到。如果启用,所有这些关系都将被找到,但代价是降低性能。

false 在 5.8 中更改

--threads=<num>

(高级)导入程序使用的最大工作线程数量。默认值为 JVM 报告的可用处理器数量。需要一定数量的最小线程,因此此值的最小值没有下限。为了获得最佳性能,此值不应大于可用处理器的数量。

20

--trim-strings[=true|false]

是否应该修剪字符串的空格。

false

--verbose

启用详细输出。

1. 此版本提供 --schema 选项,但尚未支持。将在未来版本中实现。

同时使用多值选项和位置参数

当同时使用多值选项(例如 `--nodes` 和 `--relationships`)和位置参数(例如,在 `--additional-config neo4j.properties --nodes 0-nodes.csv mydatabase` 中)时,`--nodes` 选项会“贪婪地”使用,而下一个选项(在本例中为 `mydatabase`)将通过节点转换器拉取。

这是底层库 Picocli 的限制,并非 Neo4j Admin 特有。有关更多信息,请参见 Picocli → 可变元数选项和位置参数 官方文档。

要解决此问题,请使用以下解决方案之一

  • 将位置参数放在首位。例如,`mydatabase --nodes 0-nodes.csv`。

  • 将位置参数放在末尾,在 `--` 和最后一个多值选项的最终值之后。例如,`nodes 0-nodes.csv -- mydatabase`。

示例

有两种方法可以增量导入数据。

单命令增量导入

如果停机时间不是问题,可以使用 --stage=all 选项运行单个命令。此选项需要停止数据库。

neo4j@system> STOP DATABASE db1 WAIT;
...
bin/neo4j-admin database import incremental --stage=all --nodes=N1=../../raw-data/incremental-import/b.csv db1

分阶段增量导入

如果无法承受数据库完全停机,则可以分三个阶段运行导入操作。

  1. prepare 阶段

    在此阶段,导入工具会分析 CSV 标题并将其相关数据复制到新的增量数据库路径。导入命令使用 --stage=prepare 选项运行,并且必须停止数据库。

    1. 使用 system 数据库,使用 WAIT 选项停止数据库 db1,以确保在运行增量导入命令之前发生检查点。必须停止数据库才能运行 --stage=prepare

      STOP DATABASE db1 WAIT
    2. 使用 --stage=prepare 选项运行增量导入命令

      bin/neo4j-admin database import incremental --stage=prepare --nodes=N1=../../raw-data/incremental-import/c.csv db1
  2. build 阶段

    在此阶段,导入工具会在新的增量数据库路径中导入数据、对其进行重复数据删除并验证数据。这是最长的阶段,您可以将数据库置于只读模式,以允许读取访问。导入命令使用 --stage=build 选项运行。

    1. 将数据库置于只读模式

      ALTER DATABASE db1 SET ACCESS READ ONLY
    2. 使用 --stage=build 选项运行增量导入命令

      bin/neo4j-admin database import incremental --stage=build --nodes=N1=../../raw-data/incremental-import/c.csv db1
  3. merge 阶段

    在此阶段,导入工具会将新数据与数据库中现有的数据合并。它还会更新受影响的索引,并维护受影响的属性唯一性约束和属性存在约束。导入命令使用 --stage=merge 选项运行,并且必须停止数据库。使用 --stage=merge 时,无需包含 --nodes--relationships 选项。

    1. 使用 system 数据库,使用 WAIT 选项停止数据库 db1,以确保在运行增量导入命令之前发生检查点。

      STOP DATABASE db1 WAIT
    2. 使用 --stage=merge 选项运行增量导入命令

      bin/neo4j-admin database import incremental --stage=merge db1

CSV 标题格式

每个数据源的标题文件指定了如何解释数据字段。标题文件和数据文件必须使用相同的定界符。

标题包含每个字段的信息,格式为 <name>:<field_type><name> 用于属性和节点 ID。在所有其他情况下,字段的 <name> 部分将被忽略。

增量导入

使用 增量导入 时,必须为构成主键或唯一可识别的节点的属性键和标签组合设置节点属性唯一性约束。例如,导入具有 Person 标签的节点,这些节点通过 uuid 属性键唯一标识,则标题的格式应为 uuid:ID{label:Person}

这在处理多个组时也是如此。例如,您可以使用 uuid:ID(Person){label:Person},其中关系 CSV 数据可以像完全导入方法一样引用其 :START_ID:END_ID 的不同组。

节点文件

包含节点数据的文件可以具有 ID 字段、LABEL 字段和属性。

ID

如果要通过导入中创建的任何关系连接节点,则每个节点必须具有唯一的 ID。Neo4j 使用 ID 在创建关系时查找正确的节点。请注意,ID 必须在组中的所有节点之间是唯一的,无论其标签如何。唯一 ID 会保存在一个属性中,该属性的名称由字段定义 <name>:ID<name> 部分定义。如果未定义此类属性 name,则唯一 ID 将用于导入,但以后无法引用。如果未指定 ID,则节点将被导入,但在导入期间不会与其他节点连接。当提供属性 name 时,可以全局配置该属性类型(如 属性数据类型),方法是使用 --id-type 选项。
从 Neo4j 5.1 开始,可以使用标题中的 id-type 选项指定在组中为节点属性存储的不同值 ID 类型,例如:id:ID(MyGroup){label:MyLabel, id-type: int}。此 ID 类型将覆盖全局 --id-type 选项。例如,全局 id-type 可以是字符串,但节点的 ID 将以 int 类型存储在其 ID 属性中。有关更多信息,请参阅 在组中存储 ID 的不同值类型
从 Neo4j 5.3 开始,节点标题还可以包含多个 ID 列,其中关系数据引用所有这些列的组合值。这也意味着使用 string 作为 id-type。对于每个 ID 列,您可以指定将它的值存储为不同的节点属性。但是,组合值不能存储为节点属性。有关更多信息,请参阅 使用多个节点 ID

LABEL

从该字段读取一个或多个标签。与数组值一样,多个标签由 ; 分隔,或由 --array-delimiter 指定的字符分隔。在 5.25 中引入 块格式标签名的最大长度为 16,383 个字符。

示例 1. 定义节点文件

您在 movies_header.csv 文件中定义了电影的标题。电影具有 movieIdyeartitle 属性。您还指定了用于标签的字段。

movieId:ID,title,year:int,:LABEL

您在 movies.csv 文件中定义了三部电影。它们包含标题文件中定义的所有属性。所有电影都被赋予了 Movie 标签。其中两部还被赋予了 Sequel 标签。

tt0133093,"The Matrix",1999,Movie
tt0234215,"The Matrix Reloaded",2003,Movie;Sequel
tt0242653,"The Matrix Revolutions",2003,Movie;Sequel

类似地,您还定义了 actors_header.csvactors.csv 文件中的三名演员。他们都具有 personIdname 属性,以及 Actor 标签。

personId:ID,name,:LABEL
keanu,"Keanu Reeves",Actor
laurence,"Laurence Fishburne",Actor
carrieanne,"Carrie-Anne Moss",Actor

关系文件

包含关系数据的文件具有三个必填字段,也可以具有属性。必填字段是

TYPE

要用于此关系的关系类型。在 5.25 中引入 块格式关系类型名的最大长度为 16,383 个字符。

START_ID

此关系的起始节点的 ID。

END_ID

此关系的结束节点的 ID。

START_IDEND_ID 指的是在前面部分说明的某个节点数据源中定义的唯一节点 ID。它们都不带名称,例如,如果定义了 <name>:START_ID<name>:END_ID,则 <name> 部分将被忽略。它们也不带 <field_type>,例如,如果定义了 :START_ID:int:END_ID:int,则 :int 部分在类型信息上下文中没有任何意义。

示例 2. 定义关系文件

在此示例中,假设使用前面示例中的两个节点文件以及以下关系文件。

您在 roles_header.csvroles.csv 文件中定义了演员与电影之间的关系。每行都使用关系类型的 ACTED_IN 关系连接一个起始节点和一个结束节点。请注意,您是如何使用节点文件中的唯一标识符 personIdmovieId 的。演员在电影中扮演的角色名称存储在关系上的 role 属性中。

:START_ID,role,:END_ID,:TYPE
keanu,"Neo",tt0133093,ACTED_IN
keanu,"Neo",tt0234215,ACTED_IN
keanu,"Neo",tt0242653,ACTED_IN
laurence,"Morpheus",tt0133093,ACTED_IN
laurence,"Morpheus",tt0234215,ACTED_IN
laurence,"Morpheus",tt0242653,ACTED_IN
carrieanne,"Trinity",tt0133093,ACTED_IN
carrieanne,"Trinity",tt0234215,ACTED_IN
carrieanne,"Trinity",tt0242653,ACTED_IN

属性数据类型

对于属性,字段的 <name> 部分指定了属性键,而 <field_type> 部分指定了数据类型。节点数据文件和关系数据文件都可以具有属性。在 5.25 中引入 块格式属性键的最大长度为 16,383 个字符。

使用 intlongfloatdoublebooleanbyteshortcharstringpointdatelocaltimetimelocaldatetimedatetimeduration 之一来指定属性的数据类型。默认情况下,类型(数组除外)将转换为 Cypher 类型。请参阅 Cypher 手册 → 属性、结构化和构造值

可以使用 --normalize-types=false 选项禁用此行为。规范化类型可能需要更多磁盘空间,但可以避免 Cypher 在查询期间转换类型。如果没有给出数据类型,则默认为 string

要定义数组类型,请在类型后面追加 []。默认情况下,数组值由 ; 分隔。可以使用 --array-delimiter 指定不同的定界符。数组不受 --normalize-types 标志影响。例如,如果要将字节数组存储为 Cypher 长整型数组,则必须显式将属性声明为 long[]

布尔值如果与文本 true 完全匹配,则为 true。所有其他值都为 false。包含定界符字符的值需要用双引号括起来转义,或者使用 --delimiter 选项使用不同的定界符字符。

示例 3. 具有数据类型的标题格式

此示例说明了在 CSV 标题中指定的几种不同的数据类型。

:ID,name,joined:date,active:boolean,points:int
user01,Joe Soap,2017-05-05,true,10
user02,Jane Doe,2017-08-21,true,15
user03,Moe Know,2018-02-17,false,7
point 数据类型的特殊注意事项

点使用 Cypher 语法指定地图。地图允许与 Cypher 手册 → 点函数 的输入相同的键。标题中的点数据类型可以使用用于该列所有值的默认值映射进行修饰,例如 point{crs: 'WGS-84'}。以这种方式指定标题允许您在数据文件的值位置处拥有不完整的地图。可选地,数据文件中的值可以覆盖来自标题的默认值。

示例 4. point 数据类型的属性格式

此示例说明了在导入标题和数据文件中使用 point 数据类型的各种方法。

您将导入城市的名称和位置坐标。首先,您定义标题为

:ID,name,location:point{crs:WGS-84}

然后,您在数据文件中定义城市。

  • 第一个城市的地理位置使用 latitudelongitude 定义,如使用标题中定义的坐标系时所预期的那样。

  • 第二个城市使用 xy。这通常会导致使用坐标系 cartesian 的点。由于标题定义了 crs:WGS-84,因此将使用该坐标系。

  • 第三个城市覆盖了标题中定义的坐标系,并将其显式设置为 WGS-84-3D

:ID,name,location:point{crs:WGS-84}
city01,"Malmö","{latitude:55.6121514, longitude:12.9950357}"
city02,"London","{y:51.507222, x:-0.1275}"
city03,"San Mateo","{latitude:37.554167, longitude:-122.313056, height: 100, crs:'WGS-84-3D'}"

请注意,所有点地图都包含在双引号 " 中,以防止包含的 , 字符被解释为列分隔符。另一种方法是使用 --delimiter='\t' 并使用制表符分隔符重新格式化文件,在这种情况下," 字符不是必需的。

:ID name    location:point{crs:WGS-84}
city01  Malmö   {latitude:55.6121514, longitude:12.9950357}
city02  London  {y:51.507222, x:-0.1275}
city03  San Mateo   {latitude:37.554167, longitude:-122.313056, height: 100, crs:'WGS-84-3D'}
时间数据类型的特殊注意事项

所有时间数据类型的格式必须按照 Cypher 手册 → 时间点语法Cypher 手册 → 时长语法 中的描述定义。两种时间类型,TimeDateTime,接受一个时区参数,该参数可能在数据文件中的所有或许多值之间是通用的。因此,可以在标头中为 TimeDateTime 值指定一个默认时区,例如:time{timezone:+02:00} 和:datetime{timezone:Europe/Stockholm}。如果没有指定默认时区,则默认时区由 db.temporal.timezone 配置设置确定。可以在数据文件中的值中显式覆盖默认时区。

示例 5. 时间数据类型的属性格式

此示例说明了在导入标头和数据文件中使用 datetime 数据类型的各种方法。

首先,您使用两个 DateTime 列定义标头。第一个定义了一个时区,但第二个没有

:ID,date1:datetime{timezone:Europe/Stockholm},date2:datetime

然后您在数据文件中定义日期。

  • 第一行有两个值,没有指定显式时区。date1 的值将使用在标头中为该字段指定的 Europe/Stockholm 时区。date2 的值将使用数据库配置的默认时区。

  • 在第二行中,date1date2 都将时区明确设置为 Europe/Berlin。这会覆盖 date1 的标头定义,以及数据库配置的默认时区。

1,2018-05-10T10:30,2018-05-10T12:30
2,2018-05-10T10:30[Europe/Berlin],2018-05-10T12:30[Europe/Berlin]

使用 ID 空间

默认情况下,导入工具假设节点标识符在所有节点文件中都是唯一的。在许多情况下,ID 仅在每个实体文件中是唯一的,例如,当您的 CSV 文件包含从关系数据库中提取的数据,并且 ID 字段从相应表的主键列中提取时。要处理这种情况,您需要定义ID 空间。ID 空间在节点文件的 ID 字段中使用语法 ID(<ID 空间标识符>) 定义。要在关系文件中引用 ID 空间的 ID,请使用语法 START_ID(<ID 空间标识符>)END_ID(<ID 空间标识符>)

示例 6. 定义和使用 ID 空间

movies_header.csv 文件中定义一个 Movie-ID ID 空间。

movieId:ID(Movie-ID),title,year:int,:LABEL
1,"The Matrix",1999,Movie
2,"The Matrix Reloaded",2003,Movie;Sequel
3,"The Matrix Revolutions",2003,Movie;Sequel

actors_header.csv 文件的标头中定义一个 Actor-ID ID 空间。

personId:ID(Actor-ID),name,:LABEL
1,"Keanu Reeves",Actor
2,"Laurence Fishburne",Actor
3,"Carrie-Anne Moss",Actor

现在在将演员连接到电影时使用之前定义的 ID 空间。

:START_ID(Actor-ID),role,:END_ID(Movie-ID),:TYPE
1,"Neo",1,ACTED_IN
1,"Neo",2,ACTED_IN
1,"Neo",3,ACTED_IN
2,"Morpheus",1,ACTED_IN
2,"Morpheus",2,ACTED_IN
2,"Morpheus",3,ACTED_IN
3,"Trinity",1,ACTED_IN
3,"Trinity",2,ACTED_IN
3,"Trinity",3,ACTED_IN

使用多个节点 ID

从 Neo4j 5.3 开始,节点标头也可以包含多个 ID 列,其中关系数据引用所有这些列的组合值。这也意味着使用 string 作为 id-type

对于每个 ID 列,您可以指定将其值存储为不同的节点属性。但是,组合值不能存储为节点属性。

增量导入不支持使用多个节点标识符。此功能仅在完整导入中可用。

示例 7. 定义作为节点属性的多个 ID

您可以在节点标头中定义多个 ID 列。例如,您可以定义一个具有两个 ID 列的节点标头。

nodes_header.csv
:ID,:ID,name
nodes.csv
aa,11,John
bb,22,Paul

现在在定义关系时使用两个 ID

relationships_header.csv
:START_ID,:TYPE,:END_ID
relationships.csv
aa11,WORKS_WITH,bb22
示例 8. 定义存储在 ID 空间中的多个 ID

nodes_header.csv 文件中定义一个 MyGroup ID 空间。

nodes_header.csv
personId:ID(MyGroup),memberId:ID(MyGroup),name
nodes.csv
aa,11,John
bb,22,Paul

现在在将 John 连接到 Paul 时使用定义的 ID 空间,并在关系中使用两个 ID。

relationships_header.csv
:START_ID(MyGroup),:TYPE,:END_ID(MyGroup)
relationships.csv
aa11,WORKS_WITH,bb22

在组中存储不同值类型的 ID

从 Neo4j 5.1 开始,您可以通过在标头中定义 id-type 选项来控制要存储的节点属性的 ID 类型,例如 :ID{id-type:long}。标头中的 id-type 选项会覆盖提供给命令的全局 --id-type 值。这样,您可以为不同组的节点设置不同类型的属性值。例如,全局 id-type 可以是字符串,但某些节点可以在其 ID 属性中将它们的 ID 存储为 long 类型。

示例 9. 导入具有不同 ID 值类型的节点
persons_header.csv
id:ID(GroupOne){id-type:long},name,:LABEL
persons.csv
123,P1,Person
456,P2,Person
games_header.csv
id:ID(GroupTwo),name,:LABEL
games.csv
ABC,G1,Game
DEF,G2,Game
导入节点
neo4j_home$ --nodes persons.csv --nodes games.csv --id-type string

persons 组中节点的 id 属性将存储为 long 类型,而 games 组中节点的 id 属性将存储为 string 类型,因为全局 id-type 是字符串。

跳过列

忽略

如果数据中存在您希望完全忽略的字段,可以使用标头文件中的 IGNORE 关键字来实现。IGNORE 必须以 : 开头。

示例 10. 跳过一列

在此示例中,您对节点文件第三列中的数据不感兴趣,并希望跳过它。请注意,IGNORE 关键字以 : 开头。

personId:ID,name,:IGNORE,:LABEL
keanu,"Keanu Reeves","male",Actor
laurence,"Laurence Fishburne","male",Actor
carrieanne,"Carrie-Anne Moss","female",Actor

如果所有多余的数据都位于您希望导入的所有列右侧的列中,则可以使用命令行选项 --ignore-extra-columns

导入压缩文件

导入工具可以处理使用 zipgzip 压缩的文件。每个压缩文件必须包含单个文件。

示例 11. 使用压缩文件执行导入
neo4j_home$ ls import
actors-header.csv  actors.csv.zip  movies-header.csv  movies.csv.gz  roles-header.csv  roles.csv.gz
bin/neo4j-admin database import --nodes import/movies-header.csv,import/movies.csv.gz --nodes import/actors-header.csv,import/actors.csv.zip --relationships import/roles-header.csv,import/roles.csv.gz

恢复已停止或取消的导入

在完成之前停止或失败的导入可以从更接近其停止位置的地方恢复。可以从以下位置恢复导入

  • 链接关系

  • 后处理