

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

# 使用 parquet 查詢範例
<a name="access-graph-opencypher-21-extensions-s3-read-parquet"></a>

下列範例查詢會傳回指定 Parquet 檔案中的資料列數：

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

您可以使用 中的 `execute-open-cypher-query`操作執行查詢範例， AWS CLI 方法是執行下列程式碼：

```
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 資料欄類型
<a name="access-graph-opencypher-21-extensions-s3-read-parquet-column-types"></a>

**Parquet 資料類型：**
+ NULL
+ BOOLEAN
+ FLOAT
+ DOUBLE
+ STRING
+ 帶正負號整數：UINT8, UINT16, UINT32, UINT64
+ MAP：僅支援單一層級。不支援巢狀。
+ LIST：僅支援單一層級。不支援巢狀。

**Neptune 特定的資料類型：**

與 CSV 格式的屬性欄標頭不同，Parquet 格式的屬性欄標頭只需要具有屬性名稱，因此不需要具有類型名稱或基數。

不過，Parquet 格式的某些特殊資料欄類型需要中繼資料中的註釋，包括任意類型、日期類型、dateTime類型和幾何類型。下列 物件是包含這些特殊類型資料欄之檔案的必要中繼資料註釋範例：

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

以下是與這些類型相關聯的預期承載詳細資訊：
+ 資料欄類型 使用者資料欄中支援任何 。任何類型都是我們支援的所有其他類型的「語法糖」類型。如果使用者資料欄包含多種類型，這非常有用。Any type value 的承載是 json 字串的清單，如下所示：`{"value": "10", "type": "Int"};{"value": "1.0", "type": "Float"}`，每個個別 json 字串中都有一個值欄位和一個類型欄位。已設定任何資料欄的基數值，表示該資料欄可接受多個值。
  + 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【\$1\$1-】hhmm
  + yyyy-MM-ddTHH：mm：ss.SSS【\$1\$1-】hhmm
+ 使用者資料欄中支援幾何資料欄類型。這些資料欄的承載只能包含 Point 類型的幾何基本概念，以已知文字 (WKT) 格式的字串提供。例如，POINT (30 10) 是有效的幾何值。

## 範例 parquet 輸出
<a name="sample-parquet-output"></a>

指定像這樣的 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 檔案的資料欄位。建議您將查詢分割成多個查詢，每個標籤/類型各一個。

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