CQLネイティブ関数

1行のデータの値を処理して新しい値を作成するスカラー関数について説明します。

CQLでは、1つのカラム値を新しい値に変換するいくつかの関数がサポートされています。

ヒント: さらに、ユーザーは関数集計を定義できます。

ネイティブ・データベース関数は次のとおりです。

CAST
selectorが返したデータをネイティブのCQLデータ型に変換します。
CAST( selector AS to_type )
キャストは完全にJavaセマンティクスに基づいています。基になる型の詳細については、CQL型のJava派生元を参照してください。SELECT文でのみ使用します。
注: カラムの独自のデータ型へのキャストを自動的に無視します。
selectorのカラム型 出力データ型(to_type)
ascii text、varchar
bigint

tinyint、smallint、int、varint、float、double、decimal、text、varchar

boolean text、varchar
counter tinyint、smallint、int、bigint、float、double、decimal、varint、text、varchar
date timestamp
decimal tinyint、smallint、int、bigint、float、double、varint、text、varchar
double tinyint、smallint、int、bigint、float、decimal、varint、text、varchar
float tinyint、smallint、int、bigint、double、decimal、varint、text、varchar
inet text、varchar
int tinyint、smallint、bigint、float、double、decimal、varint、text、varchar
smallint tinyint、int、bigint、float、double、decimal、varint、text、varchar
time text、varchar
timestamp date、text、varchar
timeuuid timestamp、date、text、varchar
tinyint tinyint、smallint、int、bigint、float、double、decimal、varint、text、varchar
uuid text、varchar
varint tinyint、smallint、int、bigint、float、double、decimal、text、varchar
CQLのほとんどの型はJavaの型から派生しており、Javaプログラマーには明白です。しかし、以下の型の派生元は、必ずしも明白ではありません。
表 1. CQL型のJava派生元
CQL型 Java型
decimal java.math.BigDecimal
float java.lang.Float
double java.lang.Double
varint java.math.BigInteger
BLOBASto_type
ターゲット・カラムまたはリテラル(文字列を単一引用符で囲む)をBLOBから指定したtypeに変換します。
blobAstype(column_name | literal)
  • SELECT文の結果にBLOBカラムを別のデータ型として表示します。
  • ストレージのINSERTUPDATEの生のBLOBデータを別の型に変換します。
typeASBLOB
ターゲット・カラムまたはリテラル(文字列を単一引用符で囲む)を指定したtypeからBLOBに変換します。ここで、変換元の型は有効なCQLデータ型に対応しています。
typeAsBlob(column_name | literal )
次の種類のCQL文で使用します。
  • SELECTselectors。別のCQL型にBLOBとして格納されている値を返します。
  • INSERTUPDATE。格納するために別のCQLデータ型をBLOBに変換します。
TOKEN
ターゲット・カラム内の値のトークンを計算します。
TOKEN(column_name)
token関数の正確なシグネチャーは、関連するテーブルと、クラスターが使用するパーティショナーによって異なります。
  • Murmur3Partitionerの型はbigint
  • RandomPartitionerの型はvarint
  • ByteOrderedPartitionerの型はBLOB
次のCQL要求で使用します。
  • SELECT selector句。ターゲット・カラム内の値をトークンとして返します。データを手動でページングしたり、1行または複数の行のセットの物理的な場所を特定する場合に役立ちます。
  • SELECT where句。指定されたトークン範囲内のレコードのセットを返します。ALLOW FILTERINGを使用せずにwhere句で比較できます(より大きいとより小さい)。分析用の複数のSparkクライアントなど、クライアント間でクエリーのワークロードを分割する場合に役立ちます。
注: UPDATE where句でトークン関数は使用できません。
MINTIMEUUID
指定した日付('yyyy-mm-dd')またはタイムスタンプ('yyyy-mm-dd [hh:mm:ss[.fff][+/-NNNN]]')形式文字列から、最小の仮のtimeuuidを計算します。
minTimeuuid( date_string | timestamp_string )

SELECT文のWHERE句を使用して、timeuuidカラムから日付範囲内の行を返します。たとえば、WHERE id >= minTimeuuid('2017-05-01')のようになります。

MAXTIMEUUID
指定した日付('yyyy-mm-dd')またはタイムスタンプ('yyyy-mm-dd [hh:mm:ss[.fff][+/-NNNN]]')形式文字列から、最大の仮のtimeuuidを計算します。
MAXTIMEUUID( date_string | timestamp_string )

SELECT文のWHERE句を使用して、timeuuidカラムから日付範囲内の行を返します。たとえば、WHERE id <= maxTimeuuid('2017-05-01')のようになります。

NOW
引数はなく、文の実行時にコーディネーター・ノードに新しい一意のtimeuuidを生成します。
NOW()

INSERT文またはUPDATE文で、新しいtimeuuid値を生成するために使用します。

WHERE句でも使用できますが、now()は一意であることが保証されるため、指定されたSELECT文またはUPDATE文に一致する値はありません。

制約事項: UPDATE文のSET句を使用してPRIMARY KEYフィールドを変更することはできません。したがって、新しいtimeuuidはターゲット・フィールドがPRIMARY KEYフィールドの一部でない場合にのみ設定できます。
TODATE
timestamp値をミリ秒数から日数(エポック以来)に変換し、timeuuidの場合は、タイムスタンプを抽出してエポック以来の日数に変換します。
TODATE(column_name)
注: 日時は文字列形式で表示されますが、整数として格納され、比較されます。
TOTIMESTAMP
date値をエポック以来の日数からミリ秒数に変換し、timeuuidの場合はタイムスタンプを抽出します。
TOTIMESTAMP(column_name)
注: 日付の時刻(hh:mm:ss.ffffff+NNNN)は結果のタイムスタンプ内ではすべて0に設定されます。
TOUNIXTIMESTAMP
timeuuidtimestampまたはdateカラムをエポック以来の秒数に変換します。
TOUNIXTIMESTAMP(column_name)
UUID
パラメーターはなく、ランダムなタイム4のUUIDを生成します。
UUID()
INSERTおよびUPDATEの値を生成するために使用します。
制約事項: UPDATE文のSET句を使用してPRIMARY KEYフィールドを変更することはできません。したがって、新しいUUIDはターゲット・フィールドがPRIMARY KEYフィールドの一部でない場合にのみ設定できます。
WRITETIME
データが書き込まれたunixタイムスタンプ(エポック以来の秒数)を示します。
WRITETIME(column_name)
非パーティション・キー・カラムに対してSELECT文のselectors句でのみ使用します。
TTL
フィールド内の値が期限切れになり、データが自動的に削除されるまでの秒数をカウントダウンします。Nullは、カラムのTTLが設定されていない(またはカウントダウンが終了した)ことを示します。
TTL(column_name)
非パーティション・キー・カラムに対してSELECT文のselectors句でのみ使用します。

廃止予定の関数

次の関数は、後方互換性を維持するためにのみサポートされています。

DATEOF
TOTIMESTAMP(timeuuid)と同様です。
UNIXTIMESTAMPOF
TOUNIXTIMESTAMP(timeuuid)と同様です。