Skip to content

Import multi-label vertices using neo4jImporter does not work properly #1340

@LeonardoMarrancone

Description

@LeonardoMarrancone

ArcadeDB Version:

23.10.1

OS and JDK Version:

macOs Ventura Version 13.3.1, java 17.0.2 2022-01-18 LTS

Description

  • Use case:

    • import a dataset with multi-label nodes (e.g :Place:City, :Place:Country) from Neo4j using the arcadedb neo4j importer (jsonl/graphml)
    • be able to query from gremlin/cypher using both Place and its subtypes (e.g g.V().hasLabel(‘Place’) - should retrieve all the Places, Cities and Countries, g.V().hasLabel(‘City’) - should retrieve all the Cities)
  • From the documentation

    • import from multi-label sources using the neo4j importer should create underscore-joined labels (e.g City_Place) that use inheritance
    • vertices with multiple labels work using SQL inheritance and can be then retrieved in gremlin/cypher using the parent label as described here (No support for Multi-label nodes #384)
  • Expected behavior

    • the neo4j importer should be able to import multi-label sources coming from Neo4j as the documentation states and then the vertices should be retrieved as expected by the gremlin/cypher queries
  • Actual behavior

    • the import fail using the commands and jsonl file mentioned in the Steps to reproduce section
    • the import using the graphml file completes but the vertices have vertex as label (@type) and the actual labels are stored as string concatenation in a property (labels = “:Place:City”)

Steps to reproduce

json example line:
{“type”:“node”,“id”:“0",“labels”:[“Place”,“City”],“properties”:{“name”:“Test”}}
if from terminal we execute:

  • docker exec -it arcadedb /bin/sh -c “rm -f /home/arcadedb/databases/graph/database.lck; ./bin/console.sh connect graph”
  • import database file:///home/arcadedb/data/import/all.json
    returns an error:
ERROR:
com.arcadedb.exception.CommandExecutionException: Error on importing database
	at com.arcadedb.query.sql.parser.ImportDatabaseStatement.executeSimple(ImportDatabaseStatement.java:69)
	at com.arcadedb.query.sql.executor.SingleOpExecutionPlan.executeInternal(SingleOpExecutionPlan.java:91)
	at com.arcadedb.query.sql.parser.SimpleExecStatement.execute(SimpleExecStatement.java:52)
	at com.arcadedb.query.sql.parser.Statement.execute(Statement.java:65)
	at com.arcadedb.query.sql.SQLQueryEngine.command(SQLQueryEngine.java:110)
	at com.arcadedb.database.EmbeddedDatabase.command(EmbeddedDatabase.java:1313)
	at com.arcadedb.console.Console.executeSQL(Console.java:591)
	at com.arcadedb.console.Console.execute(Console.java:267)
	at com.arcadedb.console.Console.parse(Console.java:731)
	at com.arcadedb.console.Console.interactiveMode(Console.java:129)
	at com.arcadedb.console.Console.execute(Console.java:179)
	at com.arcadedb.console.Console.main(Console.java:142)
Caused by: com.arcadedb.integration.importer.ImportException: Error on parsing source ‘file:///home/arcadedb/data/import/all.json (compressed=false size=37710174)’
	at com.arcadedb.integration.importer.Importer.load(Importer.java:63)
	at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
	at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	at java.base/java.lang.reflect.Method.invoke(Method.java:566)
	at com.arcadedb.query.sql.parser.ImportDatabaseStatement.executeSimple(ImportDatabaseStatement.java:61)
	... 11 more
Caused by: java.lang.IllegalStateException: stream has already been operated upon or closed
	at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:229)
	at java.base/java.util.stream.ReferencePipeline.collect(ReferencePipeline.java:578)
	at com.arcadedb.integration.importer.Neo4jImporter.typeNameFromLabels(Neo4jImporter.java:562)
	at com.arcadedb.integration.importer.Neo4jImporter.lambda$syncSchema$1(Neo4jImporter.java:198)
	at com.arcadedb.integration.importer.Neo4jImporter.executeCallback(Neo4jImporter.java:533)
	at com.arcadedb.integration.importer.Neo4jImporter.readFile(Neo4jImporter.java:482)
	at com.arcadedb.integration.importer.Neo4jImporter.syncSchema(Neo4jImporter.java:195)
	at com.arcadedb.integration.importer.Neo4jImporter.run(Neo4jImporter.java:141)
	at com.arcadedb.integration.importer.format.Neo4jImporterFormat.load(Neo4jImporterFormat.java:47)
	at com.arcadedb.integration.importer.Importer.loadFromSource(Importer.java:95)
	at com.arcadedb.integration.importer.Importer.load(Importer.java:54)
	... 16 more

Further tests using version 22.6.1 (referenced in the issue_384 above)

  • the import fail using the mentioned commands and jsonl file
  • the import using the graphml file completes but the vertices have vertex as label (@type) and the actual labels are stored as string concatenation in a property (labels = “:Place:City”)

Metadata

Metadata

Assignees

Labels

No labels
No labels

Type

No type

Projects

No projects

Milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions