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 che utilizzano il parquet
La seguente query di esempio restituisce il numero di righe in un determinato file Parquet:
CALL neptune.read( { source: "<s3 path>", format: "parquet" } ) 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: 'parquet'}) 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 Parquet. Ad esempio, la seguente query crea un nodo con un campo impostato sui dati trovati nel file Parquet:
CALL neptune.read( { source: "<s3 path>", format: "parquet" } ) YIELD row CREATE (n {someField: row.someCol}) RETURN n
avvertimento
Non è considerata buona prassi utilizzare una clausola di grandi dimensioni che produca risultati come quella MATCH(n) precedente a una clausola. CALL Ciò comporterebbe una query di lunga durata, dovuta al prodotto incrociato tra le soluzioni in entrata delle clausole precedenti e le righe lette da neptune.read. Si consiglia di avviare la query con neptune.read. CALL
Tipi di colonne Parquet supportati
Tipi di dati Parquet:
NULL
BOOLEAN
FLOAT
DOUBLE
STRING
NUMERO INTERO CON SEGNO: UINT8, UINT16, UINT32 UINT64
MAP: supporta solo un livello. Non supporta nidificato.
LIST: supporta solo un livello. Non supporta nidificato.
Tipi di dati specifici per Neptune:
A differenza delle intestazioni delle colonne delle proprietà del formato CSV, le intestazioni delle colonne delle proprietà del formato Parquet devono avere solo i nomi delle proprietà, quindi non è necessario avere i nomi dei tipi né la cardinalità.
Esistono tuttavia alcuni tipi di colonna speciali nel formato Parquet che richiedono l'annotazione nei metadati, tra cui il tipo Any, il tipo Date, il tipo DateTime e il tipo Geometry. L'oggetto seguente è un esempio dell'annotazione dei metadati richiesta per i file contenenti colonne di questi tipi speciali:
"metadata": { "anyTypeColumns": ["UserCol1"], "dateTypeColumns": ["UserCol2"], "dateTimeTypeColumns": ["UserCol3"], "geometryTypeColumns": ["UserCol4"] }
Di seguito sono riportati i dettagli sul payload previsto associato a questi tipi:
Nelle colonne utente è supportato un tipo di colonna Any. 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. 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"}.
Le colonne di tipo Date e DateTime sono supportate nelle colonne utente. Il payload di queste colonne deve essere fornito come stringhe secondo il formato XSD o uno dei formati seguenti:
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
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 del parquet
Dato un file Parquet come questo:
<s3 path> Parquet Type: int8 int16 int32 int64 float double string +--------+---------+-------------+----------------------+------------+------------+----------+ | Byte | Short | Int | Long | Float | Double | 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 | +--------+---------+-------------+----------------------+------------+------------+----------+
Ecco un esempio dell'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: 'parquet'}) YIELD row RETURN row" \ --endpoint-url https://my-cluster-name.cluster-abcdefgh1234.us-east-1.neptune.amazonaws.com:8182
{ "results": [{ "row": { "Float": 1.23456, "Byte": -128, "Int": -2147483648, "Long": -9223372036854775808, "String": "first", "Short": -32768, "Double": 1.2345678899999999 } }, { "row": { "Float": "NaN", "Byte": 127, "Int": 2147483647, "Long": 9223372036854775807, "String": "second", "Short": 32767, "Double": "NaN" } }, { "row": { "Float": "-INF", "Byte": 0, "Int": 0, "Long": 0, "String": "third", "Short": 0, "Double": "-INF" } }, { "row": { "Float": "INF", "Byte": 0, "Int": 0, "Long": 0, "String": "fourth", "Short": 0, "Double": "INF" } }] }
Attualmente, non è possibile impostare un'etichetta di nodo o di spigolo su un campo di dati proveniente da un file Parquet. Si consiglia di suddividere le interrogazioni in più interrogazioni, una per ogni etichetta/tipo.
CALL neptune.read({source: '<s3 path>', format: 'parquet'}) YIELD row WHERE row.`~label` = 'airport' CREATE (n:airport) CALL neptune.read({source: '<s3 path>', format: 'parquet'}) YIELD row WHERE row.`~label` = 'country' CREATE (n:country)