背景
Amazon Redshift において、テーブルやカラムにコメントを設定することが可能です。
案件で Glue Data Catalog を利用するのですが、こちらにもカラムごとにコメントを設定する機能がありますね。
そこで、Redshiftでテーブル登録する際にDDLでまとめてコメント登録できるといいなと思っての検証です (まぁできないんですけどね)。
Redshiftにおけるコメント可否まとめ
そもそもテーブルやViewの種類によってコメントできるものとできないものがあります。
結果としては下記のようになりました。
テーブルに対するコメント | 列に対するコメント | |
---|---|---|
実テーブル | ○ | ○ |
実テーブルのView | ○ | ○ |
外部テーブル | × | × |
外部テーブルのView | ○ | × |
Glue Data Catalog に登録されるテーブルはRedshiftにとって外部テーブルとなるわけですが、どうやらRedshiftから直接外部テーブルにコメントを付与することはできないようです。
例外として、外部テーブルのViewに対してはコメントを付けることが可能です。
外部テーブルのViewを作成する際にはwith no schema binding
オプションが必要となります。
ただし、実テーブルでは列ごとにもコメントできるのに対して、外部テーブルのViewでは不可となります。
一応、AWSサポートにも問い合わせてみましたが、
大変恐縮ではございますが、現時点では、Redshift で外部テーブルを参照したビューの列に対してコメントを作成することはできかねます。なお、外部テーブルを参照したビューの列のみならず、外部テーブルに対してもコメントが作成できないことも確認いたしました。
とのことでした (2023年11月時点)。
外部テーブルにコメント付与した際の挙動
外部テーブルの場合
COMMENT ON TABLE ext_test.test IS 'コメントのテスト';
→ ERROR: Operation not supported on external tables
外部テーブルの列の場合
COMMENT ON COLUMN ext_test.test.test_id IS 'コメントのテスト';
→ ERROR: Operation not supported on external tables
外部テーブルのViewの場合
create or replace view comment_test as select * from ext_test.test
with no schema binding;
COMMENT ON VIEW comment_test IS 'コメントのテスト';
→ COMMENT executed successfully
外部テーブルのViewの列の場合
COMMENT ON COLUMN comment_test.test_id IS 'コメントのテスト';
→ ERROR: column "test_id" of relation "comment_test" does not exist
外部テーブルのViewの列の時だけエラー内容が異なるのは少々気になりますが、できないことに変わりはないようですね (省略していますが実テーブルに対するViewの場合は同じクエリで成功します)。
Data Catalog と Redshift のコメントが紐づいたら、少し作業が楽になる、かも?