[英]Neo4j LOAD CSV with Custom IDs
我正在使用Neo4j 2.2.3,並嘗試使用Cypher的LOAD CSV導入CSV文件,如下所示:
PRODUCT_ID,PRODUCT_DESC,PRODUCT_TYPE
99,"A","X"
999,"B","X"
9999,"C","Y"
99999,"D","Y"
但是,我在使用自定義ID時遇到了困難。 Neo4j不導入它們。
PRODUCT_ID
列是來自不同系統(我無法控制)的唯一ID,但可以說,它不是行號。 需要PRODUCT_ID
才能匹配其他文件中的數據。
當我查看文件時,會看到所有字段:
LOAD CSV WITH HEADERS FROM 'file:///path/to/product.csv' AS row
RETURN row
當我選擇除 PRODUCT_ID
之外的任何列時,情況也是如此:
LOAD CSV WITH HEADERS FROM 'file:///path/to/product.csv' AS row
RETURN row.PRODUCT_DESC
當我改用RETURN row.PRODUCT_ID
,會得到一個空表。
同樣,這不起作用:
LOAD CSV WITH HEADERS FROM 'file:///path/to/product.csv' AS row
CREATE (p:Product { id: toInt(row.PRODUCT_ID),
name: row.PRODUCT_DESC,
type: row.PRODUCT_TYPE })
我得到了具有說明和類型的產品,但是ID丟失了。 我需要ID才能將此CSV文件與其他文件進行匹配,但是我遇到了麻煩,希望對您有所幫助。 在文檔中,我沒有看到有關ID列的任何限制。
當我將PRODUCT_ID
列從第一個位置移開時,它警告了第一個列將被忽略。 因此,如果我將PRODUCT_ID
作為最后一列,則PRODUCT_DESC
為空。 是否需要將行號作為CSV的第一列? 似乎很奇怪。
有什么建議么?
可能是這個問題嗎?
http://www.markhneedham.com/blog/2014/10/18/neo4j-load-csv-the-sneaky-null-character/
基本上,他的CSV中有NULL
字符,這導致數據讀取不正確。
不知道這里是什么問題。 我將數據復制到junk.txt文件,並且能夠順利導入。
LOAD CSV WITH HEADERS FROM 'file://junk.txt' as csvLine FIELDTERMINATOR ',' return csvLine;
注意:也沒有FIELDTERMINATOR。
最初的問題詢問產品ID。
LOAD CSV WITH HEADERS FROM 'file://junk.txt' as csvLine FIELDTERMINATOR ',' return csvLine.PRODUCT_ID;
可能是文件開頭的兩個字節的字節順序標記(BOM)。
如果您刪除了它(在文本中不可見),它應該可以工作。
我不太確定問題出在哪里,但是我有一些建議可以嘗試。 您可以在字段名稱周圍加上反引號,如下所示:
LOAD CSV WITH HEADERS FROM 'file:///path/to/product.csv' AS row
CREATE (p:Product { id: toInt(row.`PRODUCT_ID`),
name: row.`PRODUCT_DESC`,
type: row.`PRODUCT_TYPE` })
您也可以嘗試在標頭周圍加上如下引號:
"PRODUCT_ID","PRODUCT_DESC","PRODUCT_TYPE"
當然,您可以刪除標題並按索引進行操作,盡管有點la腳。 一種使它更好的方法是:
LOAD CSV FROM 'file:///path/to/product.csv' AS row
WITH
toInt(row[0]) AS product_id,
row[1] AS product_desc,
row[2] AS product_type
CREATE // etc...
那么,到底有什么用? 我從Linux系統中獲取文件,嘗試在Windows中導入它們並正確修改了行尾,但這是行不通的。 相反,我不得不將文件另存為ANSI,而不是UTF-8。 如果有人能告訴我重要的事情,我將不勝感激,因為該文檔明確指出文件應為UTF-8而不是ANSI,甚至在Windows上也是如此。 無論如何,現在可以使用了。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.