Oracle NoSQL Database Cloud Service 參照

瞭解支援的資料類型、DDL 敘述句、Oracle NoSQL Database Cloud Service Service 參數及度量。

本文包含下列主題:

支援的資料類型

Oracle NoSQL Database Cloud Service 支援許多通用資料類型。

資料類型 描述
BINARY 零個或多個位元組的序列。儲存體大小為位元組的數目加上位元組陣列大小的編碼,位元組陣列的大小會視陣列的大小而有所不同。
FIXED_BINARY 固定大小的位元組陣列。此資料類型沒有額外的編碼額外負荷。
BOOLEAN 具有下列兩個可能值之一的資料類型:TRUEFALSE。布林值儲存大小為 1 個位元組。
DOUBLE 一個長浮點數,使用 8 位元組的儲存體來編碼索引索引鍵。如果是主索引鍵,則會使用 10 個位元組的儲存。
FLOAT 一個長浮點數,使用 4 位元組的儲存空間來編碼索引索引鍵。如果是主索引鍵,則會使用 5 個位元組的儲存。
LONG 長整數具有可變長度編碼,根據值使用 1 到 8 個位元組的儲存。如果是主索引鍵,則會使用 10 個位元組的儲存。
INTEGER 長整數具有可變長度編碼,根據值使用 1 到 4 個位元組的儲存。如果是主索引鍵,則會使用 5 個位元組的儲存。
STRING 零個或多個 Unicode 字元的序列。「字串」類型是以 UTF-8 編碼,並儲存在該編碼中。儲存大小為 UTF-8 位元組的數目加上長度,視編碼的位元組數而定,可能會是 1 到 4 個位元組。儲存在索引金鑰中時,儲存大小是 UTF-8 位元組的數目,加上單一空值終止位元組。
NUMBER 任意精度簽署的小數。

它是以位元組陣列格式序列化的方法,可以用來進行排序的比較。格式有 2 個部分:

1。符號和指數加上一個數字。這會採用 1-6 個位元組,但通常為 2 個位元組,除非指數相當大
2。值的 mantissa,是每 2 位數大約一個位元組

範例:

12.345678 會以 6 個位元組序列化

1.234E+102 會以 5 個位元組序列化

注意:當您需要在綱要中使用數值時,它會是建議您依下列順序決定資料類型:INTEGER、LONG、FLOAT、DOUBLE、NUMBER Avoid NUMBER,除非您確實需要使用 NUMBER,因為 NUMBER 在使用儲存與處理能力方面都相當昂貴。
TIMESTAMP 具有小數位數的時間點。精確度會影響儲存大小和使用量。時戳是以 UTC (國際標準時間) 儲存和管理。時間戳記資料類型需要 3 到 9 個位元組,視使用的數字位數而定。

下列明細說明此資料類型所使用的儲存體:

- 位元 [0~13] 年 - 14 位元
- 位元 [14~17] 月 - 4 位元
- 位元 [18~22] 日 - 5 位元
- 位元 [23~27] 小時 - 5 位元 [ 選擇性 ]
- 位元 [28~33] 分鐘 - 6 位元 [ 選擇性 ]
- 位元 [34~39] 秒 - 6 位元 [ 選擇性 ]
- 位元 [40~71] 分數秒 [ 選擇性且使用變數長度 ]
UUID 注意:UUID 資料類型被視為 STRING 資料類型的子類型。儲存大小為 16 個位元組,作為索引索引鍵。若用作主索引鍵,儲存大小為 19 個位元組。
ENUM 列舉是以字串陣列來表示。ENUM 值為符號識別碼 (記號),並儲存為代表列舉中排序位置的小整數值。
ARRAY 一個排序的集合,其中包含多個類型的項目。未定義為 JSON 的陣列不能包含 NULL 值。

宣告為 JSON 的陣列可以包含任何與 JSON 相關的有效 JSON,包括特殊值 null。
MAP 零或多個索引鍵 - 項目組的未排序集合,其中所有索引鍵都是字串,所有項目都是相同類型。所有索引鍵都必須是唯一的。索引鍵項目組稱為欄位,索引鍵為欄位名稱,而相關聯的項目為欄位值。欄位值可以有不同的類型,但對應不能包含 NULL 欄位值。
RECORD 一或多個金鑰項目組的固定集合,其中所有金鑰都是字串。記錄中的所有索引鍵必須是唯一的。
JSON 任何有效的 JSON 資料。

表格狀態與生命週期

瞭解不同的表格狀態及其重要性 (表格週期處理作業)。

每個表格都會傳遞一系列不同的狀態,從建立表格到刪除 (刪除)。例如,處於 DROPPING 狀態的表格無法繼續進行 ACTIVE 狀態,而處於 ACTIVE 狀態的表格可以變更為 UPDATING 狀態。您可以透過監督表格週期,追蹤不同的表格狀態。本節說明各種表格狀態。

表格狀態 .png 的描述如下

table-state.png 圖解描述

表格狀態 描述
CREATING 正在建立表格。未準備好使用。
UPDATING 正在更新表格。表格在此狀態時無法進行進一步的表格修改。

當下列情況時,表格會處於 UPDATING 狀態:

- 變更表格限制
- 正在發展表格綱要
- 新增或刪除表格索引
ACTIVE 表格可以在目前的狀態中使用。表格可能最近建立或修改過,但表格狀態現在已穩定。
DROPPING 表格正在刪除中,無法供任何用途存取。
DROPPED 表格已經刪除,讀取、寫入或查詢活動已不存在。

注意:刪除之後,即可再次建立相同名稱的表格。

對 OCI 主控台中的 SQL 敘述句錯誤進行除錯

當您使用 OCI 主控台來建立使用 DDL 敘述句的表格,或使用 DML 敘述句來插入或更新資料,或使用 SELECT 查詢來擷取資料時,在下列其中一個常見案例中,您的敘述句不完整或發生錯誤

如何使用 OCI 主控台建立或管理資料時,如何處理一些不完整或發生錯誤的錯誤:

如果您在排除上述的某些可能情況後仍發生錯誤,可以使用 Cloud Shell 執行查詢並擷取完全相同的錯誤,如下方範例所示。

範例:從 Cloud Shell 取得 SELECT 敘述句的錯誤訊息

summarize 指令會檢查語法,並傳回 SQL 敘述句的簡短摘要。

  1. 在 OCI 主控台中,從右上方的功能表開啟 Cloud Shell

  2. 將您的 SQL SELECT 敘述句 (例如,query1.sql) 複製到變數 (SQL_SELECTSTMT)。

    範例:

    SQL_SELECTSTMT=$(cat ~/query1.sql | tr '\n' ' ')
  3. 請呼叫下方的 oci 命令,檢查 SQL SELECT 敘述句的語法。

    注意:您必須為此 SELECT 敘述句提供 compartment_id

    oci raw-request --http-method GET --target-uri
    https://nosql.${OCI_REGION}.oci.oraclecloud.com/20190828/query/summarize?compartmentId=$NOSQL_COMPID\
    &statement="$SQL_SELECTSTMT" | jq '.data'

這會提供您 SQL 敘述句中的確切錯誤。

資料定義工具語言參考

瞭解如何在 Oracle NoSQL Database Cloud Service 中使用 DDL。

使用 Oracle NoSQL Database Cloud Service DDL 建立、更改及刪除表格與索引。

如需 DDL 語言語法的相關資訊,請參閱表格資料定義語言指南。本指南將說明內部部署 Oracle NoSQL Database 產品支援的 DDL 語言。Oracle NoSQL Database Cloud Service 支援此功能的子集,差異記錄在「雲端」區段的 DDL 差異中。

此外,每個 NoSQL 語言驅動程式也提供 API,可執行 DDL 敘述句。若要撰寫應用程式,請參閱在 Oracle NoSQL Database Cloud Service 中使用 API 建立表格與索引

一般 DDL 敘述句

以下是常見的 DDL 敘述句範例:

建立表格

CREATE TABLE [IF NOT EXISTS] (
    field-definition, field-definition-2 ...,
    PRIMARY KEY (field-name, field-name-2...),
) [USING TTL ttl]

舉例而言:

CREATE TABLE IF NOT EXISTS audience_info (
    cookie_id LONG,
    ipaddr STRING,
    audience_segment JSON,
    PRIMARY KEY(cookie_id))

更改表格

ALTER TABLE table-name (ADD field-definition)
ALTER TABLE table-name (DROP field-name)
ALTER TABLE table-name USING TTL ttl

舉例而言:

ALTER TABLE audience_info USING TTL 7 days

建立索引

CREATE INDEX [IF NOT EXISTS] index-name ON table-name (path_list)

舉例而言:

CREATE INDEX segmentIdx ON audience_info
       (audience_segment.sports_lover AS STRING)

刪除表格

DROP TABLE [IF EXISTS] table-name

舉例而言:

DROP TABLE audience_info

請參閱參考指南,瞭解完整清單:

雲端的 DDL 差異

雲端服務 DDL 語言與參考指南中描述的差異如下:

表格名稱

不支援的概念

查詢語言參考

瞭解如何使用 SQL 敘述句更新及查詢 Oracle NoSQL Database Cloud Service 中的資料。

Oracle NoSQL Database 使用 SQL 查詢語言來更新及查詢 NoSQL 表格中的資料。請參閱 SQL Reference for Oracle NoSQL Database 瞭解查詢語言語法。

一般查詢

SELECT <expression>
FROM <table name>
[WHERE <expression>]
[GROUP BY <expression>]
[ORDER BY <expression> [<sort order>]]
[LIMIT <number>]
[OFFSET <number>];

舉例而言:

SELECT * FROM Users;
SELECT id, firstname, lastname FROM Users WHERE firstname = "Taylor";
UPDATE <table_name> [AS <table_alias>]
    <update_clause>[, <update_clause>]*
WHERE <expr>[<returning_clause>];

舉例而言:

UPDATE JSONPersons $j
  SET TTL 1 DAYS
  WHERE id = 6
  RETURNING remaining_days($j) AS Expires;

雲端中的查詢語言差異

雲端服務查詢支援與查詢語言參考指南中描述的內容不同,方法如下:

SELECT 子句中使用之表示式的限制

Oracle NoSQL Database Cloud Service 支援聚總函數之間的運算式或算術運算式分組。SELECT 子句中不允許其他種類的表示式。例如,SELECT 子句中不允許使用 CASE 表示式。

每個 NoSQL 資料庫驅動程式都提供一個 API 來執行查詢敘述句。

查詢計畫參考

查詢執行計畫是 Oracle NoSQL Database 執行查詢時所執行的作業順序。

查詢執行計畫是計畫重複程式的樹狀結構。每種重複程式都會評估可能出現在查詢中的不同類型表示式。一般而言,選擇索引與關聯索引述詞種類會對查詢效能產生劇烈的影響。因此,您身為使用者經常想要查看查詢所使用的索引,以及已將哪些述詞向下推送至該查詢。根據這項資訊,您可能想要透過索引提示強制使用不同的索引。此資訊包含在查詢執行計畫中。所有 Oracle NoSQL 驅動程式都提供 API 以顯示查詢的執行計畫。

查詢中使用的部分最常見與最重要重複程式為:

TABLE iterator:表格重複程式負責:

注意:如果只能使用該索引的項目來評估查詢 (亦即不需要擷取相關的資料列),就稱為查詢的相關涵蓋索引。

SELECT iterator:它負責執行 SELECT 表示式。

每個查詢都有一個 SELECT 子句。因此,每個查詢計畫都會有一個 SELECT 重複程式。SELECT 重複程式的結構如下:

"iterator kind" : "SELECT",
"FROM" :
  {
  },
"FROM variable" : "...",
"SELECT expressions" :
[
  {
  }
]

SELECT 重複程式具有下列欄位:"FROM"、"WHERE"、「FROM 變數」和 「SELECT 表示式」。"FROM" 和 「FROM 變數」代表 SELECT 表示式的 FROM 子句,WHERE 代表篩選子句,「SELECT 表示式」代表 SELECT 子句。

RECEIVE iterator:這是一個特殊的內部重複程式,可將查詢計畫分成 2 個部份:

  1. RECEIVE 重複程式本身,以及位於重複程式樹狀結構中上方的所有重複程式,都會在驅動程式中執行。

  2. RECEIVE 重複程式下的所有重複程式都會在複製節點 (RN) 執行;這些重複程式會形成一個子樹狀結構,根位於 RECEIVE 重複程式之唯一子項。

一般而言,RECEIVE 重複程式會作為查詢協調器。它會將其子計劃傳送至適當的 RN 以供執行並收集結果。它可以執行其他作業,例如排序與複製抵消,並將結果傳播至其祖代迭代器 (如果有的話),以進一步處理。

分配種類:

分送種類指定如何將查詢分配給參與 Oracle NoSQL 資料庫 (存放區) 的 RN,以供執行。分配種類為 RECEIVE 重複程式的屬性。

分配種類的不同選擇為:

查詢執行計畫的詳細結構:

查詢執行會以批次方式執行。將查詢子計畫傳送至分割區或分區以供執行時,將會在該處執行,直到達到批次限制為止。批次限制是查詢本機使用的讀取單位數。預設值為 2000 個讀取單位 (大約 2MB 的資料),而且只能透過查詢層次選項來減少。

達到批次限制時,任何產生的本機結果都會傳回 RECEIVE 迭代器以進一步處理,以及布林值旗標,指出是否有更多可用的本機結果。若標誌為真,回覆會包含履歷資訊。如果 RECEIVE 重複程式決定將查詢重新傳送到同一個分割區 / 分區,則會將此繼續資訊包含在其要求中,讓查詢執行會在前一個批次期間停止時重新啟動。這是因為批次完成後,RN 不會維護任何查詢狀態。相同分割區 / 分區的下一個批次可能發生在與上一個批次相同的 RN,或是在其他同時儲存相同分割區 / 分區的 RN 上。