为了账号安全,请及时绑定邮箱和手机立即绑定

将 CSV 加载到 Azure 上的 Neo4j 中

将 CSV 加载到 Azure 上的 Neo4j 中

牧羊人nacy 2022-08-16 18:26:10
我在Azure上有Neo4j操作。我可以使用python和一系列create语句加载数据:create (n:Person) return n我可以使用python成功查询。使用 LOAD CSV 需要在 Neo4j 导入目录中有一个文件。我已经找到了该目录,但是将文件移动到其中被阻止。我还尝试将文件放在可访问的目录中,但随后无法弄清楚如何在LOAD CSV语句中解决路径。此 LOAD 会给出一个错误,因为文件无法进入 Neo4j 导入目录:USING PERIODIC COMMIT 10000 LOAD CSV WITH HEADERS FROM 'file:///FTDNATree.csv' AS line FIELDTERMINATOR '|' merge (s:SNPNode{SNP:toString(line.Parent)})此语句找不到该文件,并给出错误:找不到 EXTERNAL 文件USING PERIODIC COMMIT 10000 LOAD CSV WITH HEADERS FROM 'file:///{my directory path/}FTDNATree.csv' AS line FIELDTERMINATOR '|' merge (s:SNPNode{SNP:toString(line.Parent)})尽管 python 和 neo4j 位于同一资源组中,但它们是不同的 VM。问题似乎是两个VM之间的互操作性?
查看完整描述

2 回答

?
杨__羊羊

TA贡献1943条经验 获得超7个赞

如果您有权访问 neo4j.conf,则可以修改 的值以指向可访问的目录dbms.directories.import

查看 https://neo4j.com/docs/operations-manual/current/reference/configuration-settings/#config_dbms.directories.import


查看完整回答
反对 回复 2022-08-16
?
开心每一天1111

TA贡献1836条经验 获得超13个赞

该解决方案在一个地方没有得到很好的记录。但这是通过反复试验和错误演变而来的,并且有效。

  1. 我在资源中创建了一个存储帐户

  2. 创建了一个可从放置上载文件的代码访问的目录。

  3. 添加了容器,称为 neo4j-import

  4. 然后,我可以将文件作为blob(即*.csv文件)传输到容器

  5. 然后,您需要使该文件可访问。这涉及创建一个 sas 令牌并将其附加到指向容器和文件的 URL(请参阅下面的 python 代码来执行此操作)。

  6. 您可以在本地浏览器中测试此 URL。它应该检索文件,如果没有 sas 令牌,则无法访问该文件

  7. 此 URL 在 LOAD CSV 语句中使用,并成功加载 Neo4j 数据库

步骤 4 的代码;请原谅粘贴到此处时缩进问题。

         from azure.storage.blob import BlobServiceClient, BlobClient, 

    ContainerClient, generate_account_sas, ResourceTypes, AccountSasPermissions


    def UploadFileToDataStorage(FileName,

    UploadFileSourceDirecory=ImportDirectory,BlobConnStr=AzureBlobConnectionString,

Container="neo4j-import"):

           #uploads file as blob to data storage

           #https://docs.microsoft.com/en-us/azure/storage/blobs/storage-quickstart-blobs-python  #upload-blobs-to-a-container

           blob_service_client = BlobServiceClient.from_connection_string(BlobConnStr)

           blob_client = blob_service_client.get_blob_client(container=Container, blob=FileName)

           with open(UploadFileSourceDirecory + FileName, "rb") as data:

               blob_client.upload_blob(data)

关键的 python 代码(上面的步骤 5)。


    def GetBlobURLwithSAS(FileName,Container="neo4j-import"):

    #https://pypi.org/project/azure-storage-blob/

    #https://docs.microsoft.com/en-us/python/api/azure-storage-blob/azure.storage.blob.blobserviceclient?view=azure-python

    #generates sas token for object blob so it can be consumed by another process

    sas_token = generate_account_sas(

    account_name="{storage account  name}",

    account_key="{storage acct key}",

    resource_types=ResourceTypes(service=False, container=False, object=True),

    permission=AccountSasPermissions(read=True),

    expiry=datetime.utcnow() + timedelta(hours=1))

    return "https://{storage account name}.blob.core.windows.net/" + Container + "/" + FileName + "?" + sas_token

LOAD 语句如下所示,并且不使用 file:/// 前缀:


LOAD CSV WITH HEADERS FROM '" + {URL from above} + "' AS line FIELDTERMINATOR '|'{your cypher query for loading csv}

我希望这有助于其他人浏览这种情况!


查看完整回答
反对 回复 2022-08-16
  • 2 回答
  • 0 关注
  • 149 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号