是否可以使用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
任何帮助或例子都将不胜感激。
非常感谢。
4条答案
按热度按时间brccelvz1#
你可以在S3上生成一个有时间限制的签名URL,而且你不需要公开文件。
请看此处的示例
https://advancedweb.hu/2018/10/30/s3_signed_urls/
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]
hgncfbus3#
此外,您还可以使用
s3fs
等工具将存储桶Map为本地文件系统,这样您就可以直接读取文件。只需要访问IAM。9vw9lbht4#
关于@dz902注解-这不是docker容器中的选项,因为如果您尝试使用
s3fs
将/var/lib/neo4j/import
Map到您的S3存储桶上,它将失败这是因为容器中的
neo4j
使用不同的用户(new 4j,uid,gid=7474)操作和创建它的文件夹。有一个选项可以选择如何使用另一个用户运行neo4j,但在neo4j的情况下,您仍然不能使用根来实现此目的。有关该here的更多详细信息
如果有人有一些解决方案或想法来实现这一点(我的意思是将
/var/lib/neo4j/import
文件夹Map到S3桶)-请给我您的想法