[英]Loading CSV into Neo4j on Azure
我在 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之間的互操作性?
如果你有權訪問neo4j.conf,那么你可以修改dbms.directories.import
的值來指向一個可訪問的目錄
該解決方案沒有在一個地方得到很好的記錄。 但這是通過反復試驗演變而來的,並且有效。
第 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}
我希望這有助於其他人應對這種情況!
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.