CQLネイティブ関数

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

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

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

スカラー関数

DataStax Enterpriseデータベースは以下のネイティブ関数をサポートしています。
cast
selectorが返したデータをネイティブのCQLデータ型に変換します。
CAST( selector AS to_type )
キャストは完全にJavaセマンティクスに基づいています。基になる型の詳細については、CQL型のJava派生元を参照してください。
注: カラムの独自のデータ型へのキャストを自動的に無視します。
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
token
ターゲット・カラム内の値のトークンを計算します。
TOKEN(column_name)
token関数の正確なシグネチャーは、関連するテーブルと、クラスターが使用するパーティショナーによって異なります。
  • Murmur3Partitionerの型はbigint
  • RandomPartitionerの型はvarint
  • ByteOrderedPartitionerの型はBLOB
次のCQL要求で使用します。
  • SELECT selectors句。ターゲット・カラム内の値をトークンとして返します。データを手動でページングしたり、1行または複数の行のセットの物理的な場所を特定する場合に役立ちます。
  • SELECT where句。指定されたトークン範囲内のレコードのセットを返します。ALLOW FILTERINGを使用せずにwhere句で比較できます(より大きいとより小さい)。分析用の複数のSparkクライアントなど、クライアント間でクエリーのワークロードを分割する場合に役立ちます。
注: UPDATE句でトークン関数は使用できません。
ttl
フィールド内の値が期限切れになり、データが自動的に削除されるまでの秒数をカウントダウンします。Nullは、カラムのTTLが設定されていない(またはカウントダウンが終了した)ことを示します。
TTL(column_name)
非パーティション・キー・カラムに対してSELECT文のselectors句でのみ使用します。
警告: 2038年問題のため、データベース・ストレージ・エンジンでは、January 19 2038 03:14:07 UTCのみをエンコードできます。TTL日付オーバーフローポリシーによって、有効期限が最長の日付よりも後のタイムスタンプの要求を拒否するか、受け入れるかどうかが決定します。-Dcassandra.expiration_date_overflow_policyを参照してください。
uuid
パラメーターはなく、ランダムなタイム4のUUIDを生成します。
UUID()
INSERTおよびUPDATEの値を生成するために使用します。
制約事項: UPDATE文のSET句を使用してPRIMARY KEYフィールドを変更することはできません。したがって、新しいUUIDはターゲット・フィールドがPRIMARY KEYフィールドの一部でない場合にのみ設定できます。
writeTime
データが書き込まれたunixタイムスタンプ(エポック以来の秒数)を示します。
WRITETIME(column_name)
非パーティション・キー・カラムに対してSELECT文のselectors句でのみ使用します。

日時関数

現在の日時

コーディネーター・ノードの(現在)のシステム時刻をCQL型形式で返します。このような関数には引数がありません。

currentDate
システム時刻をdate形式で返します。
currentTime
システム時刻をtime形式で返します。
currentTimestamp
システム時刻をtimestamp形式で返します。
currentTimeUuid
システム時刻をtimeuuid形式で返します。
制約事項:
  • UPDATE文のSET句を使用してPRIMARY KEYフィールドを変更することはできません。したがって、新しいtimeuuidはターゲット・フィールドがPRIMARY KEYフィールドの一部でない場合にのみ設定できます。
  • INSERT文またはUPDATE文で、新しいtimeuuid値を生成するために使用します。
  • WHERE句でも使用できますが、now()は一意であることが保証されるため、指定されたSELECT文またはUPDATE文に一致する値はありません。
floor
日付と時刻を最も近い値に丸めます。
  • timestamp
    (timestamp, duration [, start_timestamp])
    start_timestampが使用されない場合は、開始タイムスタンプはJanuary 1, 1970 00:00:00.000 GMTになります。
  • timeuuid
    floor(timeuuid, duration [, start_timestamp])
    start_timestampが使用されない場合は、開始タイムスタンプはJanuary 1, 1970 00:00:00.000 GMTになります。
  • date
    floor(date, duration [, start_date])
    start_dateが使用されない場合は、開始日はJanuary 1, 1970 GMTになります。
  • time
    floor(time, duration[, start_time])
    start_timeが使用されない場合は、開始時刻は00:00:00[000000000]になります。
以下のように時間構文を使用します。
  • N y - 年数
  • N mo - 月数
  • N w - 週数
  • N d - 日数
  • N h - 時間
  • N m - 分数
  • N s - 秒数
  • N ms - ミリ秒数
  • N usまたはµs - マイクロ秒数
  • N ns - ナノ秒数
now
currentTimeUuidの別名。

TimeUuidの計算

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')のようになります。

日付と時刻の変換

定義済み引数のデータをtimestampdate、およびtimeuuidから別の型に変換します。

toDate
timestamp値をミリ秒数から日数(エポック以来)に変換し、timeuuidの場合は、タイムスタンプを抽出してエポック以来の日数に変換します。
TODATE(column_name)
注: 日時は文字列形式で表示されますが、整数として格納され、比較されます。
toTimestamp
date値をエポック以来の日数からミリ秒数に変換し、timeuuidの場合はタイムスタンプを抽出します。
TOTIMESTAMP(column_name)
注: 日付の時刻(hh:mm:ss.ffffff+NNNN)は結果のタイムスタンプ内ではすべて0に設定されます。
toUnixTimestamp
timeuuidtimestampまたはdateカラムをエポック以来の秒数に変換します。
TOUNIXTIMESTAMP(column_name)

Blob変換

CQLネイティブ型をバイナリー(blob)に変換します。
blobAs
ターゲット・カラムまたはリテラル(文字列を単一引用符で囲む)をBLOBから指定したtypeに変換します。
blobAstype(column_name | literal)
  • SELECT 文の結果にBLOBカラムを別のデータ型として表示します。
  • ストレージのINSERTUPDATEの生のBLOBデータを別の型に変換します。
AsBlob
ターゲット・カラムまたはリテラル(文字列を単一引用符で囲む)を指定したtypeからBLOBに変換します。ここで、変換元の型は有効なCQLデータ型に対応しています。
typeAsBlob(column_name | literal )
次の種類のCQL文で使用します。
  • SELECT selectors。別のCQL型にBLOBとして格納されている値を返します。
  • INSERTUPDATE。格納するために別のCQLデータ型をBLOBに変換します。

廃止予定の関数

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

dateOf
toTimestampに似ています。
unixTimestampOf
toUnixTimestampに似ています