Oracle NoSQL Database Cloud Serviceリファレンス
サポートされているデータ型、DDL文、Oracle NoSQL Database Cloud Service Serviceのパラメータおよびメトリックについて学習します。
この記事には次のトピックが含まれます:
サポートされているデータ型
Oracle NoSQL Database Cloud Serviceは、多くの共通データ型をサポートしています。
データ・タイプ | 説明 |
---|---|
|
0バイト以上のバイト・シーケンス。ストレージ・サイズは、バイト数とバイト配列のサイズのエンコーディング(配列のサイズに応じて変数)です。 |
FIXED_BINARY |
固定サイズのバイト配列。このデータ型に対する追加のエンコーディング・オーバーヘッドはありません。 |
|
|
|
索引キーに8バイトの記憶域を使用してエンコードされた長い浮動小数点数。主キーの場合、10バイトの記憶域が使用されます。 |
|
インデックスキー用に4バイトのストレージを使用してエンコードされた長い浮動小数点数。主キーの場合は、5バイトの記憶域が使用されます。 |
|
長い整数には、値に応じて1から8バイトの記憶域を使用する可変長エンコーディングがあります。主キーの場合、10バイトの記憶域が使用されます。 |
|
長い整数には、値に応じて1から4バイトの記憶域を使用する可変長エンコーディングがあります。主キーの場合は、5バイトの記憶域が使用されます。 |
|
ゼロ以上の一連のUnicode文字。String型はUTF-8としてエンコードされ、そのエンコーディングに格納されます。記憶域サイズは、UTF-8バイト数に長さを加えたもので、エンコーディングのバイト数に応じて1から4バイトです。インデックスキーに格納する場合、ストレージサイズは UTF-8バイト数と1つのNULL終了バイト数です。 |
|
任意精度符号付き小数。 順序付き比較に使用できるバイト配列形式でシリアライズされます。フォーマットには次の2つの部分があります。
例: 12.345678 6バイトで直列化 1.234E+102は5バイトでシリアライズします ノート: スキーマで数値を使用する必要がある場合は、次に示す順序でデータ型を決定することをお薦めします: INTEGER、LONG、FLOAT、DOUBLE、NUMBER使用するストレージと処理能力の両方においてNUMBERはコストがかかるため、ユース・ケースで本当に必要でないかぎり、NUMBERを使用しないでください。 |
TIMESTAMP |
精度付きの時点。精度はストレージのサイズおよび使用に影響します。タイムスタンプは、UTC (協定世界時)で格納されて管理されます。Timestampデータ型には、使用する精度に応じて3から9バイトの任意の場所が必要です。 次の内訳は、このデータ型で使用されるストレージを示しています。
|
|
ノート: UUIDデータ型はSTRINGデータ型のサブタイプと見なされます。記憶域のサイズは、索引キーとして16バイトです。主キーとして使用する場合、ストレージ・サイズは19バイトです。 |
|
列挙は文字列の配列として表されます。 |
|
0つ以上の型指定されたアイテムの順序付きコレクション。JSONとして定義されていない配列に JSONとして宣言された配列には、任意の有効なJSONを含めることができます。この中には、JSONに関連する特殊な値であるnullも含まれます。 |
|
すべてのキーが文字列で、すべてのアイテムが同じ型である、0つ以上のキーとアイテムのペアの順序なしコレクション。すべてのキーは一意である必要があります。キーとアイテムのペアはフィールドと呼ばれ、キーがフィールド名、それに関連付けられたアイテムがフィールド値です。各フィールド値は異なる型を持つことができますが、マップにNULLのフィールド値を含めることはできません。 |
|
すべてのキーが文字列である、1つ以上のキーとアイテムのペアの固定コレクション。レコード内のすべてのキーは一意である必要があります。 |
|
任意の有効なJSONデータ。 |
表の状態およびライフ・サイクル
さまざまなテーブルの状態とその重要度(テーブルのライフ サイクル プロセス)について説明します。
それぞれの表は、表の作成から削除まで、一連の様々な状態を経過します。たとえば、DROPPING
状態の表はACTIVE
状態に移行できませんが、ACTIVE
状態の表はUPDATING
状態に変わることができます。表のライフ・サイクルをモニタリングすることにより、表の様々な状態をトラッキングできます。この項では、表の様々な状態について説明します。
表の状態 | 説明 |
---|---|
|
表は作成処理中です。使用する準備ができていません。 |
|
表の更新が進行中です。表がこの状態にある間、さらに表に変更はできません。 次の場合、表は
|
|
表は現在の状態で使用できます。表は最近作成または変更された可能性がありますが、表の状態は現在安定しています。 |
|
表は削除中であり、どのような目的でもアクセスできません。 |
|
表はすでに削除され、読取り、書込みまたは問合せのアクティビティの対象としてもう存在していません。
ノート: 削除した後は、同じ名前の表をもう一度作成できます。 |
OCIコンソールでのSQL文エラーのデバッグ
- SQL文の最後にセミコロンがある場合。
- カンマの使用の誤り、文内の不要な文字の使用など、SQL文に構文エラーがある場合。
- SQLキーワードまたはデータ型定義のSQL文にスペル・エラーがある場合。
- 列をNOT NULLとして定義したが、DEFAULT値を割り当てていない場合。
- 列をNOT NULLとして定義したが、DEFAULT値を割り当てていない場合。
- SQL文の最後にセミコロン(存在する場合)を削除します。
- SQL文に不要な文字または誤った句読点があるかどうかを確認します。
- SQL文のスペル・エラーを確認します。
- すべての列定義が完了して正しいかどうかを確認します。
- 表の主キーが定義されているかどうかを確認します。
前述の考えられる状況の一部を排除しても引き続きエラーが発生する場合は、クラウド・シェルを使用して問合せを実行し、次の例に示すように正確なエラーを取得できます。
例: クラウド・シェルからのSELECT文のエラー・メッセージの取得
- OCIコンソールで、右上のメニューからクラウド・シェルを開きます。
- SQL SELECT文(たとえば、
query1.sql
)を変数(SQL_SELECTSTMT
)にコピーします。次に例を示します:SQL_SELECTSTMT=$(cat ~/query1.sql | tr '\n' ' ')
- 次の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<language>ドライバには、DDL文を実行するためのAPIが用意されています。アプリケーションを記述するには、APIを使用したOracle NoSQL Database Cloud Serviceでの表および索引の作成を参照してください。
一般的な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言語とリファレンス・ガイドに記載されているDDL言語の違いは、次のとおりです:
表名
- 256文字以内に制限され、英数字およびアンダースコアのみ使用できます。
- 文字で始める必要があります
- 特殊文字は使用できません
- 子表はサポートされていません
サポートされていない概念
DESCRIBE
およびSHOW TABLE
文。- 全文索引
- ユーザーとロールの管理
- オンプレミス・リージョン
問合せ言語リファレンス
SQL文を使用したOracle NoSQL Database Cloud Serviceでのデータの更新および問合せ方法について学習します。
Oracle NoSQL Databaseでは、SQL問合せ言語を使用して、NoSQL表のデータの更新と問合せを行います。問合せ言語の構文を学習するには、Oracle NoSQL DatabaseのSQLリファレンスを参照してください。
標準的な問合せ
SELECT <expression>
FROM <table name>
[WHERE <expression>]
[GROUP BY <expression>]
[ORDER BY <expression> [<sort order>]]
[LIMIT <number>]
[OFFSET <number>];
For example:
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>];
For example:
UPDATE JSONPersons $j
SET TTL 1 DAYS
WHERE id = 6
RETURNING remaining_days($j) AS Expires;
クラウドにおける問合せ言語の違い
クラウド・サービスの問合せサポートと、問合せ言語リファレンス・ガイドに記載されている内容では、次の点が異なります:
SELECT句で使用される式に関する制限
Oracle NoSQL Database Cloud Serviceでは、集計ファンクション間でのグループ化式または算術式がサポートされています。他の種類の式は、SELECT句では許可されていません。たとえば、CASE式は、SELECT句では使用できません。
各NoSQLデータベース・ドライバには、問合せ文を実行するためのAPIが用意されています。
問合せプラン参照
問合せ実行計画は、Oracle NoSQL Databaseが問合せを実行するために行う一連の操作です。
問合せ実行計画は、プラン・イテレータのツリーです。各種の反復子は、問合せに出現する様々な種類の式を評価します。通常、インデックスの選択や関連するインデックス条件の種類は、クエリーのパフォーマンスに大きく影響する可能性があります。そのためユーザーは、多くの場合、問合せで使用されている索引と、問合せにプッシュ・ダウンされている条件を確認する必要があります。この情報によっては、索引ヒントを介して異なる索引を強制的に使用する必要があります。この情報は、問合せ実行計画に含まれています。すべてのOracle NoSQLドライバに、問合せの実行計画を表示するAPIが用意されています。
問合せにおいて使用される最も一般的で重要なイテレータの一部を次に示します。
- クエリーで使用されるインデックスのスキャン。
- 索引にプッシュされます。
- 必要に応じて、条件を満たす索引エントリが指す行を取得します。インデックスがカバーである場合、TABLEイテレータの結果セットはインデックス・エントリのセットであり、それ以外の場合、それはテーブル行のセットです。
ノート:
インデックスは、そのインデックスのエントリのみを使用してクエリーを評価できる場合、つまり、関連付けられた行を取得する必要がない場合、クエリーに関するカバーインデックスと呼ばれます。SELECTイテレータ: SELECT式を実行します。
"iterator kind" : "SELECT",
"FROM" :
{
},
"FROM variable" : "...",
"SELECT expressions" :
[
{
}
]
SELECTイテレータには、FROM、WHERE、FROM変数、SELECT式などのフィールドがあります。"FROM"および"FROM変数"はSELECT式のFROM句を表し、WHEREはfilter句を表し、"SELECT式"はSELECT句を表します。
- RECEIVEイテレータ自体と、イテレータ・ツリー内でその上にあるすべてのイテレータがドライバで実行されます。
- RECEIVEイテレータの下にあるすべてのイテレータは、レプリケーション・ノード(RN)で実行されます。これらのイテレータは、RECEIVEイテレータの一意の子をルートとするサブツリーを形成します。
通常、RECEIVEイテレータは問合せコーディネータとして機能します。実行のためにサブプランを適切なRNに送信し、結果を収集します。ソートや重複削除などのその他の操作を実行し、その結果をその祖先イテレータ(存在する場合)に伝播して、さらに処理できます。
分散の種類:
分散の種別は、Oracle NoSQLデータベース(ストア)に関与するRN間で問合せを分散して実行する方法を指定します。distribution kindは、RECEIVEイテレータのプロパティです。
- SINGLE_PARTITION: SINGLE_PARTITION問合せでは、そのWHERE句で完全なシャード・キーを指定します。その結果、1つのパーティションにその完全な結果セットが含まれ、RECEIVEイテレータによって、そのパーティションが格納されている単一のRNにそのサブプランが送信されます。SINGLE_PARTITION問合せでは、主キー索引または2次索引のいずれかを使用できます。
- ALL_PARTITIONS: 問合せでは、ここで主キー索引を使用し、完全なシャード・キーを指定しません。結果として、ストアにM個のパーティションがある場合、RECEIVEイテレータはそのサブプランのM個のコピーを送信して、それぞれがM個のパーティションのいずれかで実行されるようにします。
- ALL_SHARDS: ここでは問合せで2次索引が使用され、完全なシャード・キーは指定されません。結果として、ストアにN個のシャードがある場合、RECEIVEイテレータはそのサブプランのN個のコピーを送信して、それぞれがN個のシャードのいずれかで実行されるようにします。
問合せ実行計画の構造:
問合せ実行は、複数のバッチに分けて行われます。問合せサブプランは、実行のためにパーティションまたはシャードに送信されると、バッチ制限に到達するまでそこで実行されます。バッチ制限は、問合せによってローカルに消費される読取りユニットの数です。デフォルトは読取りユニット2000個(約2MBのデータ)であり、それは、問合せレベルのオプションによってのみ減らすことができます。
バッチ制限に到達すると、生成されたローカル結果は、他にローカル結果が存在するかどうかを示すブール・フラグとともに、さらに処理するためにRECEIVEイテレータに送信されます。このフラグがtrueの場合、この応答には再開情報が含まれています。問合せを同じパーティションまたはシャードに再送信することをRECEIVEイテレータが決定した場合は、そのリクエストにこの再開情報が含まれます。それにより、問合せ実行は、前回のバッチでの停止箇所から再開されます。これは、バッチの完了後にそのRNで問合せ状態が保持されていないためです。同じパーティションまたはシャードに対する次回のバッチは、前回のバッチと同じRNで実行することも、同じパーティションまたはシャードが格納されている別のRNで実行することもできます。