SET - Amazon Redshift

SET

サーバー設定パラメータの値を設定します。SET コマンドを使用して、現在のセッションまたはトランザクションのみの期間の設定をオーバーライドします。

RESET コマンドを使って、パラメータをデフォルト値に戻します。

サーバー構成パラメータは、いくつかの方法で変更できます。詳細については、「サーバー設定の変更」を参照してください。

構文

SET { [ SESSION | LOCAL ] { SEED | parameter_name } { TO | = } { value | 'value' | DEFAULT } | SEED TO value }

次のステートメントは、セッションコンテキスト変数の値を設定します。

SET { [ SESSION | LOCAL ] variable_name { TO | = } { value | 'value' }

パラメータ

SESSION

現在のセッションに対して、設定が有効であることを指定します。デフォルト値

variable_name

セッションに設定されたコンテキスト変数の名前を指定します。

命名規則は、ドットで区切られた 2 つの部分で構成される名前です (例: identifier.identifier)。使用できるドット区切り文字は 1 つだけです。Amazon Redshift の標準識別子ルールに従った識別子を使用します。詳細については、「名前と識別子」を参照してください。区切り文字は許可されていません。

LOCAL

設定が現在の取引で有効なことを指定します。

SEED TO value

乱数生成用に RANDOM 関数が使用する内部シードを設定します。

SET SEED は、0 から 1 までの数を取り、この数値に (231-1) を掛けて、RANDOM 関数関数で使用します。複数の RANDOM コールの前に SET SEED を使用すると、RANDOM は予想可能な順番で番号を生成します。

parameter_name

設定するパラメータの名前。パラメータの詳細については、「サーバー設定の変更」を参照してください。

value

新しいパラメータ値。一重引用符を使って、指定文字列に値を設定します。SET SEED を使用した場合、このパラメータには SEED 値が含まれます。

DEFAULT

パラメータをデフォルト値に設定します。

現在のセッションのパラメータの変更

次の例は、データスタイルを設定します。

set datestyle to 'SQL,DMY';

ワークロード管理用のクエリグループの設定

クラスターの WLM 設定の一部として、クエリグループをキュー定義で一覧表示した場合、一覧表示されたクエリクループ名に QUERY_GROUP パラメータを設定できます。以降のクエリは、関連するクエリキューに割り当てられます。QUERY_GROUP グループの設定は、セッションの有効期間中、または RESET QUERY_GROUP コマンドの遭遇するまで有効です。

この例では、クエリグループ「priority」の一部として 2 つのクエリを実行し、その後クエリグループをリセットします。

set query_group to 'priority'; select tbl, count(*)from stv_blocklist; select query, elapsed, substring from svl_qlog order by query desc limit 5; reset query_group;

詳細については、「ワークロード管理」を参照してください。

セッションのデフォルトの ID 名前空間を変更する

データベースユーザーは default_identity_namespace を設定できます。このサンプルでは、SET SESSION を使用して現在のセッション期間中に設定を上書きし、新しい ID プロバイダーの値を表示する方法を示します。これは、Redshift と IAM アイデンティティセンターで ID プロバイダーを使用している場合に最もよく使用されます。Redshift で ID プロバイダーを使用する方法の詳細については、「Redshift を IAM アイデンティティセンターに接続してユーザーにシングルサインオンエクスペリエンスを提供する」を参照してください。

SET SESSION default_identity_namespace = 'MYCO'; SHOW default_identity_namespace;

コマンドを実行したら、次のような GRANT ステートメントまたは CREATE ステートメントを実行できます。

GRANT SELECT ON TABLE mytable TO alice; GRANT UPDATE ON TABLE mytable TO salesrole; CREATE USER bob password 'md50c983d1a624280812631c5389e60d48c';

この場合、デフォルトの ID 名前空間を設定する効果は、各 ID に名前空間のプレフィックスを付けることと同じです。この例では、aliceMYCO:alice に置き換えられます。IAM アイデンティティセンターでの Redshift 構成に関連する設定の詳細については、「ALTER SYSTEM」および「他の ID プロバイダー」を参照してください。

クエリのグループのラベルの設定

QUERY_GROUP パラメータは、SET コマンド実行後の同じセッションで実行される 1 つまたは複数のクエリのためのラベルを定義します。また、実行されたクエリが STL_QUERY や STV_INFLIGHT システムテーブル、および SVL_QLOG ビューから返される結果を制約する場合に、このラベルがログ記録されます。

show query_group; query_group ------------- unset (1 row) set query_group to '6 p.m.'; show query_group; query_group ------------- 6 p.m. (1 row) select * from sales where salesid=500; salesid | listid | sellerid | buyerid | eventid | dateid | ... ---------+--------+----------+---------+---------+--------+----- 500 | 504 | 3858 | 2123 | 5871 | 2052 | ... (1 row) reset query_group; select query, trim(label) querygroup, pid, trim(querytxt) sql from stl_query where label ='6 p.m.'; query | querygroup | pid | sql -------+------------+-------+---------------------------------------- 57 | 6 p.m. | 30711 | select * from sales where salesid=500; (1 row)

クエリグループのラベルは、スクリプトの一部として実行された個々のクエリやクエリグループを分離するための有益なメカニズムです。クエリの ID によってクエリの識別や追跡を行う必要はありません。ラベルによってクエリの追跡が可能です。

乱数生成用のシード値の設定

次の例では、SET コマンドで SEED オプションを使用し、RANDOM 関数により、予想可能な順番で数値を生成します。

まず、SEED 値を最初に設定せずに、3 つの整数の乱数を返します。

select cast (random() * 100 as int); int4 ------ 6 (1 row) select cast (random() * 100 as int); int4 ------ 68 (1 row) select cast (random() * 100 as int); int4 ------ 56 (1 row)

次に、SEED 値を .25 に設定して、さらに 3 つの整数の乱数を返します。

set seed to .25; select cast (random() * 100 as int); int4 ------ 21 (1 row) select cast (random() * 100 as int); int4 ------ 79 (1 row) select cast (random() * 100 as int); int4 ------ 12 (1 row)

最後に、SEED 値を .25 にリセットして、RANDOM が前の 3 つの呼び出しと同じ結果を返すことを確認します。

set seed to .25; select cast (random() * 100 as int); int4 ------ 21 (1 row) select cast (random() * 100 as int); int4 ------ 79 (1 row) select cast (random() * 100 as int); int4 ------ 12 (1 row)

次の例では、カスタマイズされたコンテキスト変数を設定します。

SET app_context.user_id TO 123; SET app_context.user_id TO 'sample_variable_value';