Esempi di query utilizzando CSV - Amazon Neptune

Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.

Esempi di query utilizzando CSV

In questo esempio, la query restituisce il numero di righe in un determinato file CSV:

CALL neptune.read( { source: "<s3 path>", format: "csv" } ) YIELD row RETURN count(row)

È possibile eseguire l'esempio di query utilizzando l' execute-open-cypher-queryoperazione in AWS CLI eseguendo il codice seguente:

aws neptunedata execute-open-cypher-query \ --open-cypher-query "CALL neptune.read({source: '<s3 path>', format: 'csv'}) YIELD row RETURN count(row)" \ --endpoint-url https://my-cluster-name.cluster-abcdefgh1234.us-east-1.neptune.amazonaws.com:8182

Una query può essere flessibile nelle operazioni eseguite con le righe lette da un file CSV. Ad esempio, la seguente query crea un nodo con un campo impostato sui dati di un file CSV:

CALL neptune.read( { source: "<s3 path>", format: "csv" } ) YIELD row CREATE (n {someField: row.someCol}) RETURN n
avvertimento

Non è considerata buona prassi utilizzare una clausola di grandi dimensioni che produca risultati come MATCH (n) prima di una clausola CALL. Ciò comporterebbe una query di lunga durata a causa del prodotto incrociato tra le soluzioni in entrata delle clausole precedenti e le righe lette da neptune.read. Si consiglia di avviare la query con CALL neptune.read.

Intestazioni di colonna di proprietà

È possibile specificare una colonna (:) per una proprietà utilizzando la sintassi seguente. Per i nomi dei tipi non viene fatta distinzione tra maiuscole e minuscole. Se all'interno del nome di una proprietà sono presenti due punti, è necessario evitarlo facendola precedere da una barra rovesciata:. \:

propertyname:type
Nota
  • Lo spazio, la virgola, i caratteri di ritorno e di nuova riga non sono consentiti nelle intestazioni delle colonne, quindi i nomi delle proprietà non possono includere questi caratteri.

  • È possibile specificare una colonna per un tipo di matrice aggiungendo [] al tipo:

    propertyname:type[]
  • Le proprietà edge possono avere solo un singolo valore e verrà generato un errore se viene specificato un tipo di array o un secondo valore. L'esempio seguente mostra l'intestazione di colonna per una proprietà denominata age di tipo Int:

    age:Int

Ogni riga del file dovrà avere un valore intero in quella posizione o essere lasciata vuota. Le matrici di stringhe sono consentite, ma le stringhe di un array non possono includere il carattere punto e virgola (;) a meno che non venga eliminato utilizzando una barra rovesciata (). \;

Tipi di colonne CSV supportati

  • BOOL (o BOOLEAN) - Valori consentiti: true, false. Indica un campo Booleano. Qualsiasi valore diverso da true verrà considerato falso.

  • FLOAT - Intervallo: virgola mobile IEEE 754 a 32 bit, inclusi Infinity, INF, -Infinity, -INF e NaN (). not-a-number

  • DOUBLE - Intervallo: virgola mobile IEEE 754 a 64 bit, inclusi Infinity, INF, -Infinity, -INF e NaN (). not-a-number

  • STRINGA -

    • Le virgolette sono facoltative. I caratteri restituiti da virgole, newline e carriage vengono automaticamente eliminati se sono inclusi in una stringa racchiusa tra virgolette doppie («). Esempio: «Hello, World».

    • Per includere le virgolette in una stringa tra virgolette, puoi evitare le virgolette usandone due di seguito: Esempio: «Hello «" World" "».

    • Le matrici di stringhe sono consentite, ma le stringhe di una matrice non possono includere il carattere punto e virgola (;) a meno che non venga eliminato utilizzando una barra rovesciata (\;).

    • Se desideri racchiudere le stringhe in una matrice con le virgolette, devi racchiudere l'intera matrice con una serie di virgolette. Esempio: «String one; String 2; String 3".

  • DATE, DATETIME - I valori datetime possono essere forniti nel formato XSD o in uno dei seguenti formati:

    • yyyy-MM-dd

    • YYYY-MM-DTHH:mm

    • aaaa-mm-ggh: mm: ss

    • aaaa-mm-ggH:mm:ssz

    • aaaa-mm-ggH:mm:ss.ssz

    • aaaa-MM-GGTHH:mm:ss [+|-] hhmm

    • YYYY-MM-GGTHH:mm:ss.sss [+|-] hhmm

  • NUMERO INTERO CON SEGNO -

    • Byte: da -128 a 127

    • Breve: da -32768 a 32767

    • Int: da -2^31 a 2^31-1

    • Lungo: da -2^63 a 2^63-1

Tipi di colonne specifici per Nettuno:

  • Un tipo di colonna Any è supportato nelle colonne utente. Un tipo Any è un tipo «zucchero sintattico» per tutti gli altri tipi che supportiamo. È estremamente utile se una colonna utente contiene più tipi. Il payload di un valore Any type è un elenco di stringhe json come segue:{"value": "10", "type": "Int"};{"value": "1.0", "type": "Float"}, che ha un campo di valore e un campo di tipo in ogni singola stringa json. L'intestazione di colonna di un tipo Any è PropertyName:Any. Il valore di cardinalità di una colonna Any è impostato, il che significa che la colonna può accettare più valori.

    • Neptune supporta i seguenti tipi in qualsiasi tipo: Bool (o Boolean), Byte, Short, Int, Long,,,, Float, Double, Date UnsignedByte UnsignedShort UnsignedInt, UnsignedLong DateTime, String e Geometry.

    • Il tipo vettoriale non è supportato in nessun tipo.

    • Nidato Qualsiasi tipo non è supportato. Ad esempio, {"value": {"value": "10", "type": "Int"}, "type": "Any"}.

  • Nelle colonne utente è supportato un tipo di colonna Geometry. Il payload di queste colonne deve contenere solo primitive Geometry di tipo Point, fornite come stringhe nel formato Wekonful text (WKT). Ad esempio, POINT (30 10) sarebbe un valore Geometry valido.

Esempio di output CSV

Dato il seguente file CSV:

<s3 path> colA:byte,colB:short,colC:int,colD:long,colE:float,colF:double,colG:string -128,-32768,-2147483648,-9223372036854775808,1.23456,1.23457,first 127,32767,2147483647,9223372036854775807,nan,nan,second 0,0,0,0,-inf,-inf,third 0,0,0,0,inf,inf,fourth

Questo esempio mostra l'output restituito da neptune.read utilizzando la seguente query:

aws neptunedata execute-open-cypher-query \ --open-cypher-query "CALL neptune.read({source: '<s3 path>', format: 'csv'}) YIELD row RETURN row" \ --endpoint-url https://my-cluster-name.cluster-abcdefgh1234.us-east-1.neptune.amazonaws.com:8182
{ "results": [{ "row": { "colD": -9223372036854775808, "colC": -2147483648, "colE": 1.23456, "colB": -32768, "colF": 1.2345699999999999, "colG": "first", "colA": -128 } }, { "row": { "colD": 9223372036854775807, "colC": 2147483647, "colE": "NaN", "colB": 32767, "colF": "NaN", "colG": "second", "colA": 127 } }, { "row": { "colD": 0, "colC": 0, "colE": "-INF", "colB": 0, "colF": "-INF", "colG": "third", "colA": 0 } }, { "row": { "colD": 0, "colC": 0, "colE": "INF", "colB": 0, "colF": "INF", "colG": "fourth", "colA": 0 } }] }

Attualmente, non è possibile impostare un'etichetta di nodo o di bordo su un campo di dati proveniente da un file CSV. Si consiglia di suddividere le interrogazioni in più interrogazioni, una per ogni etichetta/tipo.

CALL neptune.read({source: '<s3 path>', format: 'csv'}) YIELD row WHERE row.`~label` = 'airport' CREATE (n:airport) CALL neptune.read({source: '<s3 path>', format: 'csv'}) YIELD row WHERE row.`~label` = 'country' CREATE (n:country)