导出 Apache Parquet
库要求
Apache Parquet 过程依赖于 APOC 扩展库中未包含的客户端库。
这些依赖项包含在 apoc-hadoop-dependencies-5.21.0-all.jar 中,可以从 发行页面 下载。
下载该文件后,应将其放置在 plugins
目录中,然后重新启动 Neo4j 服务器。
可用过程
下表描述了可用过程
名称 | 描述 |
---|---|
apoc.export.parquet.all |
将整个数据库导出为 Parquet 字节数组 |
apoc.export.parquet.data |
将给定的节点和关系导出为 Parquet 字节数组 |
apoc.export.parquet.graph |
将给定的图导出为 Parquet 字节数组 |
apoc.export.parquet.query |
将给定的 Cypher 查询导出为 Parquet 字节数组 |
apoc.export.parquet.all.stream |
将整个数据库导出为 Parquet 文件 |
apoc.export.parquet.data.stream |
将给定的节点和关系导出为 Parquet 文件 |
apoc.export.parquet.graph.stream |
将给定的图导出为 Parquet 文件 |
apoc.export.parquet.query.stream |
将给定的 Cypher 查询导出为 Parquet 文件 |
我们可以使用这些过程之一导入或加载导出的结果。 |
配置参数
这些过程支持以下配置参数
名称 | 类型 | 默认值 | 描述 |
---|---|---|---|
batchSize |
长整型 |
20000 |
每 n 个结果更新一次 parquet 文件/字节数组 |
映射 |
Map |
20000 |
映射复杂文件。请参阅以下的“映射配置”部分 |
用法
本节中的示例基于以下示例图
CREATE (TheMatrix:Movie {title:'The Matrix', released:1999, tagline:'Welcome to the Real World'})
CREATE (Keanu:Person {name:'Keanu Reeves', born:1964})
CREATE (Carrie:Person {name:'Carrie-Anne Moss', born:1967})
CREATE (Laurence:Person {name:'Laurence Fishburne', born:1961})
CREATE (Hugo:Person {name:'Hugo Weaving', born:1960})
CREATE (LillyW:Person {name:'Lilly Wachowski', born:1967})
CREATE (LanaW:Person {name:'Lana Wachowski', born:1965})
CREATE (JoelS:Person {name:'Joel Silver', born:1952})
CREATE
(Keanu)-[:ACTED_IN {roles:['Neo']}]->(TheMatrix),
(Carrie)-[:ACTED_IN {roles:['Trinity']}]->(TheMatrix),
(Laurence)-[:ACTED_IN {roles:['Morpheus']}]->(TheMatrix),
(Hugo)-[:ACTED_IN {roles:['Agent Smith']}]->(TheMatrix),
(LillyW)-[:DIRECTED]->(TheMatrix),
(LanaW)-[:DIRECTED]->(TheMatrix),
(JoelS)-[:PRODUCED]->(TheMatrix);
test.parquet
中CALL apoc.export.parquet.all('test.parquet')
文件 | 源 | 格式 | 节点 | 关系 | 属性 | 时间 | 行 | batchSize | 批次 | 数据 |
---|---|---|---|---|---|---|---|---|---|---|
"file:///test.parquet" |
"graph: nodes(8), rels(7)" |
"parquet" |
8 |
7 |
0 |
0 |
0 |
20000 |
0 |
null |
以下过程将指定图导出到 Parquet 文件 testData.parquet
中
MATCH (n:Person)-[r]->()
WITH collect(n) as nodes, collect(r) as rels
call apoc.export.parquet.data(nodes, rels, 'testData.parquet')
YIELD file RETURN file
文件 |
---|
"file:///testData.parquet" |
以下过程将指定节点和关系导出到 Parquet 文件中
CALL apoc.graph.fromDB('neo4j',{}) YIELD graph
CALL apoc.export.parquet.graph(graph, 'testGraph.parquet')
YIELD file RETURN file
文件 |
---|
"file:///testGraph.parquet" |
以下过程将指定查询结果导出到 Parquet 文件中
CALL apoc.export.parquet.query("MATCH (n:Person) RETURN n", 'testQuery.parquet')
文件 | 源 | 格式 | 节点 | 关系 | 属性 | 时间 | 行 | batchSize | 批次 | 数据 |
---|---|---|---|---|---|---|---|---|---|---|
"file:///testQuery.parquet" |
"statement: cols(1)" |
"parquet" |
8 |
7 |
0 |
0 |
0 |
20000 |
0 |
null |
我们还可以使用 apoc.export.parquet.<type>.stream
过程直接将 Parquet 字节数组导出为结果,例如
CALL apoc.export.parquet.all.stream
值 |
---|
<byte_array_parquet_file> |