CQLコマンド構文について

CQL文を記述する上での基本的な規則と制限事項について説明します。

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

たとえば、以下は有効なCQL構文です。

SELECT * FROM MyTable;

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

ここでは、2つのCQL文が続いています。1つの文を複数の行に分割すると便利な場合もありますが、この例では1つの行が1つの文を示しています。

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 ...
SELECT "Bar" FROM ... SELECT Bar FROM ...
SELECT "foo" FROM ... SELECT "bar" FROM ...

SELECT "foo" FROM ...は、内部でデータベースがfooを小文字で格納するので有効です。二重引用符文字は、二重引用符のエスケープ文字として使用することができます。

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

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

名前に使用できる文字

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

キースペースとテーブルの名前には、英数字とアンダースコアのみを使用できます。その他の名前には、どの文字でも使用できます(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文の代わりにキースペース修飾子を使用します。以下の文でキースペース修飾子を使用してキースペースを指定できます。
  • ALTER TABLE
  • CREATE TABLE
  • DELETE
  • INSERT
  • SELECT
  • TRUNCATE
  • UPDATE

手順

テーブルを含むキースペースではない場合にテーブルを指定するには、キースペースの名前に続き、ピリオド、テーブル名の順に指定します。たとえば、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;

キーワード

キーワードと、そのキーワードが予約されているかどうかを示した表。

この表には、キーワードとそのキーワードが予約されているかどうかを示します。予約済みのキーワードは、二重引用符で囲まない限り、識別子として使用することはできません。予約されていないキーワードは所定の文脈においては特定の意味を持ちますが、その文脈の外では識別子として使用することができます。

表 3. キーワード
キーワード 予約済み
ADD 予約
AGGREGATE 予約
ALL 未予約
ALLOW 予約
ALTER 予約
AND 予約
ANY 予約
APPLY 予約
AS 未予約
ASC 予約
ASCII 未予約
AUTHORIZE 予約
BATCH 予約
BEGIN 予約
BIGINT 未予約
BLOB 未予約
BOOLEAN 未予約
BY 予約
CLUSTERING 未予約
COLUMNFAMILY 予約
COMPACT 未予約
CONSISTENCY 未予約
COUNT 未予約
COUNTER 未予約
CREATE 予約
CUSTOM 未予約
DECIMAL 未予約
DELETE 予約
DESC 予約
DISTINCT 未予約
DOUBLE 未予約
DROP 予約
EACH_QUORUM 予約
ENTRIES 予約
EXISTS 未予約
FILTERING 未予約
FLOAT 未予約
FROM 予約
FROZEN 未予約
FULL 予約
GRANT 予約
IF 予約
IN 予約
INDEX 予約
INET 予約
INFINITY 予約
INSERT 予約
INT 未予約
INTO 予約
KEY 未予約
KEYSPACE 予約
KEYSPACES 予約
LEVEL 未予約
LIMIT 予約
LIST 未予約
LOCAL_ONE 予約
LOCAL_QUORUM 予約
MAP 未予約
MATERIALIZED 予約
MODIFY 予約
NAN 予約
NORECURSIVE 予約
NOSUPERUSER 未予約
NOT 予約
OF 予約
ON 予約
ONE 予約
ORDER 予約
PARTITION 予約
PASSWORD 予約
PER 予約
PERMISSION 未予約
PERMISSIONS 未予約
PRIMARY 予約
QUORUM 予約
RENAME 予約
REVOKE 予約
SCHEMA 予約
SELECT 予約
SET 予約
STATIC 未予約
STORAGE 未予約
SUPERUSER 未予約
TABLE 予約
TEXT 未予約
TIME 予約
TIMESTAMP 未予約
TIMEUUID 未予約
THREE 予約
TO 予約
TOKEN 予約
TRUNCATE 予約
TTL 未予約
TUPLE 未予約
TWO 予約
TYPE 未予約
UNLOGGED 予約
UPDATE 予約
USE 予約
USER 未予約
USERS 未予約
USING 予約
UUID 未予約
VALUES 未予約
VARCHAR 未予約
VARINT 未予約
VIEW 予約
WHERE 予約
WITH 予約
WRITETIME 未予約

制限事項

CQLの上限。

以下の上限を確認してください。

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