本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
使用 parquet 查詢範例
下列範例查詢會傳回指定 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 資料欄類型
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【+|-】hhmm
yyyy-MM-ddTHH:mm:ss.SSS【+|-】hhmm
使用者資料欄中支援幾何資料欄類型。這些資料欄的承載只能包含 Point 類型的幾何基本概念,以已知文字 (WKT) 格式的字串提供。例如,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 檔案的資料欄位。建議您將查詢分割成多個查詢,每個標籤/類型各一個。
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)