Cassandra ドキュメント

バージョン

プレリリースバージョンのドキュメントを表示しています。

定義

表記規則

CQL構文を指定するために、このドキュメントでは次の表記規則を使用します。

  • 言語規則は、非公式なBNFバリアント表記で記述されます。特に、角括弧([ item ])は省略可能な項目、*+は繰り返し項目(+は少なくとも1つを意味します)に使用します。

  • この文法では、便宜上、非終端記号を小文字で(そしてそれらの定義へのリンクで)、終端キーワードを「すべて大文字」で記述します。ただし、キーワードは識別子であり、実際には大文字と小文字が区別されません。正規表現を使用していくつかの初期構文を定義することもあり、その場合はre(<some regular expression>)で示します。

  • この文法はドキュメント作成の目的で提供されており、些細な詳細を省略しています。たとえば、CREATE TABLE文の最後の列定義のコンマはオプションですが、存在する場合はサポートされます(このドキュメントの文法ではそうは示されていません)。また、この文法で受け入れられるものがすべて有効なCQLであるとは限りません。

  • 本文中のキーワードまたはCQLコードの部分への参照は、等幅フォントで表示されます。

識別子とキーワード

CQL言語は、テーブル、列、その他のオブジェクトを識別するために識別子(または名前)を使用します。識別子は、正規表現[a-zA-Z][a-zA-Z0-9_]*に一致するトークンです。

SELECTWITHなど、そのような識別子のいくつかはキーワードです。これらは言語に対して固定された意味を持ち、ほとんどは予約されています。これらのキーワードのリストは、付録Aにあります。

識別子と(引用符なしの)キーワードは大文字と小文字が区別されません。したがって、SELECTselectまたはsElEcTと同じであり、myIdmyidまたはMYIDと同じです。よく使用される規則(特にこのドキュメントのサンプルによって)は、キーワードに大文字を使用し、その他の識別子に小文字を使用することです。

二重引用符(")で任意の文字列(空ではない)を囲むことで定義される、引用符付き識別子と呼ばれる2番目の種類の識別子があります。引用符付き識別子は決してキーワードではありません。したがって、"select"は予約キーワードではなく、列を参照するために使用できます(ただし、これは特に推奨されません)。一方、selectは構文エラーが発生します。また、引用符なしの識別子やキーワードとは異なり、引用符付き識別子は大文字と小文字が区別されます("My Quoted Id""my quoted id"とは異なります)。ただし、[a-zA-Z][a-zA-Z0-9_]*に一致するすべて小文字の引用符付き識別子は、二重引用符を削除することで得られる引用符なしの識別子と等価です(そのため、"myid"myidmyIdと等価ですが、"myId"とは異なります)。引用符付き識別子の内部では、二重引用符文字を繰り返してエスケープできます。そのため、"foo "" bar"は有効な識別子です。

引用符付き識別子は、任意の名前の列を宣言でき、これらはサーバーで使用される特定の名前と衝突することがあります。たとえば、条件付き更新を使用する場合、サーバーは"[applied]"という特別な結果を含む結果セットで応答します。このような名前の列を宣言した場合、一部のツールが混乱する可能性があり、避ける必要があります。一般的に、引用符なしの識別子を使用する方が好ましいですが、引用符付き識別子を使用する場合は、角括弧で囲まれた名前("[applied]"など)と、関数呼び出しのように見える名前("f(x)"など)を避けることを強くお勧めします。

より正式には、次のようになります。

identifier::= unquoted_identifier | quoted_identifier
unquoted_identifier::= re('[a-zA-Z][link:[a-zA-Z0-9]]*')
quoted_identifier::= '"' (any character where " can appear if doubled)+ '"'

定数

CQLは次の定数を定義します。

constant::= string | integer | float | boolean | uuid | blob | NULL
string::= ''' (any character where ' can appear if doubled)+ ''' : '$$' (any character other than '$$') '$$'
integer::= re('-?[0-9]+')
float::= re('-?[0-9]+(.[0-9]*)?([eE][+-]?[0-9+])?') | NAN | INFINITY
boolean::= TRUE | FALSE
uuid::= hex\{8}-hex\{4}-hex\{4}-hex\{4}-hex\{12}
hex::= re("[0-9a-fA-F]")
blob::= '0' ('x' | 'X') hex+

言い換えれば

  • 文字列定数は、シングルクォート(')で囲まれた任意の文字列です。シングルクォートを含めるには、それを繰り返します(例:'It''s raining today')。これらは、二重引用符を使用する引用符付き識別子と混同しないでください。または、文字列を2つのドル記号で囲むことで定義できます。その場合、シングルクォートはエスケープせずに使用できます(It's raining today)。後者の形式は、関数本体でシングルクォート文字をエスケープする必要がないように($$よりも発生する可能性が高いため)、ユーザー定義関数を定義する場合によく使用されます。

  • 整数、浮動小数点数、ブール値の定数は、期待どおりに定義されます。ただし、浮動小数点数は特別なNaNInfinity定数を許可することに注意してください。

  • CQLはUUID定数をサポートしています。

  • BLOBのコンテンツは16進数で提供され、0xで始まります。

  • 特別なNULL定数は、値がないことを示します。

これらの定数の型については、データ型セクションを参照してください。

CQLには、CQLがサポートする値の種類を示すの概念があります。項は次のように定義されます。

term::= constant | literal | function_call | arithmetic_operation | type_hint | bind_marker
literal::= collection_literal | vector_literal | udt_literal | tuple_literal
function_call::= identifier '(' [ term (',' term)* ] ')'
arithmetic_operation::= '-' term | term ('+' | '-' | '*' | '/' | '%') term
type_hint::= '(' cql_type ')' term
bind_marker::= '?' | ':' identifier

したがって、項は次のいずれかです。

コメント

CQLのコメントは、二重ダッシュ(--)または二重スラッシュ(//)で始まる行です。

// で囲むことで、複数行コメントもサポートされます(ただし、ネストはサポートされていません)。

-- This is a comment
// This is a comment too
/* This is
   a multi-line comment */

CQLは、次のカテゴリに分類できる文で構成されています。

  • データの格納方法を定義および変更するdata-definition文(キー空間とテーブル)。

  • データを選択、挿入、削除するためのdata-manipulation文。

  • secondary-indexes文。

  • materialized-views文。

  • cql-roles文。

  • cql-permissions文。

  • User-Defined Functions (UDFs)文。

  • udts文。

  • cql-triggers文。

すべての文は以下にリストされており、このドキュメントの残りの部分で説明されています(上記のリンクを参照)。

cql_statement::= statement [ ';' ]
statement:=: ddl_statement :
        | dml_statement
        | secondary_index_statement
        | materialized_view_statement
        | role_or_permission_statement
        | udf_statement
        | udt_statement
        | trigger_statement
ddl_statement::= use_statement
        | create_keyspace_statement
        | alter_keyspace_statement
        | drop_keyspace_statement
        | create_table_statement
        | alter_table_statement
        | drop_table_statement
        | truncate_statement
dml_statement::= select_statement
        | insert_statement
        | update_statement
        | delete_statement
        | batch_statement
secondary_index_statement::= create_index_statement
        | drop_index_statement
materialized_view_statement::= create_materialized_view_statement
        | drop_materialized_view_statement
role_or_permission_statement::= create_role_statement
        | alter_role_statement
        | drop_role_statement
        | grant_role_statement
        | revoke_role_statement
        | list_roles_statement
        | grant_permission_statement
        | revoke_permission_statement
        | list_permissions_statement
        | create_user_statement
        | alter_user_statement
        | drop_user_statement
        | list_users_statement
udf_statement::= create_function_statement
        | drop_function_statement
        | create_aggregate_statement
        | drop_aggregate_statement
udt_statement::= create_type_statement
        | alter_type_statement
        | drop_type_statement
trigger_statement::= create_trigger_statement
        | drop_trigger_statement

プリペアドステートメント

CQLはプリペアドステートメントをサポートしています。プリペアドステートメントは、クエリを一度だけ解析して、異なる具体的な値で複数回実行できる最適化です。

少なくとも1つのバインドマーカー(bind_markerを参照)を使用するステートメントは、準備する必要があります。その後、ステートメントは、各マーカーに対して具体的な値を提供することで実行できます。ステートメントの準備と実行の方法は、使用するCQLドライバによって異なり、ドライバのドキュメントを参照する必要があります。