View a markdown version of this page

Parquet を使用したクエリの例 - Amazon Neptune

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

Parquet を使用したクエリの例

次のクエリ例では、特定の Parquet ファイル内の行数を返します。

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

AWS CLI 次のコードを実行して、 の execute-open-cypher-queryオペレーションを使用してクエリ例を実行できます。

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

クエリは、Parquet ファイルから読み取られた行に対して柔軟に処理できます。たとえば、次のクエリでは、Parquet ファイルにあるデータにフィールドが設定されているノードを作成します。

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

MATCH(n) 句の前のような大きな結果生成CALL句を使用することはお勧めしません。これにより、以前の句からの受信ソリューションと neptune.read によって読み取られた行との積が交差するため、クエリの実行時間が長くなります。neptune.read CALL でクエリを開始することをお勧めします。

サポートされている Parquet 列タイプ

Parquet データ型:

  • NULL

  • BOOLEAN

  • FLOAT

  • DOUBLE

  • STRING

  • 符号付き整数: UINT8, UINT16, UINT32, UINT64

  • MAP: は 1 つのレベルのみをサポートします。ネストされた はサポートされていません。

  • LIST: は 1 つのレベルのみをサポートします。ネストされた はサポートされていません。

Neptune 固有のデータ型:

CSV 形式のプロパティ列ヘッダーとは異なり、Parquet 形式のプロパティ列ヘッダーにはプロパティ名のみが必要なため、型名や基数は必要ありません。

ただし、Parquet 形式では、Any type、Date type、dateTime type、Geometry type など、メタデータに注釈を必要とする特殊な列タイプがいくつかあります。次のオブジェクトは、これらの特殊なタイプの列を含むファイルに必要なメタデータ注釈の例です。

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

以下は、これらのタイプに関連する予想されるペイロードの詳細です。

  • 列タイプ 任意の はユーザー列でサポートされています。Any 型は、サポートされている他のすべてのタイプの「構文シュガー」型です。ユーザー列に複数のタイプがある場合に非常に便利です。Any type 値のペイロードは、json 文字列のリストです: {"value": "10", "type": "Int"};{"value": "1.0", "type": "Float"}。各 json 文字列に値フィールドと type フィールドがあります。Any 列の基数値が設定されます。つまり、列は複数の値を受け入れることができます。

    • Neptune は、任意のタイプで次のタイプをサポートしています: Bool (またはブール値)、Byte、Short、Int、Long、UnsignedByte、UnsignedShort、UnsignedInt、UnsignedLong、Float、Double、Date、dateTime、String、Geometry。

    • ベクトルタイプは、どのタイプでもサポートされていません。

    • ネスト すべてのタイプはサポートされていません。例えば、{"value": {"value": "10", "type": "Int"}, "type": "Any"}

  • Date および Datetime タイプの列は、ユーザー列でサポートされています。これらの列のペイロードは、XSD 形式または以下のいずれかの形式に従って文字列として指定する必要があります。

    • 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

  • ジオメトリ列タイプは、ユーザー列でサポートされています。これらの列のペイロードには、Well-known text (WKT) 形式の文字列として提供される Point 型のジオメトリプリミティブのみを含める必要があります。たとえば、POINT (30 10) は有効なジオメトリ値になります。

サンプル parquet 出力

次のような Parquet ファイルがあるとします。

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

次のクエリを使用して neptune.read から返される出力の例を次に示します。

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

現在、Parquet ファイルからのデータフィールドにノードまたはエッジラベルを設定する方法はありません。クエリは、ラベル/タイプごとに 1 つずつ、複数のクエリに分割することをお勧めします。

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)