RedisGraph批量导入工具
项目描述
redisgraph-bulk-loader
一个Python工具,用于从CSV输入构建RedisGraph数据库
需求
批量加载工具需要Python 3解释器。
必须运行带有RedisGraph模块的Redis服务器。安装说明可在此找到: https://oss.redis.com/redisgraph/
安装
可以使用pip安装批量加载器
pip install redisgraph-bulk-loader
或
pip install git+https://github.com/RedisGraph/redisgraph-bulk-loader.git@master
使用方法
pip安装将redisgraph-bulk-insert作为可调用的命令暴露出来
redisgraph-bulk-insert GRAPHNAME [OPTIONS]
通过克隆仓库进行安装允许通过Python调用脚本,如下所示
python3 redisgraph_bulk_loader/bulk_insert.py GRAPHNAME [OPTIONS]
标志 | 扩展标志 | 参数 |
---|---|---|
-u | --redis-url TEXT | Redis网址(默认:redis://127.0.0.1:6379) |
-n | --nodes TEXT | 节点CSV文件的路径,文件名作为节点标签 |
-N | --nodes-with-label TEXT | 节点标签后跟节点CSV文件的路径 |
-r | --relations TEXT | 关系CSV文件的路径,文件名作为关系类型 |
-R | --relations-with-type TEXT | 关系类型后跟关系CSV文件的路径 |
-o | --separator CHAR | CSV文件中的字段分隔符(默认:逗号) |
-d | --enforce-schema | 要求每个单元格都遵守CSV标题中定义的模式 |
-j | --id-type TEXT | 唯一节点ID属性的 数据类型(STRING或INTEGER) |
-s | --skip-invalid-nodes | 跳过使用之前定义过的ID的节点,而不是出错退出 |
-e | --skip-invalid-edges | 跳过使用无效ID作为端点的边,而不是出错退出 |
-q | --quote INT | CSV文件中使用的引号格式。QUOTE_MINIMAL=0,QUOTE_ALL=1,QUOTE_NONNUMERIC=2,QUOTE_NONE=3 |
-t | --max-token-count INT | (调试参数) 每个Redis查询中发送的最大标记数(默认1024) |
-b | --max-buffer-size INT | (调试参数) 每个Redis查询的最大批大小(MBs)(默认64) |
-c | --max-token-size INT | (调试参数) 每个发送到Redis的标记的最大大小(MBs)(默认64) |
-i | --index 标签:属性 | 在批量导入后,在提供的标签:属性对上创建索引(可选) |
-f | --full-text-index 标签:属性 | 在批量导入后,在提供的标签:属性对上创建全文索引(可选) |
唯一必需的参数是新创建的图的名称(可以在任何地方出现)以及至少一个节点CSV文件。节点和关系标志应每个输入文件指定一次。
redisgraph-bulk-insert GRAPH_DEMO -n example/Person.csv -n example/Country.csv -r example/KNOWS.csv -r example/VISITED.csv
标签(对于节点)或关系类型(对于关系)来自输入CSV文件的基准名称。在这个例子中,我们将构建两组节点,分别标记为Person
和Country
,以及两种类型的关系 - KNOWS
和VISITED
。
RedisGraph不对属性施加模式,因此同一个属性键可以有不同的类型值,例如字符串和整数。因此,批量加载器的默认行为是独立地为每个字段的每个值推断类型。例如,当预期属性始终具有字符串值时,有一个可以转换为整数或双精度的字段时,这可能导致意外的行为。为了避免这种情况,请使用--enforce-schema
标志并按输入模式中所述更新CSV标题。
扩展参数说明
max-token-count
、max-buffer-size
和max-token-size
的标志通常不是必需的。只有在图创建的内存开销过高或Redis调用量过高时才应指定它们。批量加载器通过将二进制标记(每个标记包含多个节点或关系)批量发送到Redis来构建大型图。
--quote
保留用于向后兼容,并允许在默认模式下对Python的类型推断进行一些控制。--enforce-schema-type
更受青睐。
--enforce-schema-type
表示输入CSV标题将遵循输入模式中所述的形式。
--nodes-with-label
和--relations-with-type
允许显式写出节点标签或关系类型,而不是从文件名中推断它们。例如,--relations-with-type HAS_TAG post_hasTag_tag.csv
将添加由指定的CSV文件描述的所有类型为HAS_TAG
的关系。要指定多个标签,请使用':'分隔。例如,--nodes-with-label Actor:Director actors.csv
将添加由指定的CSV文件描述的所有带有标签Actor
和Director
的节点。
输入约束
节点标识符
- 如果正在创建节点和关系,则每个节点都必须与一个唯一标识符相关联。
- 如果不使用
--enforce-schema
,则标识符是每个标签CSV文件的第一列。如果此列的名称以下划线(_
)开头,则标识符是批量加载器操作内的内部标识符,不会出现在结果图中。否则,它被视为节点属性。 - 每个标识符必须在所有标签文件中完全唯一。可以使用ID命名空间来编写更细粒度的标识符。
- 在关系CSV文件中,源节点和目标节点应该通过其标识符来引用。
- 如果只创建节点,则取消唯一性限制。
实体属性
- 不需要显式提供属性类型。
- 属性不需要仅由任何一种类型组成。
- 批量加载器目前支持以下类型
bool
:可以是true
或false
(不区分大小写,不使用引号进行插值)。integer
:一个未引用的值,可以被读取为整数类型。double
:一个未引用的值,可以被读取为浮点数类型。string
:任何既可以通过引号插值或不能被转换为数值或布尔类型的字段。array
:由方括号插值的任何类型元素的数组。数组中的字符串必须显式进行引号插值。数组属性需要使用非逗号分隔符进行CSV(-o
)。
- Cypher不允许将NULL值分配给属性。
- 默认行为是推断属性类型,尝试将其转换为整数、浮点数、布尔值或字符串,顺序如下。
- 如果不需要类型推断,应使用
--enforce-schema
标志和输入模式。
标签文件格式
关系文件
- 每一行必须有相同数量的字段。
- 忽略前导和尾随空白。
- 如果不使用输入模式,则每一行的前两列是源节点标识符和目标节点标识符。这些字段在标题中的名称无关紧要。
- 如果文件有超过两列,则所有后续列都是遵循与节点属性相同规则的关系属性。
- 描述的关系始终被视为有向的(源节点->目标节点)。
输入CSV示例
Store.csv
storeNum | Location | daysOpen |
118 | 123 Main St | ['Mon', 'Wed', 'Fri']
136 | 55 Elm St | ['Sat', 'Sun']
此CSV将使用以下命令插入:redisgraph-bulk-insert StoreGraph --separator \| --nodes Store.csv
(由于管道字符在终端中具有意义,因此必须使用反斜杠转义。)
所有storeNum
属性都将作为整数插入,Location
将作为字符串插入,而daysOpen
将作为字符串数组插入。
输入模式
如果指定了--enforce-schema
标志,则所有输入CSV都应指定每个列的数据类型在标题中。
此格式取消了默认CSV格式的一些约束,例如ID字段是第一列。
大多数标题字段应为一个冒号分隔的属性名及其数据类型的对,例如Name:STRING
。某些数据类型不需要名称字符串,如下所示。
接受的数据类型如下
类型字符串 | 描述 | 需要名称字符串 |
---|---|---|
ID | 仅标签文件 - 节点的唯一标识符 | 可选 |
START_ID | 仅关系文件 - 此关系的源ID字段 | 无 |
END_ID | 仅关系文件 - 此关系的目标ID字段 | 无 |
忽略 | 此列将不会被添加到图中 | 可选 |
DOUBLE / FLOAT | 有符号64位浮点值 | 是 |
INT / INTEGER / LONG | 有符号64位整数值 | 是 |
BOOL / BOOLEAN | 由字符串'true'或'false'指示的布尔值 | 是 |
STRING | 字符串值 | 是 |
ARRAY | 数组值 | 是 |
如果有一个 ID
列具有名称字符串,该值将作为属性添加到每个节点。默认情况下,该属性将是字符串,但可以使用 --id-type
参数将其更改为整数。如果没有提供名称字符串,ID 是批量加载操作内部的,不会出现在图中。START_ID
和 END_ID
列永远不会作为属性添加。
ID 命名空间
通常,节点标识符需要在所有输入 CSV 中都是唯一的。当使用输入架构时,可以(可选地)创建 ID 命名空间,标识符只需要在其命名空间内是唯一的。当每个输入 CSV 具有与其他重叠的主键时,这特别有用。
要引入命名空间,请在 :ID
类型字符串后面跟一个括号内插的命名空间字符串,例如 :ID(User)
。在关系文件的 :START_ID
或 :END_ID
字段中应指定相同的命名空间,如 :START_ID(User)
。
输入架构 CSV 示例
User.csv
:ID(User), name:STRING, rank:INT
0, "Jeffrey", 5
1, "Filipe", 8
FOLLOWS.csv
:START_ID(User), :END_ID(User), reaction_count:INT
0, 1, 25
1, 0, 10
使用以下命令插入这些 CSV 文件:redisgraph-bulk-insert SocialGraph --enforce-schema --nodes User.csv --relations FOLLOWS.csv
将生成一个名为 SocialGraph 的图,其中包含 2 个用户,Jeffrey 和 Filipe。Jeffrey 关注 Filipe,该关系的 reaction_count 为 25。Filipe 也关注 Jeffrey,reaction_count 为 10。
执行批量更新
Pip 安装还公开了 redisgraph-bulk-update
命令
redisgraph-bulk-update GRAPHNAME [OPTIONS]
通过克隆存储库进行安装允许通过 Python 调用批量更新器
python3 redisgraph_bulk_loader/bulk_update.py GRAPHNAME [OPTIONS]
标志 | 扩展标志 | 参数 |
---|---|---|
-h | --host TEXT | Redis 服务器主机(默认:127.0.0.1) |
-p | --port INTEGER | Redis 服务器端口(默认:6379) |
-a | --password TEXT | Redis 服务器密码(默认:无) |
-u | --unix-socket-path TEXT | Redis Unix 套接字路径(默认:无) |
-q | --query TEXT | 在服务器上运行的查询 |
-v | --variable-name TEXT | 查询中行数组变量的名称(默认:row) |
-c | --csv TEXT | CSV 输入文件的路径 |
-o | --separator TEXT | CSV 文件中的字段令牌分隔符 |
-n | --no-header | 如果设置,则 CSV 文件没有标题 |
-t | --max-token-size INTEGER | 每个令牌的最大大小(以兆字节为单位)(默认 500,最大 512) |
批量更新器允许以批处理方式读取 CSV 文件并将更改提交到 RedisGraph。
例如,给定 输入架构 CSV 示例 中描述的 CSV 文件,批量加载器可以使用以下命令创建相同的节点和关系
redisgraph-bulk-update SocialGraph --csv User.csv --query "MERGE (:User {id: row[0], name: row[1], rank: row[2]})"
redisgraph-bulk-update SocialGraph --csv FOLLOWS.csv --query "MATCH (start {id: row[0]}), (end {id: row[1]}) MERGE (start)-[f:FOLLOWS]->(end) SET f.reaction_count = row[2]"
当使用批量更新器时,在之前对 CSV 输入进行清理至关重要,因为 RedisGraph 将增量地提交更改。因此,格式错误的输入可能会使图处于部分更新状态。
项目详情
下载文件
下载适用于您平台的应用程序。如果您不确定选择哪一个,请了解更多关于安装包的信息。
源代码分发
构建分发
哈希值 for redisgraph_bulk_loader-0.12.3-py3-none-any.whl
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 79b0c46c97a33eb3fca218599c5f85f87aa3e34e3c64d8fbd0311e9891d325b7 |
|
MD5 | d6316892cfcb96c99457aa04697ac438 |
|
BLAKE2b-256 | b3cf9f2a8c068d6d854323940d15e6eaa105004ec51206efa0b313caa03d019f |