DMLおよびCTASコマンド: RELYプロパティがセットされている場合に誤った結果が出る可能性があります(保留中)。¶
この動作変更バンドルが有効な場合、特定の DML および CTASステートメント の最適化で、 RELY プロパティ がターゲットテーブルにセットされると、誤った結果が生じることがあります。
- 変更前:
UNIQUEとPRIMARY KEY制約 を持つテーブルの DMLおよびCTASステートメントは、DISTINCT と GROUP BY 操作に適用される最適化の対象にはなりません。(オプティマイザは冗長なグループ列を削除します。)
現在、問題の最適化はSELECTステートメントにのみ適用されているため、RELYプロパティが制約にセットされ、参照整合性の違反が発生した場合でも、この最適化では不正なデータが挿入されるリスクはないと表示されます。
- 変更後:
UNIQUEとPRIMARY KEY制約を持つテーブルのDMLおよびCTASステートメントがSELECTステートメントに適用されるのと同じ最適化の対象となります。
制約にRELYプロパティがセットされ、参照整合性の違反が発生した場合、不正なデータが挿入される可能性があります。
背景情報¶
Snowflakeは、定義した制約やプロパティに関係なく、標準テーブルに 参照整合性 を強制しません。(特定の制約とその実施が必要とされる ハイブリッドテーブル は、このルールの例外になります。)
RELY制約プロパティは、テーブルデータに参照整合性がある(または、Snowflakeにデータが読み込まれる前に別のアプリケーションで参照整合性を実施している)とユーザーが思っていることを示します。RELYプロパティは明示的にセットする必要があり、デフォルトでは有効になっていません。このプロパティをセットすると、意図しない動作や予期しない結果につながる可能性があることは、すでにドキュメントで示されています。
RELY制約プロパティを持つテーブルを識別する¶
PRIMARY KEYまたはUNIQUE制約にRELYプロパティがセットされているテーブルを検索するには、以下のクエリを実行します。
SELECT table_schema, table_name
FROM INFORMATION_SCHEMA.TABLE_CONSTRAINTS
WHERE RELY ='YES'
AND (constraint_type = 'PRIMARY KEY' OR constraint_type = 'UNIQUE');
最適化が有効になったときに何らかの問題が発生することが予想される場合は、制約を削除するか、RELYプロパティをセットしないことを検討してください。
参照: 1902