Beispiele für Abfragen mit Parquet - Amazon Neptune

Die vorliegende Übersetzung wurde maschinell erstellt. Im Falle eines Konflikts oder eines Widerspruchs zwischen dieser übersetzten Fassung und der englischen Fassung (einschließlich infolge von Verzögerungen bei der Übersetzung) ist die englische Fassung maßgeblich.

Beispiele für Abfragen mit Parquet

Die folgende Beispielabfrage gibt die Anzahl der Zeilen in einer bestimmten Parquet-Datei zurück:

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

Sie können das Abfragebeispiel mithilfe der execute-open-cypher-query Operation in ausführen, AWS CLI indem Sie den folgenden Code ausführen:

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

Eine Abfrage kann flexibel mit Zeilen umgehen, die aus einer Parquet-Datei gelesen werden. Die folgende Abfrage erstellt beispielsweise einen Knoten mit einem Feld, das auf Daten aus der Parquet-Datei festgelegt ist:

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

Es wird nicht als gute Praxis angesehen, eine umfangreiche, ergebnisreiche Klausel wie MATCH(n) vor einer CALL Klausel zu verwenden. Dies würde aufgrund eines Kreuzprodukts zwischen eingehenden Lösungen aus früheren Klauseln und den von neptune.read gelesenen Zeilen zu einer lang andauernden Abfrage führen. Es wird empfohlen, die Abfrage mit neptune.read zu starten. CALL

Unterstützte Parquet-Spaltentypen

Parquet-Datentypen:

  • NULL

  • BOOLEAN

  • FLOAT

  • DOUBLE

  • STRING

  • GANZZAHL MIT VORZEICHEN: UINT8, UINT16, UINT32, UINT64

  • MAP: Unterstützt nur eine Ebene. Unterstützt keine verschachtelten Elemente.

  • LIST: Unterstützt nur eine Ebene. Unterstützt keine verschachtelten Elemente.

Neptun-spezifische Datentypen:

Im Gegensatz zu den Eigenschaftsspaltenüberschriften des CSV-Formats müssen die Eigenschaftsspaltenüberschriften des Parquet-Formats nur die Eigenschaftsnamen enthalten, sodass weder die Typnamen noch die Kardinalität erforderlich sind.

Es gibt jedoch einige spezielle Spaltentypen im Parquet-Format, für die Anmerkungen in den Metadaten erforderlich sind, darunter der Typ Beliebig, der Datentyp, der DateTime-Typ und der Geometrietyp. Das folgende Objekt ist ein Beispiel für die erforderliche Metadaten-Anmerkung für Dateien, die Spalten dieser speziellen Typen enthalten:

"metadata": { "anyTypeColumns": ["UserCol1"], "dateTypeColumns": ["UserCol2"], "dateTimeTypeColumns": ["UserCol3"], "geometryTypeColumns": ["UserCol4"] }

Im Folgenden finden Sie Einzelheiten zur erwarteten Nutzlast im Zusammenhang mit diesen Typen:

  • Der Spaltentyp Beliebig wird in den Benutzerspalten unterstützt. Ein Any-Typ ist ein Typ „syntaktischer Zucker“ für alle anderen Typen, die wir unterstützen. Es ist äußerst nützlich, wenn eine Benutzerspalte mehrere Typen enthält. Die Nutzlast eines Werts vom Typ Any ist eine Liste von JSON-Zeichenfolgen wie folgt:{"value": "10", "type": "Int"};{"value": "1.0", "type": "Float"}, die in jeder einzelnen JSON-Zeichenfolge ein Wertfeld und ein Typfeld enthält. Der Kardinalitätswert einer Any-Spalte ist festgelegt, was bedeutet, dass die Spalte mehrere Werte akzeptieren kann.

    • Neptune unterstützt die folgenden Typen in einem beliebigen Typ: Bool (oder Boolean), Byte, Short, Int, Long,,,, Float UnsignedByte UnsignedShort, Double UnsignedInt UnsignedLong, Date, dateTime, String und Geometry.

    • Der Vektortyp wird in Any Type nicht unterstützt.

    • Verschachtelt Jeder Typ wird nicht unterstützt. Beispiel, {"value": {"value": "10", "type": "Int"}, "type": "Any"}.

  • Spalten vom Typ Date und Datetime werden in den Benutzerspalten unterstützt. Die Nutzdaten dieser Spalten müssen als Zeichenketten im XSD-Format oder in einem der folgenden Formate bereitgestellt werden:

    • 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:ss.sss [+|-] hhmm

  • In den Benutzerspalten wird der Spaltentyp Geometrie unterstützt. Die Nutzdaten dieser Spalten dürfen nur Geometrie-Primitive des Typs Point enthalten, die als Zeichenketten im WKT-Format (Wellknown Text) bereitgestellt werden. Beispielsweise wäre POINT (30 10) ein gültiger Geometriewert.

Beispiel für eine Parkett-Ausgabe

Bei einer Parquet-Datei wie dieser:

<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 | +--------+---------+-------------+----------------------+------------+------------+----------+

Hier ist ein Beispiel für die Ausgabe, die von neptune.read mit der folgenden Abfrage zurückgegeben wurde:

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

Derzeit gibt es keine Möglichkeit, einem Datenfeld, das aus einer Parquet-Datei stammt, eine Knoten- oder Kantenbeschriftung zuzuweisen. Es wird empfohlen, die Abfragen in mehrere Abfragen zu partitionieren, eine für jedes Label/jeden Typ.

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)