从单个或多个RDF文件中获取数据,导入至嬴图数据库的图集中。
1. 生成配置文件模板
在命令行工具中执行以下命令。
./ultipa-importer --sample
命令执行后,会在ultipa-importer.exe
所在目录下生成import.sample.rdf.yml
文件。如果目录下已有import.sample.rdf.yml
文件,数据将被覆盖。
2. 修改配置文件
配置文件由三部分组成,请按需修改。
# 支持的源数据类型:csv/json/jsonl/rdf/bigQuery/sql/kafka/neo4j/salesforce;每次导入仅可指定一种类型
# 支持的SQL数据库:PostgreSQL/MySQL/SQLServer/Snowflake/Oracle
mode: rdf
# rdf模式下,配置rdf信息
rdf:
# rdf文件名
file: "./test_data/account.ttl"
# rdf文件格式,支持"ntriples","turtle"和"rdfxml"
format: "turtle"
# 配置嬴图服务器
server:
# 主机地址或URI: 端口
host: "192.168.1.xx:60061"
# 用户名
username: "root"
# 密码
password: "root"
# 目标图集
graphset: "graphName"
shards: "1,2,3"
# 分区算法:Crc32/CityHash64...
partitionBy: "Crc32"
# Crt文件路径
crt: ""
# 其他配置
settings:
# 日志文件输出路径
logPath: "./logs"
# 每批次插入的点或边的数量
batchSize: 10000
# 导入模式:overwrite,insert或upsert
importMode: upsert
# 插入边时,是否创建不存在的点
createNodeIfNotExist: false
# 执行报错时,是否停止进程
stopWhenError: false
# 最大线程数(建议使用32)
threads: 32
# RPC最大消息传输量(单位:MB,默认值:40MB)
maxPacketSize: 40
# 时区或时区偏差(格式:+/-HHMM,如+0800)
# 默认时区:“+0800”
# 时间戳单位,支持毫秒(ms)或秒(s),默认为:“s”
timestampUnit: "s"
配置RDF
字段 | 类型 | 描述 |
---|---|---|
file |
String | 待导入的RDF文件路径。可一次指定多个文件 |
format |
String | 支持的文件格式包括ntriples ,turtle 和rdfxml ,分别对应文件扩展名.ntl ,.ttl 和.xml 。RDF文件扩展名需与RDF格式保持一致,否则会在解析过程中报错 |
使用以下方式指定多个文件:
- file: "./test_data/file1.ttl"
format: "turtle"
- file: "./test_data/file2.ntl"
format: "ntriples"
配置嬴图服务器
字段 |
类型 |
描述 |
---|---|---|
host |
String | 源数据库的IP地址或URL地址;同一集群只需填写一个服务器节点信息 |
username |
String | 数据库用户名 |
password |
String | 登录密码 |
graphset |
String | 目标图集名称。若指定图集不存在,将自动创建该图集 |
shards |
String | 指定数据处理分片 |
partitionBy |
String | 指定分区算法,如Crc32 ,CityHash64 等 |
crt |
String | 用于TLS加密的CRT文件路径 |
其他配置
字段 |
类型 |
Default |
描述 |
---|---|---|---|
logPath |
String | "./logs" | 日志文件输出路径 |
batchSize |
Integer | 10000 | 每批次插入的点或边的数量 |
importMode |
String | upsert | 指定数据插入模式,包括overwrite ,insert 和upsert 。更新点或边时,可使用upsert 模式,避免覆盖已有数据 |
createNodeIfNotExist |
Bool | false | 如果为true,插入边时会自动创建不存在的点 |
stopWhenError |
Bool | false | 如果为true,执行报错时会停止进程 |
threads |
Integer | 32 | 最大线程数,建议使用32 |
maxPacketSize |
Integer | 40 | RPC最大消息传输量(单位:MB) |
timestampUnit |
String | s | 时间戳单位,支持ms (毫秒)或s (秒) |
3. 执行导入
RDF数据导入基于-config
参数指定的配置文件执行。执行后,数据会导入至目标服务器,并以嬴图的图结构形式展示。
./ultipa-importer --config import.sample.rdf.yml
4. 嬴图数据映射规则及导入示例
嬴图数据映射规则
- 主语映射为点。
- 谓词映射为:
- 点的属性名(此时宾语为文本类型
literal
); - 边(此时宾语为其他三元组的主语)。
- 点的属性名(此时宾语为文本类型
- 若宾语不在其他三元组当主语,则映射为属性值。
- 点schema根据主语前缀设定,并遵循以下规则:
- 若主语为空,将其视为空节点,并插入至“default”schema;
- 若主语无前缀,则从
ns0
开始命名schema,后续名称依次递增,如ns1
,ns2
……
- 边schema根据谓词前缀设定。
- 若schema名称少于2字符,系统会自动复制字符,生成新的名称(如:schema名称a会被复制为aa)。
导入示例
本例导入了.ttl
格式的RDF文件。
@prefix ultipaVoc: <http://ultipa.com/vocab/sw#> .
@prefix ultipaInd: <http://ultipa.com/ind#> .
@prefix xsd: <http://www.w3.org/2001/XMLSchema#> .
@prefix ex: <http://example.org/> .
ultipaInd:pythonSDK ultipaVoc:name "SDK" ;
a ultipaVoc:UltipaTool ;
ultipaVoc:version "4.3.0.1" ;
ultipaVoc:releaseDate "2023-03-06" ;
ultipaVoc:runsOn ultipaInd:UltipaGraph432 .
ultipaInd:transporter233 ultipaVoc:name "Transporter" ;
a ultipaVoc:UltipaTool ;
ultipaVoc:version "4.3.1" ;
ultipaVoc:releaseDate "2023-07-20" ;
ultipaVoc:runsOn ultipaInd:UltipaGraph432 .
ultipaInd:manager3028 ultipaVoc:name "UltipaManager" ;
a ultipaVoc:UltipaTool ;
ultipaVoc:version "4.3.0.2" ;
ultipaVoc:releaseDate "2023-05-29" ;
ultipaVoc:runsOn ultipaInd:UltipaGraph432 .
ultipaInd:UltipaGraph432 ultipaVoc:name "UltipaGraph" ;
a ultipaVoc:GraphPlatform , ultipaVoc:InspiringPlatform ;
ultipaVoc:version "4.3.2" .
# 常规点
ex:subject1 ex:predicate1 "normal string literal" .
ex:subject2 ex:predicate2 "another string literal" .
# 空白点
_:blankNode1 ex:predicate3 "string literal for blank node" .
ex:subject3 ex:predicate4 _:blankNode2 .
# 文本
ex:subject4 ex:predicate5 "365"^^xsd:integer .
ex:subject5 ex:predicate6 "true"^^xsd:boolean .
ex:subject6 ex:predicate7 "3.14"^^xsd:float .
ex:subject7 ex:predicate8 "2024-08-21T00:00:00Z"^^xsd:dateTime .