我想創建一個海王星數據庫,并將數據轉儲到它。我將歷史數據從 DynamoDB 下載到 S3,這些文件為 csv 格式。這些 csv 中的標題如下:~id, someproperties:String, ~label然后,我需要通過 lambda 實現對這個 neptune db 的實時流式傳輸,在 lambda 函數中,我會檢查一個頂點(或邊)是否存在,如果存在,我將更新頂點(或邊),否則我創建一個新的。在python中,我的實現是這樣的:g.V().hasLabel('Event').has(T.id, event['Id']).fold().coalesce(unfold(), addV('Event').property(T.id, event['Id'])).property(Cardinality.single, 'State', event['State']).property('sourceData', event['sourceData']).next()在這里我有一些問題:在實時流中,我需要查詢是否已經存在帶有id的頂點,所以我需要查詢歷史數據的節點,那么可以 has(T.id, event['Id'])這樣做嗎?還是我應該只使用 has(id, event['Id'])or has("id", event['Id'])?我正在使用g.V().has('Event', T.id, event['Id'])而不是 g.V().hasLabel('Event').has(T.id, event['Id']),但得到了類似的錯誤cannot local NeptuneGraphTraversal.has()。這兩個查詢是一樣的嗎?
1 回答

皈依舞
TA貢獻1851條經驗 獲得超3個贊
這是您對 Gremlin 有疑問的三個部分:
g.V().has(T.id, "some-id")
g.V().has(id, "some-id")
g.V().has("id", "some-id")
前兩個將返回與id成員相同的結果T(作為一種風格,Gremlin 用戶通常靜態導入id,以便為簡潔起見以這種方式引用它)。最后一次遍歷與前兩次不同,因為String它作為一個值引用了一個名為“id”的標準屬性鍵。一般來說,TinkerPop 會建議您不要使用像“id”或“label”這樣的屬性鍵名,因為它可能會導致錯誤和混淆T.
至于你的問題的第二部分圍繞:
g.V().has('Event', T.id, event['Id'])
g.V().hasLabel('Event').has(T.id, event['Id'])
正如 Kelvin 指出的那樣,您不能傳遞T.id到 3 元形式,因為步驟簽名只允許 a在第二個位置。允許那里也沒有意義,因為第一個參數已經說明了它并引用了實際的圖形元素標識符。如果您知道該值,那么您就不會首先指定 ,因為已經唯一標識了元素。你會做的。has()StringTT.labelT.idT.labelT.idg.V(event['Id'])
添加回答
舉報
0/150
提交
取消