将CSV从安全的S3吊桶装载到在坞站中运行的Neo4j中

b4lqfgs4  于 2022-10-01  发布在  其他
关注(0)|答案(4)|浏览(140)

是否可以使用Load CSV将数据加载到在码头容器上运行的Neo4j中,其中CSV文件位于安全的S3存储桶中?如果我在本地将文件复制到停靠容器上,它会工作得很好。

我一直收到‘Neo.ClientError.Statement.ExternalResourceFailed’错误。

NEO配置显示:dbms.security.allow_csv_import_from_file_urls=true

我的代码是使用py2neo(3.1.2)的Python(3.6)。

USING PERIODIC COMMIT 5000
LOAD CSV WITH HEADERS FROM 'https://s3-my-region.amazonaws.com/some-secured-
bucket/somefile.csv' AS row FIELDTERMINATOR ','
MERGE (person:Person {id: row.id})
ON CREATE SET person.first_name = row.first_name
, person.last_name = row.last_name
, person.email = row.email
, person.mobile_phone = row.mobile_phone
, person.business_phone = row.business_phone
, person.business_address = row.business_address
ON MATCH SET person.first_name = row.first_name
, person.last_name = row.last_name
, person.email = row.email
, person.mobile_phone = row.mobile_phone
, person.business_phone = row.business_phone
, person.business_address = row.business_address

任何帮助或例子都将不胜感激。

非常感谢。

brccelvz

brccelvz1#

你可以在S3上生成一个有时间限制的签名URL,而且你不需要公开文件。

请看此处的示例

https://advancedweb.hu/2018/10/30/s3_signed_urls/

8xiog9wr

8xiog9wr2#

Neo4j“Load CSV”支持http/HTTPS URL,例如:

将标题从“https://s3-ap-southeast-2.amazonaws.com/myfile/loadcsv/file.csv”加载为行限制为3的返回行的CSV

需要更改以下配置

1.S3文件夹需要向公众开放
1.在neo4j.conf中,设置dbms.security.allow_csv_import_from_file_urls=true
1.在neo4j.conf中,注解掉或删除dbms.directories.import=import
1.确保防火墙没有阻止neo4j端口[7474、7473、7687]

hgncfbus

hgncfbus3#

此外,您还可以使用s3fs等工具将存储桶Map为本地文件系统,这样您就可以直接读取文件。只需要访问IAM。

9vw9lbht

9vw9lbht4#

关于@dz902注解-这不是docker容器中的选项,因为如果您尝试使用s3fs/var/lib/neo4j/importMap到您的S3存储桶上,它将失败

chown: changing ownership of '/var/lib/neo4j/import': Input/output error

这是因为容器中的neo4j使用不同的用户(new 4j,uid,gid=7474)操作和创建它的文件夹。
有一个选项可以选择如何使用另一个用户运行neo4j,但在neo4j的情况下,您仍然不能使用根来实现此目的。有关该here的更多详细信息

如果有人有一些解决方案或想法来实现这一点(我的意思是将/var/lib/neo4j/import文件夹Map到S3桶)-请给我您的想法

相关问题