Etiqueta SET com base nos dados no LOAD CSV
Estou usando o Neo4j 2.2.0 e importando dados (na forma de um arquivo de nós e um arquivo de relacionamentos) via LOAD CSV.
Todos os nós serão importados sob o rótulo "Pessoa", no entanto, quero adicionar o rótulo "Geotag" a alguns deles se os campos de latitude e longitude no arquivo de nós estiverem vazios.
Portanto, por exemplo, o arquivo de nós abaixo (ignore a linha extra entre as linhas)
"nome de usuário", "id", "latitude", "longitude"
"abc123", "111111111", "33,223", "33,223"
"abc456", "222222222", "", ""
Gostaria de criar o nó "abc123" com os rótulos Person e Geotag e o nó abc456 apenas com o rótulo Person, porque ele não possui latitude e longitude.
Eu pensei que isso seria algo ao longo das linhas de:
LOAD CSV WITH HEADERS FROM "file:/users.csv" AS line
CREATE (p:Person { username: line.username, id: line.id, latitude: line.latitude, longitude: line.longitude })
SET p: (CASE WHEN line.latitude IS NOT NULL THEN GEOTAGGED);
Sei que estou usando a instrução CASE incorretamente, bem como a instrução SET, mas isso é possível ao importar os nós? Esse arquivo possui mais de 3 milhões de nós e seria útil fazê-lo após a inserção, para que quando novos nós sejam adicionados (geralmente em lotes), não exploremos todos os nós apenas para chegar aos novos.
Eu explorei outras questões SO (Como definir o tipo e o rótulo de relacionamento no LOAD CSV?, Carregando relacionamentos de dados CSV no neo4j db, Neo4j Cypher - criando nós e definindo rótulos com LOAD CSV), no entanto, diferem da minha pergunta, pois esses OPs estão tentando usar um campo no arquivo como rótulo e eu estou simplesmente tentando tomar uma decisão condicional sobre quais rótulos usar com base nos dados do arquivo.
Obrigado!
EDITAR: Em resposta a uma resposta, estou tentando o seguinte:
LOAD CSV WITH HEADERS FROM "file:/users.csv" AS line
CREATE (p:Person { username: line.username, id: line.id, latitude: line.latitude, longitude: line.longitude })
CASE WHEN line.latitude IS NOT NULL THEN [1] ELSE [] END AS geotagged
FOREACH (x IN geotagged | SET p:Geotag);
Estou tendo o erro a seguir:
QueryExecutionKernelException: Invalid input 'A': expected 'r/R' (line 3, column 2 (offset: 454)) "CASE WHEN line.latitude IS NOT NULL THEN [1] ELSE [] END AS geotagged"
Com a cenoura sob o 'A' em "CASO"
EDIT2:
Abaixo está a solução completa, inspirada e apenas ligeiramente diferente da solução de David.
LOAD CSV WITH HEADERS FROM "file:/users.csv" AS line
CREATE (p:Person { username: line.username, id: line.id, latitude: line.latitude, longitude: line.longitude })
WITH p, CASE WHEN line.latitude <> "" THEN [1] ELSE [] END AS geotagged
FOREACH (x IN geotagged | SET p:Geotag);