如何通过apoc.load.jdbc从Snowflake加载数组类型数据至Neo4j
根因
Snowflake官方JDBC驱动对ARRAY类型字段的默认返回格式是序列化后的JSON字符串,因此apoc.load.jdbc拉取到的字段值为字符串类型,不会自动识别为Neo4j数组。
解决方法
使用APOC提供的JSON解析函数apoc.convert.fromJson,将返回的JSON格式字符串直接解析为Neo4j支持的数组类型。
修改后的Cypher语句如下:
WITH "jdbc:snowflake://xxxx.xxxx.xxxx.com:xxx/?user=xxxxxxxxxxx&password=xxxxxxxxxxx&db=xxxx&warehouse=xxxx&schema=xxxx" as url CALL apoc.load.jdbc(url,"select array_column from TABLE") YIELD row CREATE (c:arraytest) SET c.array_column = apoc.convert.fromJson(row.array_column)
如果你需要保留row里的其他字段,只单独转换数组类型字段,可以这么写:
WITH "jdbc:snowflake://xxxx.xxxx.xxxx.com:xxx/?user=xxxxxxxxxxx&password=xxxxxxxxxxx&db=xxxx&warehouse=xxxx&schema=xxxx" as url CALL apoc.load.jdbc(url,"select * from TABLE") YIELD row // 先赋值所有字段,再单独覆盖转换后的数组字段 CREATE (c:arraytest) SET c = row, c.array_column = apoc.convert.fromJson(row.array_column)
验证
执行后查询节点即可看到array_column已经是数组类型:
(:arraytest {array_column: ["55232d8cac"]})
该方法对Snowflake返回的OBJECT类型、嵌套数组/对象同样生效,只需对对应字段调用
apoc.convert.fromJson即可。
内容的提问来源于stack exchange,提问作者VarYaz
相关产品推荐
相关产品推荐

