CQLコマンド構文について

CQL文を記述するための基本的な規則と制限事項です。これには、大文字と小文字、有効な文字、エスケープ文字、キースペース修飾子、コメント、キーワード、指数表記などが含まれます。

CQL入力は文で構成されます。SQLと同様、CQL文によってデータを変更し、データを検索し、データを格納し、データの格納方法を変更します。文はセミコロン(;)で終了します。

次の例は有効なCQL文を示しています。

SELECT * FROM MyTable;

UPDATE MyTable
SET SomeColumn = 'SomeValue'
WHERE columnName = B70DE1D0-9908-4AE3-BE34-5573E5B09F14;

この例には、SELECTおよびUPDATE文が含まれています。SELECTは1行に示されています。UPDATE文に示すように、文を複数の行に分割できます。

cqlshで「help」と入力すると、閲覧できるヘルプ・トピックがすべて表示されます。「help name」と入力すると、nameコマンドの詳細が表示されます。たとえば、help CAPTUREhelp ALTER_KEYSPACEのように入力します。

大文字と小文字

キースペース、カラム、テーブルの名前は、二重引用符で囲まない限り大文字と小文字が区別されません。

CQLで作成した識別子は、二重引用符で囲まない限り大文字と小文字が区別されません。これらのオブジェクトの名前を大文字で入力すると、データベースには小文字で格納されます。二重引用符を使用すると、大文字と小文字が区別されるようになります。例を次に示します。

CREATE TABLE test (
  Foo int PRIMARY KEY,
  "Bar" int
);

以下の表に、testテーブルから結果が返されるクエリーと返されないクエリーの一部を示します。

1. 有効なクエリーと無効なクエリー
有効なクエリー 無効なクエリー
SELECT foo FROM ... SELECT "Foo" FROM . ..
SELECT Foo FROM ... SELECT "BAR" FROM . ..
SELECT FOO FROM ... SELECT bar FROM ...
"Bar" FROM ... SELECT Bar FROM ...
SELECT "foo" FROM . .. SELECT "bar" FROM . ..

SELECT "foo" FROM ...は、データベースがfooを小文字で格納するので有効です。

レガシー・テーブルを使用する場合は、以前のCQLバージョンでの大文字と小文字の区別の規則が適用されます。

CQLキーワードでは、大文字と小文字が区別されません。たとえば、SELECTselectキーワードは同じになります。このドキュメントでは、キーワードを大文字で示しています。

文字をエスケープするには、「文字のエスケープ」を参照してください。

名前に使用できる文字

キースペースとテーブルの名前には、英数字とアンダースコアのみを使用できます。その他の名前には、どの文字でも使用できます。

キースペースとテーブルの名前には、英数字とアンダースコアのみを使用できます。その他の名前には、どの文字でも使用できます(COLUMN、FUNCTION、AGGREGATE、TYPEなど)。

ピリオド(.)やハイフン(-)などの特殊文字を含む名前を指定するには、名前を二重引用符で囲みます。

2. 有効なクエリーと無効なクエリー
有効な作成 無効な作成
CREATE TABLE foo ... CREATE TABLE foo!$% ...
CREATE TABLE foo_bar ... CREATE TABLE foo[]"90 ...
CREATE TABLE foo ("what#*&" text, ...) CREATE TABLE foo (what#*& text, ...)
ALTER TABLE foo5 ... ALTER TABLE "foo5$$"...
CREATE FUNCTION "foo5$$$^%" ... CREATE FUNCTION foo5$$...
CREATE AGGREGATE "foo5!@#" ... CREATE AGGREGATE foo5$$
CREATE TYPE foo5 ("bar#"9 text, ... CREATE TYPE foo5 (bar#9 text ...

キースペース修飾子

複数のキースペースの追跡を簡略化するには、USE文の代わりにキースペース修飾子を使用します。

キースペースを選択するためにUSE文を発行することは不便な場合があります。接続をプールするには、複数のキースペースの管理が必要になります。複数のキースペースの追跡を簡略化するには、USE文の代わりにキースペース修飾子を使用します。以下の文でキースペース修飾子(ドット表記)を使用してキースペースを指定できます。

手順

テーブルを含むキースペースにない場合にテーブルを指定するには、キースペースの名前に続き、ピリオド、テーブル名の順に指定します。次の例は、cyclingがキースペースで、race_winnersがテーブル名であるcycling.race_winnersを示しています。
INSERT INTO cycling.race_winners ( race_name, race_position, cyclist_name ) VALUES (
  'National Championships South Africa WJ-ITT (CN)', 
  1, 
  {firstname:'Frances',lastname:'DU TOUT'}
);

文字のエスケープ

CQLでの単一引用符と二重引用符を使用してエスケープします。

CQLでは、CQLが解析できない文字が含まれているカラム名を二重引用符で囲む必要があります。

日付、IPアドレス、および文字列は単一引用符で囲む必要があります。文字列リテラルで単一引用符自体を使用するには、単一引用符をもう1つ続けてエスケープしてください。
INSERT INTO cycling.calendar (race_id, race_start_date, race_end_date, race_name) VALUES 
  (201, '2015-02-18', '2015-02-22', 'Women''s Tour of New Zealand');

ドル記号引用符で囲まれた文字列を代わりに使用することもできます。ドル記号引用符で囲まれた文字列定数は、複雑な引用が必要な場合に、関数の作成、データの挿入、およびデータの選択を行うために使用できます。二重ドル記号を使用して、目的の文字列を囲みます。

INSERT INTO cycling.calendar (race_id, race_start_date, race_end_date, race_name) VALUES 
  (201, '2015-02-18', '2015-02-22', $$Women's Tour of New Zealand$$);

有効なリテラル

有効なリテラルの値と定義。

有効なリテラルは以下の種類の値で構成されます。

  • BLOB

    0[xX](hex)+で定義される16進数です

  • boolean

    trueまたはfalseで、大文字/小文字は区別されず、引用符で囲まれていません

  • 数値定数

    数値定数は、整数0~9およびマイナス記号(-)のプレフィックスで構成されます。数値定数は浮動小数点型にもなります。浮動小数点型は、1つまたは複数の10進数の桁、その後に小数点(.)、さらに1つまたは複数の10進数の桁が続きます。任意指定のプラス記号(+)はありません。.42や42のような表記は使用できません。小数点の前後に先頭または末尾の0を使用することができます。たとえば、0.42や42.0などです。浮動小数点型定数はE表記で表され、以下の正規表現の文字から成ります。

    '-'?[0-9]+('.'[0-9]*)?([eE][+-]?[0-9+])?

    NaNおよび無限大は浮動小数点型です。

  • 識別子

    テーブル、カラム、型、およびその他のオブジェクトの名前は識別子です。キースペースとテーブルの名前はシステム・ファイル名に使用されるため、英字または数字で始まり、英数字とアンダースコアのみを使用する必要があります。カラムやユーザー定義関数名など、その他の識別子には、どの文字でも使用できます。特殊文字を含む識別子を指定するには、名前を引用符で囲みます。

  • 整数

    任意指定のマイナス記号(-)の後に、1つまたは複数の数字が続きます。

  • 文字列リテラル

    単一引用符で囲まれた文字群。文字列リテラルで単一引用符自体を使用するには、単一引用符をもう1つ続けてエスケープしてください。たとえば、dogの所有格を表すには、''を使用してdog''sとします。

  • uuid

    32桁の16進数で、0~9またはa~fを使用し、大文字と小文字は区別されず、8番目、12番目、16番目、20番目の数字がダッシュ(-)で区切られてます。例を次に示します。01234567-0123-0123-0123-0123456789ab

  • timeuuid

    00:00:00.00 UTC(60ビット)から100ナノ秒単位で間隔を取る時間、重複防止のためのクロック・シーケンス番号(14ビット)、およびIEEE 801 MACアドレス(48ビット)を使用して、一意識別子を生成します。例:d2177dd0-eaa2-11de-a572-001b779c76e3

  • 空白文字

    用語を区切ったり文字列リテラル内で使用されたりしますが、それ以外の場合、CQLは空白文字を無視します。

指数表記

DataStax Enterpriseは、指数表記をサポートしています。

DataStax Enterpriseは、指数表記をサポートしています。この例は、cqlshコマンドからの出力内の指数表記を示しています。
CREATE TABLE test(
  id varchar PRIMARY KEY,
  value_double double,
  value_float float
);

INSERT INTO test (id, value_float, value_double)
  VALUES ('test1', -2.6034345E+38, -2.6034345E+38);

SELECT * FROM test;

 id    | value_double | value_float
-------+--------------+-------------
 test1 |  -2.6034e+38 | -2.6034e+38

コードのコメント

コメントをCQLコードに追加します。

CQLコードにコメントを含めるには、以下の表記を使用します。
  • 単一行または行末で、テキストの前に二重ハイフン(--)を含めると、その行の残りの文字がコメントアウトされます。
    select * from cycling.route; -- End of line comment
  • 単一行または行末で、テキストの前に二重ハイフン(//)を含めると、その行の残りの文字がコメントアウトされます。
    select * from cycling.route; // End of line comment
  • コメント・ブロックを指定するには、コメントの先頭にスラッシュとアスタリスク(*/)を含め、コメントの末尾にアスタリスクとスラッシュ(*/)を含めます。
    /* This is the first line of 
       of a comment that spans multiple
      lines */
    select * from cycling.route;

キーワード

予約済みキーワードと予約されていないキーワードの一覧。

予約済みのキーワードを、キースペース、テーブル、カラム、関数、またはユーザー定義型の名前の識別子として使用するには、キーワードを二重引用符で囲みます。予約されていないキーワードは所定の文脈においては特定の意味を持ちますが、その文脈の外では識別子として使用することができます。

予約済みキーワード

予約キーワードをCQLの識別子として使用するには、キーワードを二重引用符で囲みます。例を次に示します。
CREATE TABLE test."add" (a int PRIMARY KEY);
予約済みキーワードのリスト:
  • ADD
  • ALLOW
  • ALTER
  • AND
  • APPLY
  • ASC
  • AUTHORIZE
  • BATCH
  • BEGIN
  • BY
  • COLUMNFAMILY
  • CREATE
  • DEFAULT
  • DELETE
  • DESC
  • DESCRIBE
  • DROP
  • ENTRIES
  • EXECUTE
  • FOR
  • FROM
  • FULL
  • GRANT
  • IF
  • IN
  • INDEX
  • INFINITY
  • INSERT
  • INTO
  • IS
  • KEY
  • LANGUAGE
  • MATERIALIZED
  • MBEAN
  • MBEANS
  • MODIFY
  • NAN
  • NORECURSIVE
  • NOT
  • NULL
  • OF
  • ON
  • OR
  • ORDER
  • PRIMARY
  • RENAME
  • REPLACE
  • RESTRICT
  • REVOKE
  • SCHEMA
  • SELECT
  • SET
  • TABLE
  • TO
  • TOKEN
  • TRUNCATE
  • UNLOGGED
  • UNRESTRICT
  • UNSET
  • UPDATE
  • USE
  • USING
  • VIEW
  • WHERE
  • WITH

予約されていないキーワード

予約されていないキーワードは所定の文脈においては特定の意味を持ちますが、その文脈の外では識別子として使用することができます。

予約されていないキーワードのリスト:
  • AGGREGATE
  • ALL
  • ANY
  • AS
  • ASCII
  • BIGINT
  • BLOB
  • BOOLEAN
  • CALLED
  • CAST
  • CLUSTERING
  • COMPACT
  • CONTAINS
  • COUNT
  • COUNTER
  • CUSTOM
  • DATE
  • DECIMAL
  • DETERMINISTIC
  • DISTINCT
  • DOUBLE
  • DURATION
  • EXISTS
  • FILTERING
  • FINALFUNC
  • FLOAT
  • FROZEN
  • FUNCTION
  • FUNCTIONS
  • GROUP
  • INET
  • INITCOND
  • INPUT
  • INT
  • JSON
  • KEYS
  • KEYSPACE
  • KEYSPACES
  • LIKE
  • LIMIT
  • LIST
  • LOGIN
  • MAP
  • MONOTONIC
  • NOLOGIN
  • NOSUPERUSER
  • OPTIONS
  • PARTITION
  • PASSWORD
  • PER
  • PERMISSION
  • PERMISSIONS
  • RESOURCE
  • RETURNS
  • ROLE
  • ROLES
  • SFUNC
  • SMALLINT
  • STATIC
  • STORAGE
  • STYPE
  • SUBMISSION
  • SUPERUSER
  • TEXT
  • TIME
  • TIMESTAMP
  • TIMEUUID
  • TINYINT
  • TRIGGER
  • TTL
  • TUPLE
  • TYPE
  • USER
  • USERS
  • UUID
  • VALUES
  • VARCHAR
  • VARINT
  • WORKPOOL
  • WRITETIME

制限事項

CQLの上限。

以下の上限を確認してください。
  • パーティション内のセル:~20億(231)、1つのカラム値のサイズ:2 GB(1 MBを推奨)
  • クラスタリング・カラム値の長さ:65535(216-1)
  • キー長:65535(216-1)
  • テーブル/CF名の長さ:48文字
  • キースペース名の長さ:48文字
  • クエリー内のクエリー・パラメーター:65535(216-1)
  • バッチ内の文:65535(216-1)
  • タプル内のフィールド:32768(215)(2~10などの少数のフィールドを推奨)
  • コレクション(リスト):コレクションの制限:~20億(231)、値のサイズ:65535(216-1)
  • コレクション(セット):コレクションの制限:~20億(231)、値のサイズ:65535(216-1)
  • コレクション(マップ):コレクションの制限:キーの数:65535(216-1)、値のサイズ:65535(216-1)
  • BLOBのサイズ:2 GB(1 MB未満を推奨)
注: コレクションに指定されている制限は、frozen以外のコレクションに関するものです。