ON CLUSTER 句を使用すると、クラスター上で 設定 プロファイル を変更できます。詳しくは Distributed DDL を参照してください。
設定の置き換えと変更
ALTER SETTINGS PROFILE では、プロファイルの設定や親 (継承元) プロファイルを変更する方法が2つ用意されています。これらは動作が大きく異なるため、適切な方法を選ぶことが重要です。
置換形式: 単独の SETTINGS / INHERIT
SETTINGS 句 (ADD、MODIFY、DROP なし) は、プロファイルの設定リスト全体とすべての親プロファイルを、ここに列挙した内容に完全に置き換えます。以前存在していた項目でも、一覧に含まれていないものは警告なしで削除されます。
CREATE SETTINGS PROFILE における SETTINGS と同じ動作です。この句は設定の完全な一覧を定義します。
インクリメンタル形式: ADD / MODIFY / DROP
ADD、MODIFY、DROP キーワードを使うと、プロファイルのそれ以外の部分はそのままに、個々のエントリだけを変更できます。
ADD SETTINGS variable = value [constraints]— まだ存在しない設定を追加します。MODIFY SETTINGS variable = value [constraints]— 1 つの設定エントリを置き換えます。エントリ全体 (値と制約) が上書きされるため、それらを維持したい場合はMIN/MAX/READONLY/etc. を再指定してください。DROP SETTINGS variable [,...]— 指定した設定を削除します。ADD PROFILES 'profile_name' [,...]/DROP PROFILES 'profile_name' [,...]— 親 (継承元) プロファイルを追加または削除します。DROP ALL SETTINGS/DROP ALL PROFILES— すべての設定、またはすべての親プロファイルを削除します。
DROP SETTINGS a ADD SETTINGS b = 1 のように記述できます。
SET variable = value は MODIFY SETTINGS variable = value の別名です。SET のほうが自然に感じられること、またインクリメンタルな変更を意図していたのに、置き換え用の SETTINGS 句を入力してしまうのがよくあるミスであることから、この別名が用意されています。
例
SHOW CREATE SETTINGS PROFILE で結果を確認してください:
インクリメンタル vs 完全置換
ADD SETTINGS または MODIFY SETTINGS を使用してください (以下の例を参照) 。
ADD vs MODIFY
ADD SETTINGS と MODIFY SETTINGS はどちらも、プロファイル内の他の設定は保持しますが、同じ設定に対する既存エントリの扱いは異なります。
ADD SETTINGS variable = value ...は、まずvariableの既存エントリを削除し、その後に新しいエントリを挿入します。したがって、その設定の値とすべての制約をまとめて置き換えます。variableに対して以前に定義されていたMIN、MAX、または書き込み可否 (READONLY/WRITABLE/CONST/CHANGEABLE_IN_READONLY) のうち、再度指定しなかったものは破棄されます。MODIFY SETTINGS variable = value ...は、フィールドごとにマージします。実際に指定したフィールド (値、MIN、MAX、または書き込み可否) だけを上書きし、その設定の他のフィールドは元のまま保持します。
例
SETTINGS を変更
MODIFY はフィールド単位でマージされるため、設定の値だけを変更しても、既存の制約は維持されます:
ADD SETTINGS
MODIFY とは異なり、値だけを指定して ADD を再実行すると、その設定に以前定義されていた制約は削除されます。