簡體   English   中英

將 CSV 加載到 Azure 上的 Neo4j

[英]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的值來指向一個可訪問的目錄

請參閱https://neo4j.com/docs/operations-manual/current/reference/configuration-settings/#config_dbms.directories.import

該解決方案沒有在一個地方得到很好的記錄。 但這是通過反復試驗演變而來的,並且有效。

  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}

我希望這有助於其他人應對這種情況!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM