

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

# CSV を使用したクエリの例
<a name="access-graph-opencypher-21-extensions-s3-read-csv"></a>

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

```
CALL neptune.read(
  {
    source: "<s3 path>",
    format: "csv"
  }
)
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: 'csv'}) YIELD row RETURN count(row)" \
--endpoint-url https://my-cluster-name.cluster-abcdefgh1234.us-east-1.neptune.amazonaws.com:8182
```

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

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

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

## プロパティ列ヘッダー
<a name="property-column-headers"></a>

次の構文を使用して、プロパティ列 (`:`) を指定できます。タイプ名では大文字と小文字が区別されません。プロパティ名内にコロンが表示される場合は、コロンの前にバックスラッシュ を付けてエスケープする必要があります`\:`。

```
propertyname:type
```

**注記**  
列ヘッダーでは、スペース、カンマ、キャリッジリターン、改行文字は使用できません。そのため、プロパティ名にこれらの文字を使用することはできません。
タイプに `[]` を追加することで、配列型の列を指定できます。  

  ```
                          propertyname:type[]
  ```
エッジのプロパティに指定できるのは 1 つの値のみです。配列型が指定された場合や 2 つ目の値が指定された場合はエラーが発生します。次の例は、Int 型の age という名前のプロパティの列ヘッダーを示しています。  

  ```
  age:Int
  ```

ファイルのすべての行は、その位置に整数があるか、空のままにする必要があります。文字列の配列は許可されますが、バックスラッシュ (`;`) を使用してエスケープしない限り、配列内の文字列にセミコロン () 文字を含めることはできません`\;`。

## サポートされている CSV 列タイプ
<a name="supported-csv-column-types"></a>
+ **BOOL (または BOOLEAN)** - 使用できる値: true、false。ブールフィールドであることを示しています。true 以外の値は false として扱われます。
+ **FLOAT** - 範囲: Infinity、INF、-Infinity、-INF、NaN (not-a-number) を含む 32 ビット IEEE 754 浮動小数点。
+ **DOUBLE** - 範囲: Infinity、INF、-Infinity、-INF、NaN (not-a-number) を含む 64 ビット IEEE 754 浮動小数点。
+ **STRING** - 
  + 引用符はオプションです。カンマ、改行、キャリッジリターン文字は、二重引用符 (") で囲まれた文字列に含まれている場合、自動的にエスケープされます。例：「Hello, World」。
  + 引用符で囲んだ文字列に引用符を含めるには、「Hello "World"」という 2 つの文字列を行で使用して引用符をエスケープできます。
  + 文字列の配列は許可されますが、バックスラッシュ (\\;) を使用してエスケープしない限り、配列内の文字列にセミコロン (;) 文字を含めることはできません。
  + 配列内の文字列を引用符で囲む場合は、配列全体を 1 組の引用符で囲む必要があります。例：「文字列 1、文字列 2、文字列 3」。
+ **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
+ **署名付き整数** - 
  + バイト: -128～127
  + ショート: -32768～32767
  + Int: -2^31 から 2^31-1
  + ロング: -2^63 から 2^63-1

**Neptune 固有の列タイプ:**
+ 列タイプ 任意の はユーザー列でサポートされています。Any タイプは、サポートされている他のすべてのタイプの「構文シュガー」タイプです。ユーザー列に複数のタイプがある場合に非常に便利です。Any type 値のペイロードは、json 文字列のリストです: `{"value": "10", "type": "Int"};{"value": "1.0", "type": "Float"}`。各 json 文字列には値フィールドと type フィールドがあります。Any 型の列ヘッダーは propertyname:Any です。Any 列の基数値が設定されます。つまり、列は複数の値を受け入れることができます。
  + Neptune は、任意のタイプで次のタイプをサポートしています: Bool (またはブール値）、Byte、Short、Int、Long、UnsignedByte、UnsignedShort、UnsignedInt、UnsignedLong、Float、Double、Date、dateTime、String、Geometry。
  + ベクトルタイプは、どのタイプでもサポートされていません。
  + ネスト すべてのタイプはサポートされていません。例えば、`{"value": {"value": "10", "type": "Int"}, "type": "Any"}`。
+ ジオメトリ列タイプは、ユーザー列でサポートされています。これらの列のペイロードには、Well-known text (WKT) 形式の文字列として提供される Point 型のジオメトリプリミティブのみを含める必要があります。たとえば、POINT (30 10) は有効なジオメトリ値になります。

## サンプル CSV 出力
<a name="sample-csv-output"></a>

次の 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
```

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

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

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

```
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)
```