将 CSV 加载到 Azure 上的 Neo4j 中

我在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之间的互操作性?


牧羊人nacy
浏览 150回答 2
2回答

杨__羊羊

如果您有权访问 neo4j.conf,则可以修改 的值以指向可访问的目录dbms.directories.import查看 https://neo4j.com/docs/operations-manual/current/reference/configuration-settings/#config_dbms.directories.import

开心每一天1111

该解决方案在一个地方没有得到很好的记录。但这是通过反复试验和错误演变而来的,并且有效。我在资源中创建了一个存储帐户创建了一个可从放置上载文件的代码访问的目录。添加了容器,称为 neo4j-import然后,我可以将文件作为blob(即*.csv文件)传输到容器然后,您需要使该文件可访问。这涉及创建一个 sas 令牌并将其附加到指向容器和文件的 URL(请参阅下面的 python 代码来执行此操作)。您可以在本地浏览器中测试此 URL。它应该检索文件,如果没有 sas 令牌,则无法访问该文件此 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_tokenLOAD 语句如下所示,并且不使用 file:/// 前缀:LOAD CSV WITH HEADERS FROM '" + {URL from above} + "' AS line FIELDTERMINATOR '|'{your cypher query for loading csv}我希望这有助于其他人浏览这种情况!
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python