Cassandra ドキュメント

バージョン

プレリリースバージョンのドキュメントを表示しています。

関数

CQL は、2 つの主要なカテゴリの関数をサポートしています。

  • スカラー関数は、いくつかの値を受け取り、出力を生成します。

  • 集計関数は、SELECT文から得られた複数の行を集計します。

どちらの場合も、CQL は多数のネイティブな「ハードコーディングされた」関数と、新しいユーザー定義関数を生成する機能を提供します。

デフォルトでは、セキュリティ上の懸念から、ユーザー定義関数の使用は無効になっています(有効にしても、ユーザー定義関数の実行はサンドボックス化され、「不正な」関数による悪質な行為は許可されませんが、完璧なサンドボックスはないため、ユーザー定義関数の使用はオプトインです)。それらを有効にするには、cassandra.yamluser_defined_functions_enabledを参照してください。

関数は、その名前で識別されます。

function_name ::= [ keyspace_name'.' ] name

スカラー関数

ネイティブ関数

キャスト

cast関数は、ネイティブデータ型を別の型に変換するために使用できます。

次の表は、cast関数がサポートする変換を示しています。Cassandra は、データ型をそれ自身のデータ型に変換するキャストを黙って無視します。

変換元 変換先

ascii

textvarchar

bigint

tinyintsmallintintfloatdoubledecimalvarinttextvarchar

boolean

textvarchar

counter

tinyintsmallintintbigintfloatdoubledecimalvarinttextvarchar

date

timestamp

decimal

tinyintsmallintintbigintfloatdoublevarinttextvarchar

double

tinyintsmallintintbigintfloatdecimalvarinttextvarchar

float

tinyintsmallintintbigintdoubledecimalvarinttextvarchar

inet

textvarchar

int

tinyintsmallintbigintfloatdoubledecimalvarinttextvarchar

smallint

tinyintintbigintfloatdoubledecimalvarinttextvarchar

time

textvarchar

timestamp

datetextvarchar

timeuuid

timestampdatetextvarchar

tinyint

tinyintsmallintintbigintfloatdoubledecimalvarinttextvarchar

uuid

textvarchar

varint

tinyintsmallintintbigintfloatdoubledecimaltextvarchar

変換は、Java のセマンティクスに厳密に従います。たとえば、double 値の 1 は、text 値 '1.0' に変換されます。たとえば

SELECT avg(cast(count as double)) FROM myTable

トークン

token関数は、指定されたパーティションキーのトークンを計算します。token関数の正確なシグネチャは、対象のテーブルとクラスタで使用されるパーティショナーによって異なります。

tokenの引数の型は、パーティションキーの列の型によって異なります。戻り値の型は、定義されたパーティショナーによって異なります。

パーティショナー 戻り値の型

Murmur3Partitioner

bigint

RandomPartitioner

varint

ByteOrderedPartitioner

blob

たとえば、次のテーブルを考えてみます。

CREATE TABLE users (
    userid text PRIMARY KEY,
    username text,
);

このテーブルは、デフォルトのMurmur3Partitionerを使用しています。パーティションキーがtext型のuseridであるため、token関数は単一の引数textを使用します。戻り値の型はbigintになります。

Uuid

uuid関数はパラメータを取らず、INSERTまたはUPDATE文で使用できるランダムなタイプ4のuuidを生成します。

Timeuuid関数

now

now関数は引数を取らず、コーディネータノードで、関数が呼び出された時点の新しい一意のtimeuuidを生成します。このメソッドは挿入には便利ですが、WHERE句ではほとんど意味がありません。

たとえば、次の形式のクエリは

SELECT * FROM myTable WHERE t = now();

設計上、結果は返されません。これは、now()によって返される値が一意であることが保証されているためです。

current_timeuuidnowのエイリアスです。

min_timeuuidmax_timeuuid

min_timeuuid関数は、タイムスタンプまたは日付文字列のいずれかのタイムスタンプ値tを取ります。タイムスタンプtの*最小*の可能なtimeuuidに対応する*偽の*timeuuidを返します。max_timeuuidは同様に動作しますが、*最大*の可能なtimeuuidを返します。

たとえば

SELECT * FROM myTable
 WHERE t > max_timeuuid('2013-01-01 00:05+0000')
   AND t < min_timeuuid('2013-02-02 10:00+0000');

は、timeuuidt'2013-01-01 00:05+0000'より後で'2013-02-02 10:00+0000'より前のすべての行を選択します。句t >= maxTimeuuid('2013-01-01 00:05+0000')は、'2013-01-01 00:05+0000'で生成されたtimeuuidを*選択しません*。本質的にt > maxTimeuuid('2013-01-01 00:05+0000')と同等です。

min_timeuuidmax_timeuuidによって生成された値は、IETF RFC 4122で指定された時間ベースのUUID生成プロセスを尊重しないため、*偽の*UUIDと呼ばれます。特に、これらの2つのメソッドによって返される値は一意ではありません。したがって、データの重複を避けるために、これらのメソッドは**クエリ**のみに使用し、**挿入**には使用しないでください。

日付時刻関数

現在の日付時刻の取得

関数が呼び出された時点の日付時刻を取得するには、次の関数を使用できます。

関数名 出力型

current_timestamp

timestamp

current_date

date

current_time

time

current_timeuuid

timeUUID

たとえば、過去2日間のデータは次のように取得できます。

SELECT * FROM myTable WHERE date >= current_date() - 2d;
時間変換関数

timeuuidtimestamp、またはdateを別のnative型に変換するための関数が多数提供されています。

関数名 入力型 説明

to_date

timeuuid

timeuuid引数をdate型に変換します。

to_date

timestamp

timestamp引数をdate型に変換します。

to_timestamp

timeuuid

timeuuid引数をtimestamp型に変換します。

to_timestamp

date

date引数をtimestamp型に変換します。

to_unix_timestamp

timeuuid

timeuuid引数をbigIntの生の値に変換します。

to_unix_timestamp

timestamp

timestamp引数をbigIntの生の値に変換します。

to_unix_timestamp

date

date引数をbigIntの生の値に変換します。

Blob 変換関数

ネイティブ型をバイナリデータまたはblobに変換するための関数が多数提供されています。CQL でサポートされているすべてのについて、関数type_as_blobtype型の引数を取り、blobとして返します。逆に、関数blob_as_typeは64ビットのblob引数を取り、bigint値に変換します。たとえば、bigint_as_blob(3)0x0000000000000003を返し、blob_as_bigint(0x0000000000000003)3を返します。

数学関数

Cql は、次の数学関数を提供します。absexploglog10round。これらの関数の戻り値の型は、常に入力型と同じです。

関数名 説明

abs

入力の絶対値を返します。

exp

入力のべき乗にeを返します。

log

入力の自然対数を返します。

log10

入力の底10の対数を返します。

round

丸めモードHALF_UPを使用して、入力を最も近い整数に丸めます。

コレクション関数

コレクション列を操作するための多くの関数が用意されています。

関数名 入力型 説明

map_keys

map

map引数のキーを取得し、setとして返します。

map_values

map

map引数の値を取得し、listとして返します。

collection_count

mapset、またはlist

コレクション引数の要素数を取得します。

collection_min

setまたはlist

コレクション引数の最小要素を取得します。

collection_max

setまたはlist

コレクション引数の最大要素を取得します。

collection_sum

数値setまたはlist

コレクション引数の要素の合計を計算します。返される値は入力コレクション要素と同じ型なので、値の合計が型で表現できる最大値を超えると、データ型のオーバーフローのリスクがあります。

collection_avg

数値setまたはlist

コレクション引数の要素の平均を計算します。空のコレクションの平均はゼロを返します。返される値は入力コレクション要素と同じ型なので、丸めや切り捨てが含まれる可能性があります。例えば、collection_avg([1, 2])1.5ではなく1を返します。

データマスキング関数

機密データを含む列の実際のコンテンツを隠すことができる多くの関数が用意されています。

関数 説明

mask_null(value)

最初の引数をnull列に置き換えます。返される値は常に存在しない列であり、null値を表すnull以外の列ではありません。

mask_null('Alice')null

mask_null(123)null

mask_default(value)

その引数を、同じ型の任意の固定デフォルト値に置き換えます。テキスト値の場合は****、数値の場合はゼロ、ブール値の場合はfalseなどになります。

リスト、セット、マップなどの可変長多値型は、空のコレクションとしてマスクされます。

タプル、ユーザー定義型(UDT)、ベクトルなどの固定長多値型は、それぞれの値を値型のデフォルトマスキング値に置き換えることでマスクされます。

mask_default('Alice')'****'

mask_default(123)0

mask_default((list<int>) [1, 2, 3])[]

mask_default((vector<int, 3>) [1, 2, 3])[0, 0, 0]

mask_replace(value, replacement)

最初の引数を、2番目の引数の置換値に置き換えます。置換値は、置き換えられる値と同じ型である必要があります。

mask_replace('Alice', 'REDACTED')'REDACTED'

mask_replace(123, -1)-1

mask_inner(value, begin, end, [padding])

最初のtextvarchar、またはascii引数の複製を返し、先頭と末尾以外の各文字をパディング文字に置き換えます。2番目と3番目の引数は、公開されるプレフィックスとサフィックスのサイズです。オプションの4番目の引数はパディング文字で、デフォルトは\*です。

mask_inner('Alice', 1, 2)'Ace'

mask_inner('Alice', 1, null)'A'

mask_inner('Alice', null, 2)'*ce'

mask_inner('Alice', 2, 1, '#')'Al##e'

mask_outer(value, begin, end, [padding])

最初のtextvarchar、またはascii引数の複製を返し、先頭と末尾の文字をパディング文字に置き換えます。2番目と3番目の引数は、公開されるプレフィックスとサフィックスのサイズです。オプションの4番目の引数はパディング文字で、デフォルトは\*です。

mask_outer('Alice', 1, 2)'*li'

mask_outer('Alice', 1, null)'*lice'

mask_outer('Alice', null, 2)'Ali'

mask_outer('Alice', 2, 1, '#')'##ic#'

mask_hash(value, [algorithm])

最初の引数のハッシュを含むblobを返します。オプションの2番目の引数は、使用されるハッシュアルゴリズムで、利用可能なJavaセキュリティプロバイダーに従います。デフォルトのハッシュアルゴリズムはSHA-256です。

mask_hash('Alice')

mask_hash('Alice', 'SHA-512')

ベクトル類似度関数

浮動小数点ベクトル間の類似度スコアを取得できる多くの関数が用意されています。

関数 説明

similarity_cosine(vector, vector)

同じ次元の2つの浮動小数点ベクトル間のコサイン類似度スコアを計算します。

similarity_cosine([0.1, 0.2], null)null

similarity_cosine([0.1, 0.2], [0.1, 0.2])1

similarity_cosine([0.1, 0.2], [-0.1, -0.2])0

similarity_cosine([0.1, 0.2], [0.9, 0.8])0.964238

similarity_euclidean(vector, vector)

同じ次元の2つの浮動小数点ベクトル間のユークリッド距離を計算します。

similarity_euclidean([0.1, 0.2], null)null

similarity_euclidean([0.1, 0.2], [0.1, 0.2])1

similarity_euclidean([0.1, 0.2], [-0.1, -0.2])0.833333

similarity_euclidean([0.1, 0.2], [0.9, 0.8])0.5

similarity_dot_product(vector, vector)

同じ次元の2つの浮動小数点ベクトル間のドット積を計算します。

similarity_dot_product([0.1, 0.2], null)null

similarity_dot_product([0.1, 0.2], [0.1, 0.2])0.525

similarity_dot_product([0.1, 0.2], [-0.1, -0.2])0.475

similarity_dot_product([0.1, 0.2], [0.9, 0.8])0.625

ユーザー定義関数

ユーザー定義関数(UDF)は、Cassandraでユーザー提供のコードを実行します。デフォルトでは、CassandraはJavaで関数の定義をサポートしています。

UDFはCassandraスキーマの一部であり、クラスタ内のすべてのノードに自動的に伝播されます。UDFはオーバーロードできるので、異なる引数型の複数のUDFが同じ関数名を持つことができます。

Cassandra 4.1では、JavaScriptユーザー定義関数は非推奨になりました。Cassandra 5.0の準備として、その削除は既に進行中です。詳細については、CASSANDRA-17281、CASSANDRA-18252を参照してください。

たとえば

CREATE FUNCTION sample ( arg int ) ...;
CREATE FUNCTION sample ( arg text ) ...;

UDFは、選択されたプログラミング言語の通常のすべての問題の影響を受けます。したがって、実装は、ヌルポインタ例外、不正な引数、またはその他の潜在的な例外の原因に対して安全である必要があります。関数実行中の例外により、ステートメント全体が失敗します。UDFの使用に関する有効なクエリは、SELECTINSERTUPDATEステートメントです。

コレクション、タプル型、ユーザー定義型などの複雑な型は、UDFの有効な引数型および戻り値型です。タプル型とユーザー定義型は、DataStax Java Driver変換関数を使用します。タプル型とユーザー定義型の処理の詳細については、Java Driverのドキュメントを参照してください。

関数の引数は、リテラルまたは項にすることができます。プリペアドステートメントプレースホルダーも使用できます。

UDFソースコードを囲むには、二重ドル記号構文を使用することに注意してください。

たとえば

CREATE FUNCTION some_function ( arg int )
    RETURNS NULL ON NULL INPUT
    RETURNS int
    LANGUAGE java
    AS $$ return arg; $$;

SELECT some_function(column) FROM atable ...;
UPDATE atable SET col = some_function(?) ...;

CREATE TYPE custom_type (txt text, i int);
CREATE FUNCTION fct_using_udt ( udtarg frozen )
    RETURNS NULL ON NULL INPUT
    RETURNS text
    LANGUAGE java
    AS $$ return udtarg.getString("txt"); $$;

暗黙的に使用可能なudfContextフィールド(またはスクリプトUDFのバインディング)は、新しいUDTおよびタプル値を作成するために必要な機能を提供します。

CREATE TYPE custom_type (txt text, i int);
CREATE FUNCTION fct\_using\_udt ( somearg int )
    RETURNS NULL ON NULL INPUT
    RETURNS custom_type
    LANGUAGE java
    AS $$
        UDTValue udt = udfContext.newReturnUDTValue();
        udt.setString("txt", "some string");
        udt.setInt("i", 42);
        return udt;
    $$;

UDFContextインターフェースの定義は、Apache Cassandraのソースコードorg.apache.cassandra.cql3.functions.UDFContextにあります。

public interface UDFContext
{
    UDTValue newArgUDTValue(String argName);
    UDTValue newArgUDTValue(int argNum);
    UDTValue newReturnUDTValue();
    UDTValue newUDTValue(String udtName);
    TupleValue newArgTupleValue(String argName);
    TupleValue newArgTupleValue(int argNum);
    TupleValue newReturnTupleValue();
    TupleValue newTupleValue(String cqlDefinition);
}

Java UDFには、定義済みの一般的なインターフェースとクラスのインポートがいくつか既に含まれています。これらのインポートは、

import java.nio.ByteBuffer;
import java.util.List;
import java.util.Map;
import java.util.Set;
import org.apache.cassandra.cql3.functions.UDFContext;
import com.datastax.driver.core.TypeCodec;
import com.datastax.driver.core.TupleValue;
import com.datastax.driver.core.UDTValue;

これらの便利なインポートは、スクリプトUDFでは使用できないことに注意してください。

CREATE FUNCTIONステートメント

新しいユーザー定義関数の作成には、CREATE FUNCTIONステートメントを使用します。

create_function_statement::= CREATE [ OR REPLACE ] FUNCTION [ IF NOT EXISTS]
	function_name '(' arguments_declaration ')'
	[ CALLED | RETURNS NULL ] ON NULL INPUT
	RETURNS cql_type
	LANGUAGE identifier
	AS string arguments_declaration: identifier cql_type ( ',' identifier cql_type )*

たとえば

CREATE OR REPLACE FUNCTION somefunction(somearg int, anotherarg text, complexarg frozen<someUDT>, listarg list)
    RETURNS NULL ON NULL INPUT
    RETURNS text
    LANGUAGE java
    AS $$
        // some Java code
    $$;

CREATE FUNCTION IF NOT EXISTS akeyspace.fname(someArg int)
    CALLED ON NULL INPUT
    RETURNS text
    LANGUAGE java
    AS $$
        // some Java code
    $$;

オプションのOR REPLACEキーワードを使用したCREATE FUNCTIONは、関数を作成するか、同じシグネチャを持つ既存の関数を置き換えます。OR REPLACEを使用しないCREATE FUNCTIONは、同じシグネチャを持つ関数が既に存在する場合、失敗します。オプションのIF NOT EXISTSキーワードを使用すると、同じシグネチャを持つ別の関数が存在しない場合にのみ、関数が作成されます。OR REPLACEIF NOT EXISTSは同時に使用できません。

null入力値の動作は、各関数に対して定義する必要があります。

  • RETURNS NULL ON NULL INPUTは、入力引数のいずれかがnullの場合、関数は常にnullを返すことを宣言します。

  • CALLED ON NULL INPUTは、関数が常に実行されることを宣言します。

関数シグネチャ

シグネチャは、個々の関数を区別するために使用されます。シグネチャは、<keyspace>.<function_name>の完全修飾関数名と、すべての引数型の連結リストで構成されます。

キースペース名、関数名、引数型は、デフォルトの命名規則と大文字と小文字の区別規則に従うことに注意してください。

関数はキースペースに属します。キースペースを指定しない場合、現在のキースペースが使用されます。システムキースペースでは、ユーザー定義関数は許可されていません。

DROP FUNCTIONステートメント

関数の削除には、DROP FUNCTIONステートメントを使用します。

drop_function_statement::= DROP FUNCTION [ IF EXISTS ] function_name [ '(' arguments_signature ')' ]
arguments_signature::= cql_type ( ',' cql_type )*

たとえば

DROP FUNCTION myfunction;
DROP FUNCTION mykeyspace.afunction;
DROP FUNCTION afunction ( int );
DROP FUNCTION afunction ( text );

同じ名前だが異なるシグネチャを持つ複数のオーバーロードされた関数が存在する場合は、削除コマンドで関数の引数型であるarguments_signatureを指定する必要があります。オプションのIF EXISTSキーワードを使用したDROP FUNCTIONは、関数が存在する場合は削除しますが、存在しない場合はエラーをスローしません。

集約関数

集約関数は、一連の行で動作します。各行の値が入力され、集約された一連の行に対して単一の値が返されます。

normal列、スカラー関数UDTフィールド、writetime、またはttlを集約関数と共に選択する場合、それらに対して返される値は、クエリに一致する最初の行の値になります。

ネイティブ集約

カウント

count関数は、クエリによって返された行数をカウントするために使用できます。

たとえば

SELECT COUNT (*) FROM plays;
SELECT COUNT (1) FROM plays;

指定された列のnull以外の値をカウントすることもできます。

SELECT COUNT (scores) FROM plays;

最大値と最小値

max関数とmin関数は、指定された列のクエリによって返された最大値と最小値を計算します。

たとえば

SELECT MIN (players), MAX (players) FROM plays WHERE game = 'quake';

合計

sum関数は、指定された列のクエリによって返されたすべての値を合計します。

返される値は入力コレクション要素と同じ型なので、値の合計が型で表現できる最大値を超えると、オーバーフローのリスクがあります。

たとえば

SELECT SUM (players) FROM plays;

返される値は入力値と同じ型なので、値の合計が入力値の型で表現できる最大値を超えると、型のオーバーフローのリスクがあります。型のオーバーフローを防ぐには、入力値を十分な大きさの型にキャストします。例えば

SELECT SUM (CAST (players AS VARINT)) FROM plays;

平均

avg関数は、指定された列のクエリによって返されたすべての値の平均を計算します。

たとえば

SELECT AVG (players) FROM plays;

空のコレクションの平均はゼロを返します。

返される値は入力値と同じ型なので、丸めや切り捨てが含まれる可能性があります。例えば、collection_avg([1, 2])1.5ではなく1を返します。目的の小数点精度を持つ型にキャストするには、型キャストを使用できます。例えば

SELECT AVG (CAST (players AS FLOAT)) FROM plays;

ユーザー定義集約関数(UDA)

ユーザー定義集約を使用すると、カスタム集約関数を定義できます。ユーザー定義集約は、SELECTステートメントで使用できます。

各集約関数には、INITCOND値(デフォルト値:null)で定義された、STYPE型の初期状態が必要です。状態関数の最初の引数の型はSTYPEでなければなりません。状態関数の残りの引数は、ユーザー定義集約関数の引数の型と一致しなければなりません。状態関数は行ごとに1回呼び出され、状態関数によって返された値が新しい状態になります。すべての行が処理された後、オプションのFINALFUNCが最後の状態値を引数として実行されます。

オーバーロードは集約関数の作成後に現れる可能性があるため、状態関数と/または最終関数の可能性のあるオーバーロードされたバージョンを区別するために、STYPE値は必須です。

ユーザー定義集約関数の完全な動作例(USE文を使用してキースペースが選択されていることを前提とします)

CREATE OR REPLACE FUNCTION test.averageState(state tuple<int,bigint>, val int)
    CALLED ON NULL INPUT
    RETURNS tuple
    LANGUAGE java
    AS $$
        if (val != null) {
            state.setInt(0, state.getInt(0)+1);
            state.setLong(1, state.getLong(1)+val.intValue());
        }
        return state;
    $$;

CREATE OR REPLACE FUNCTION test.averageFinal (state tuple<int,bigint>)
    CALLED ON NULL INPUT
    RETURNS double
    LANGUAGE java
    AS $$
        double r = 0;
        if (state.getInt(0) == 0) return null;
        r = state.getLong(1);
        r /= state.getInt(0);
        return Double.valueOf(r);
    $$;

CREATE OR REPLACE AGGREGATE test.average(int)
    SFUNC averageState
    STYPE tuple
    FINALFUNC averageFinal
    INITCOND (0, 0);

CREATE TABLE test.atable (
    pk int PRIMARY KEY,
    val int
);

INSERT INTO test.atable (pk, val) VALUES (1,1);
INSERT INTO test.atable (pk, val) VALUES (2,2);
INSERT INTO test.atable (pk, val) VALUES (3,3);
INSERT INTO test.atable (pk, val) VALUES (4,4);

SELECT test.average(val) FROM atable;

CREATE AGGREGATE文

ユーザー定義集約関数の作成(または置換)には、CREATE AGGREGATE文を使用します。

create_aggregate_statement ::= CREATE [ OR REPLACE ] AGGREGATE [ IF NOT EXISTS ]
                                function_name '(' arguments_signature')'
                                SFUNC function_name
                                STYPE cql_type:
                                [ FINALFUNC function_name]
                                [ INITCOND term ]

完全な例については上記を参照してください。

オプションのOR REPLACEキーワード付きのCREATE AGGREGATEコマンドは、集約関数を作成するか、同じシグネチャを持つ既存の集約関数を置換します。OR REPLACEなしのCREATE AGGREGATEは、同じシグネチャを持つ集約関数が既に存在する場合、失敗します。オプションのIF NOT EXISTSキーワード付きのCREATE AGGREGATEコマンドは、集約関数がまだ存在しない場合にのみ作成します。OR REPLACEIF NOT EXISTS句を同時に使用することはできません。

STYPE値は状態値の型を定義し、指定する必要があります。オプションのINITCONDは集約関数の初期状態値を定義します。デフォルト値はnullです。RETURNS NULL ON NULL INPUTで宣言された状態関数には、null以外のINITCONDを指定する必要があります。

SFUNC値は、状態変更関数として使用する既存の関数を参照します。状態関数の最初の引数の型はSTYPEでなければなりません。状態関数の残りの引数は、ユーザー定義集約関数の引数の型と一致しなければなりません。状態関数は行ごとに1回呼び出され、状態関数によって返された値が新しい状態になります。RETURNS NULL ON NULL INPUTで宣言され、nullで呼び出された状態関数については、状態は更新されません。すべての行が処理された後、オプションのFINALFUNCが最後の状態値を引数として実行されます。これは、STYPE型の引数を1つだけ取る必要がありますが、FINALFUNCの戻り値の型は異なる場合があります。RETURNS NULL ON NULL INPUTで宣言された最終関数は、最後の状態がnullの場合、集約関数の戻り値がnullになることを意味します。

FINALFUNCが定義されていない場合、集約関数の全体の戻り値の型はSTYPEです。FINALFUNCが定義されている場合、その関数の戻り値の型となります。

DROP AGGREGATE文

ユーザー定義集約関数の削除には、DROP AGGREGATE文を使用します。

drop_aggregate_statement::= DROP AGGREGATE [ IF EXISTS ] function_name[ '(' arguments_signature ')'
]

例えば

DROP AGGREGATE myAggregate;
DROP AGGREGATE myKeyspace.anAggregate;
DROP AGGREGATE someAggregate ( int );
DROP AGGREGATE someAggregate ( text );

DROP AGGREGATE文は、CREATE AGGREGATEを使用して作成された集約関数を削除します。同じ名前だがシグネチャの異なる複数のオーバーロードされた集約関数が存在する場合は、削除する集約関数の引数の型を指定する必要があります。

オプションのIF EXISTSキーワード付きのDROP AGGREGATEコマンドは、集約関数が存在する場合に削除し、そのシグネチャを持つ関数が存在しない場合は何も行いません。