Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.
Exemples de requêtes utilisant du parquet
L'exemple de requête suivant renvoie le nombre de lignes d'un fichier Parquet donné :
CALL neptune.read( { source: "<s3 path>", format: "parquet" } ) YIELD row RETURN count(row)
Vous pouvez exécuter l'exemple de requête à l'aide de l'execute-open-cypher-queryopération décrite dans le AWS CLI en exécutant le code suivant :
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
Une requête peut être flexible quant à son utilisation des lignes lues à partir d'un fichier Parquet. Par exemple, la requête suivante crée un nœud dont un champ est défini sur les données du fichier Parquet :
CALL neptune.read( { source: "<s3 path>", format: "parquet" } ) YIELD row CREATE (n {someField: row.someCol}) RETURN n
Avertissement
Il n'est pas considéré comme une bonne pratique d'utiliser une clause génératrice de résultats de grande taille, comme MATCH(n) avant une CALL clause. Cela conduirait à une requête de longue durée, en raison du produit croisé entre les solutions entrantes des clauses précédentes et les lignes lues par neptune.read. Il est recommandé de démarrer la requête avec CALL neptune.read.
Types de colonnes de parquet pris en charge
Types de données sur le parquet :
NULL
BOOLEAN
FLOAT
DOUBLE
CHAÎNE
ENTIER SIGNÉ : UINT8, UINT16, UINT32, UINT64
MAP : ne prend en charge qu'un seul niveau. Ne prend pas en charge les objets imbriqués.
LISTE : ne prend en charge qu'un seul niveau. Ne prend pas en charge les objets imbriqués.
Neptune-specific types de données :
Contrairement aux en-têtes de colonne de propriétés du format CSV, les en-têtes de colonne de propriétés du format Parquet ne doivent contenir que les noms des propriétés, il n'est donc pas nécessaire d'avoir les noms de type ni la cardinalité.
Certains types de colonnes spéciaux du format Parquet nécessitent toutefois une annotation dans les métadonnées, notamment le type Any, le type Date, le type DateTime et le type Geometry. L'objet suivant est un exemple de l'annotation de métadonnées requise pour les fichiers contenant des colonnes de ces types spéciaux :
"metadata": { "anyTypeColumns": ["UserCol1"], "dateTypeColumns": ["UserCol2"], "dateTimeTypeColumns": ["UserCol3"], "geometryTypeColumns": ["UserCol4"] }
Vous trouverez ci-dessous des informations sur la charge utile attendue associée à ces types :
Un type de colonne Any est pris en charge dans les colonnes utilisateur. Un type Any est un type « sucre syntaxique » pour tous les autres types que nous prenons en charge. C'est extrêmement utile si une colonne utilisateur contient plusieurs types. La charge utile d'une valeur de type Any est une liste de chaînes json comme suit :
{"value": "10", "type": "Int"};{"value": "1.0", "type": "Float"}, qui comporte un champ de valeur et un champ de type dans chaque chaîne json individuelle. La valeur de cardinalité d'une colonne Any est définie, ce qui signifie que la colonne peut accepter plusieurs valeurs.Neptune prend en charge les types suivants dans un type quelconque : Bool (ou booléen), Byte, Short, Int, Long,,, Float UnsignedByte, Double UnsignedShort UnsignedInt, Date UnsignedLong, DateTime, String et Geometry.
Le type vectoriel n'est pas pris en charge dans N'importe quel type.
Le type Nested Any n'est pas pris en charge. Par exemple,
{"value": {"value": "10", "type": "Int"}, "type": "Any"}.
Les colonnes de type Date et Datetime sont prises en charge dans les colonnes utilisateur. La charge utile de ces colonnes doit être fournie sous forme de chaînes suivant le format XSD ou l'un des formats ci-dessous :
aaaa- MM-dd
aaaa- MM-ddTHH:mm
aaaa- MM-ddTHH:mm:ss
aaaa- MM-ddTHH:mm:ssZ
aaaa- MM-ddTHH:mm:ss.SSSZ
aaaa- MM-ddTHH:mm:ss [+|-] hhmm
aaaa- MM-ddTHH:mm:ss.SSS [+|-] hhmm
Un type de colonne Geometry est pris en charge dans les colonnes utilisateur. La charge utile de ces colonnes ne doit contenir que des primitives de géométrie de type Point, fournies sous forme de chaînes au format Well-known texte (WKT). Par exemple, POINT (30 10) serait une valeur de géométrie valide.
Exemple de sortie de parquet
Étant donné un fichier Parquet comme celui-ci :
<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 | +--------+---------+-------------+----------------------+------------+------------+----------+
Voici un exemple de la sortie renvoyée par neptune.read à l'aide de la requête suivante :
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" } }] }
Actuellement, il n'est pas possible de définir une étiquette de nœud ou de bord pour un champ de données provenant d'un fichier Parquet. Il est recommandé de partitionner les requêtes en plusieurs requêtes, une pour chacune label/Type.
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)