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 CAPTURE、help
ALTER_KEYSPACEのように入力します。
大文字と小文字
キースペース、カラム、テーブルの名前は、二重引用符で囲まない限り大文字と小文字が区別されません。
CQLで作成した識別子は、二重引用符で囲まない限り大文字と小文字が区別されません。これらのオブジェクトの名前を大文字で入力すると、データベースには小文字で格納されます。二重引用符を使用すると、大文字と小文字が区別されるようになります。例:
CREATE TABLE test (
Foo int PRIMARY KEY,
"Bar" int
);
以下の表に、testテーブルから結果を取得できるクエリーと取得できないクエリーの一部を示します。
| 有効なクエリー | 無効なクエリー |
|---|---|
| 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など)。
ピリオド(.)やハイフン(-)などの特殊文字を含む名前を指定するには、名前を二重引用符で囲みます。
| 有効な作成 | 無効な作成 |
|---|---|
| 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文の代わりにキースペース修飾子を使用します。
- ALTER TABLE
- CREATE TABLE
- DELETE
- INSERT
- SELECT
- TRUNCATE
- UPDATE
手順
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が解析できない文字が含まれているカラム名を二重引用符で囲む必要があります。
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は、指数表記をサポートしています。
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コードに追加します。
- 単一行または行末で、テキストの前に二重ハイフンを含めると、その行の残りの文字がコメントアウトされます。
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;
キーワード
キーワードと、そのキーワードが予約されているかどうかを示した表。
この表には、キーワードとそのキーワードが予約されているかどうかを示します。予約済みのキーワードは、二重引用符で囲まない限り、識別子として使用することはできません。予約されていないキーワードは所定の文脈においては特定の意味を持ちますが、その文脈の外では識別子として使用することができます。
| キーワード | 予約済み |
|---|---|
| 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未満を推奨)
