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 en AWS CLI 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 à l'utilisation des lignes lues à partir d'un fichier Parquet. Par exemple, la requête suivante crée un nœud dont le champ est défini sur la base des données trouvées dans le 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 volumineuse produisant des résultats comme MATCH(n) avant une CALL clause. Cela entraînerait une requête de longue durée, en raison d'un produit croisé entre les solutions entrantes issues 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 le mode imbriqué.
LISTE : ne prend en charge qu'un seul niveau. Ne prend pas en charge le mode imbriqué.
Types de données spécifiques à Neptune :
Contrairement aux en-têtes de colonne de propriétés au format CSV, les en-têtes de colonne de propriétés du format Parquet doivent uniquement contenir les noms des propriétés, il n'est donc pas nécessaire d'avoir les noms des types ni la cardinalité.
Certains types de colonnes spéciaux au 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 détaillées sur la charge utile attendue associée à ces types :
Un type de colonne Any est pris en charge dans les colonnes utilisateur. Un type quelconque est un « 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 contient 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 tous les types : Bool (ou Boolean), Byte, Short, Int, Long,,,,, Float UnsignedByte UnsignedShort, Double UnsignedInt, Date UnsignedLong, DateTime, String et Geometry.
Le type de vecteur n'est pris en charge dans aucun type.
Nested Tous les types ne sont 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 :
yyyy-MM-dd
YYYY-MM-DDTHH : mm
YYYY-MM-DDTHH : mm : SS
YYYY-MM-DDTHH : MM : SSZ
YYYY-MM-DDTHH:MM:SS.SSSZ
YYYY-MM-DDTHH:mm:SS [+|-] hhmm
YYYY-MM-DDTHH:MM:SSS [+|-] hhmm
Un type de colonne de géométrie 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 WKT (texte connu). Par exemple, POINT (30 10) serait une valeur de géométrie valide.
Exemple de sortie pour 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 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" } }] }
Il n'existe actuellement aucun moyen 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 chaque étiquette/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)