View a markdown version of this page

Ejemplos de consultas mediante CSV - Amazon Neptune

Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.

Ejemplos de consultas mediante CSV

En este ejemplo, la consulta devuelve el número de filas de un archivo CSV determinado:

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

Puede ejecutar el ejemplo de consulta mediante la execute-open-cypher-query operación de AWS CLI ejecutando el siguiente código:

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 consulta puede ser flexible en cuanto a lo que hace con las filas leídas de un archivo CSV. Por ejemplo, la siguiente consulta crea un nodo con un campo configurado con datos de un archivo CSV:

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

No se considera una buena práctica utilizar una cláusula extensa que produzca resultados, como MATCH (n), antes de una cláusula CALL. Esto llevaría a una consulta de larga duración debido a la combinación de productos entre las soluciones entrantes de cláusulas anteriores y las filas leídas por neptune.read. Se recomienda iniciar la consulta con CALL neptune.read.

Encabezados de columnas de propiedades

Para especificar una columna (:) para una propiedad, use la sintaxis siguiente. Los nombres de tipos no distinguen entre mayúsculas y minúsculas. Si aparecen dos puntos dentro del nombre de una propiedad, deben estar separados por una barra invertida:. \:

propertyname:type
nota
  • No se permiten espacios, comas, retornos de carro ni caracteres de nueva línea en los encabezados de las columnas, por lo que los nombres de las propiedades no pueden incluir estos caracteres.

  • Para especificar una columna para un tipo de matriz, añada [] al tipo:

    propertyname:type[]
  • Las propiedades de borde solo pueden tener un único valor y provocarán un error si se especifica un tipo de matriz o si se especifica un segundo valor. El siguiente ejemplo muestra el encabezado de columna de una propiedad denominada age de tipo Int:

    age:Int

Cada fila del archivo debe tener un entero en esa posición o bien dejarse en blanco. Se permiten matrices de cadenas, pero las cadenas de una matriz no pueden incluir el carácter de punto y coma (;) a menos que se escape mediante una barra invertida (). \;

Tipos de columnas CSV compatibles

  • BOOL (o BOOLEAN): valores permitidos: verdadero, falso. Indica un campo booleano. Cualquier valor que no sea verdadero se considerará falso.

  • FLOAT: rango: punto flotante IEEE 754 de 32 bits que incluye Infinity, INF, -Infinity, -INF y NaN (). not-a-number

  • DOBLE: rango: punto flotante IEEE 754 de 64 bits que incluye Infinity, INF, -Infinity, -INF y NaN ()not-a-number.

  • CADENA -

    • El uso de las comillas es opcional. Las comas, los caracteres de línea nueva y los caracteres de retorno se escapan automáticamente si se incluyen en una cadena entre comillas dobles («). Ejemplo: «Hola, mundo».

    • Para incluir comillas en una cadena entre comillas, puede evitar las comillas utilizando dos en fila: por ejemplo: «Hola «" Mundo "».

    • Se permiten matrices de cadenas, pero las cadenas de una matriz no pueden incluir el carácter de punto y coma (;) a menos que se escape mediante una barra invertida (\;).

    • Si desea rodear las cadenas de una matriz con comillas, debe rodear toda la matriz con un conjunto de comillas. Ejemplo: «Cadena uno; Cadena 2; Cadena 3".

  • FECHA, FECHA Y HORA: los valores de fecha y hora se pueden proporcionar en formato XSD o en uno de los siguientes formatos:

    • aaaa-MM-dd

    • aaaa-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

    • aaaa-mm-ddthh:mm:ss.sss [+|-] hhmm

  • ENTERO CON SIGNO -

    • Byte: de -128 a 127

    • Corto: -32768 a 32767

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

    • Largo: de -2^63 a 2^63-1

Tipos de columnas específicos de Neptuno:

  • Las columnas de usuario admiten un tipo de columna Any. Un tipo Any es un tipo de «azúcar sintáctico» para todos los demás tipos que admitimos. Es extremadamente útil si una columna de usuario tiene varios tipos. La carga útil de un valor de cualquier tipo es una lista de cadenas json de la siguiente manera:{"value": "10", "type": "Int"};{"value": "1.0", "type": "Float"}, que tiene un campo de valor y un campo de tipo en cada cadena json individual. El encabezado de columna de un tipo Any es propertyName:Any. El valor de cardinalidad de una columna Any está establecido, lo que significa que la columna puede aceptar varios valores.

    • Neptune admite los siguientes tipos en cualquier tipo: Bool (o booleano), Byte, Short, Int, Long,,,, Float, UnsignedByte Double UnsignedShort, Date UnsignedInt UnsignedLong, DateTime, String y Geometry.

    • El tipo vectorial no es compatible con Any Type.

    • No se admite ningún tipo anidado. Por ejemplo, {"value": {"value": "10", "type": "Int"}, "type": "Any"}.

  • Las columnas de usuario admiten un tipo de columna geométrica. La carga útil de estas columnas solo debe contener primitivas geométricas de tipo Point, proporcionadas como cadenas en formato de texto conocido (WKT). Por ejemplo, POINT (30 10) sería un valor geométrico válido.

Ejemplo de salida CSV

Dado el siguiente archivo 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

En este ejemplo, se muestra el resultado devuelto por neptune.read mediante la siguiente consulta:

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 } }] }

Actualmente, no hay forma de establecer una etiqueta de nodo o borde para un campo de datos procedente de un archivo CSV. Se recomienda dividir las consultas en varias consultas, una para cada etiqueta o 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)