ablog

不器用で落着きのない技術者のメモ

Redshift

Amazon Redshift でユーザーに付与されたスキーマ権限を確認する

Amazon Redshift でユーザーに付与されたスキーマ権限を確認する。 select usename , schemaname , has_schema_privilege(usename, schemaname, 'usage') as "usage" , has_schema_privilege(usename, schemaname, 'create') as "create" , has_schema_privi…

Amazon Redshift で HAS_TABLE_PRIVILEGE に CREATE がないのはなぜか?

Amazon Redshift で HAS_TABLE_PRIVILEGE の privilege に CREATE がないのはなぜか?というと、CREATE TABLE 権限はスキーマに対しての権限であり、テーブルに対しての権限ではないため。 ユーザーが、指定されたテーブルに対して指定された権限を持ってい…

スキーマに新規作成したテーブルへのアクセス権をデフォルトで付与する

Amazon Redshift で以下の権限を付与しておけば、新規作成したビューも参照できることと確認した(以下の例では DROP/CREATE している)。 ALTER DEFAULT PRIVILEGES FOR USER ... IN SCHEMA ... GRANT SELECT ON TABLES TO ...; GRANT SELECT ON ALL TABLES…

Redshift で現在から x 時間前のタイムスタンプを取得する

現在から1日前のタイムスタンプを取得する。 # select trunc(sysdate)-1; ?column? 2025-06-10 現在から16時間前のタイムスタンプを取得する # select dateadd(hour,-16, sysdate); date_add 2025-06-10 14:52:09.714924 参考 SYSDATE 関数 - Amazon Redshif…

Redshift の分散スタイルやソートキーの自動最適化履歴を確認する

Redshift の分散スタイルやソートキーの自動最適化履歴は SVL_AUTO_WORKER_ACTION で確認することができる。 select table_id, type, status, eventtime, sequence, previous_state from SVL_AUTO_WORKER_ACTION; table_id | type | status | eventtime | se…

SYS_LOAD_ERROR_DETAIL で他のユーザーが実行したロード処理も参照できるようにする

デフォルトだと一般ユーザーは SYS_LOAD_ERROR_DETAIL を参照すると、自分が実行したロード処理のエントリしか表示できない。 他のユーザーが実行したロード処理のエントリも参照したい場合は SYSLOG ACCESS UNRESTRICTED を付与すればよい。 デフォルトでは…

自動VACUUM実行中に手動VACUUMを実行するとどうなるか

自動VACUUM実行中に手動VACUUMを実行すると、自動VACUUMが停止し、手動VACUUMが実行される。 Automatic vacuum operations pause if any of the following conditions are met: A user runs a data definition language (DDL) operation, such as ALTER TABL…

Redshift でユーザーの接続制限数(CONNECTION LIMIT)以上のコネクションを張ろうすると即時エラーになる

Redshift でユーザーの接続制限数以上のコネクションを張ろうとすると即時エラーになる。 検証結果 3本接続を張った後、4本目の接続を張ろうとすると即時エラーとなる。 $ psql -A -h rs-ra3-4xl-4n.********.us-east-1.redshift.amazonaws.com -p 5439 -d d…

Redshift でテーブルの所有者を変更するにはスーパーユーザー権限が必要

Amazon Redshift でテーブルの所有者を変更するにはスーパーユーザー権限が必要。 dev=> ALTER TABLE table_a OWNER TO user_a; ERROR: must be superuser to change owner 参考 ALTER TABLE - Amazon Redshift

SET SESSION AUTHORIZATION は SECURITY DEFINER 関数内で使用できない

Redshift で SET SESSION AUTHORIZATION は SECURITY DEFINER 関数内で使用できない。 SET SESSION AUTHORIZATIONをSECURITY DEFINER関数内で使用することはできません。 https://www.postgresql.jp/docs/9.4/sql-set-session-authorization.html

Redshift Serverless の監査ログ出力先は CloudWatch Logs のみ

Redshift Serverless の監査ログ出力先は CloudWatch Logs のみ。Provisioned は S3 にも出力できる。 Redshift Serverlessの監査ログもS3バケットに直接出力できないのかなーと思いましたが、今後のRedshift監査ログの出力先はCloudWatch Logsを推奨されて…

Redshift でクエリIDを指定して、クエリに関する性能情報をCSVに出力するスクリプト

Redshift でクエリIDを指定して、クエリに関する性能情報をCSVに出力する bash スクリプト(get_redshift_query_perf2)を作った。 内部的には bash から psql を実行して、sql ファイルを実行している。以前作ったスクリプト(get_redshift_query_perf)か…

psql でクエリの結果セットをファイルに出力する

psql でクエリの結果セットをファイルに出力したい場合、psql のコマンドラインで -o オプションで指定することもできるが、SQL スクリプト内でクエリ単位で出力ファイルを分けたい場合は \o オプションが使える。 書式 \o <file path> query text 実装例 yoheia/aws/re</file>…

psql でコマンドラインから変数を渡して SQL 内で参照する

psql でコマンドラインから変数を渡して SQL 内で参照する方法。 -v オプションで変数を渡し、 psql -v query_id=54321 ... SQL 内では :変数名 で渡された変数を参照する。 select * from SVL_QUERY_METRICS_SUMMARY where query = :query_id; 実装例 yohei…

Redshiftでテーブルの実体を見せずにビューだけ見せてアクセス制限する方法

qiita.com

細かすぎて伝わらない Amazon Redshift のシステムテーブル/ビュー選手権: SYS_QUERY_DETAIL に plan_node_id 列が追加された

AWS エンジニアの皆様、AWS サービスアップデートのキャッチアップおつかれさまですm(._.)m このエントリは AWS Analytics Advent Calendar 2024 の4日目の記事です。 3日目は 大薗さんの状況に合わせて、とても素晴らしい食事プランを提案してくれる 有益な…

Redshift で UNLOAD した時のファイル suffix の命名規則

Redshift で UNLOAD した時のファイル suffix の命名規則 ネーミングルール CSV 圧縮なし: 000 gzip: 000.gz bzip2: 000.bz2 zstd: 000.zst JSON 圧縮なし: 000.json gzip: 000.json.gz bzip2: 000.json.bz2 zstd: 000.json.zst Parquet 000.parquet 検証手…

Redshift の COPY コマンドでロード時に無効な UTF-8 文字を自動的に置換する

COPY コマンドで Redshift にデータロード時に無効な UTF-8 文字がある場合、ACCEPTINVCHARS で固定の文字列に置換することができる。 ACCEPTINVCHARS [AS] ['replacement_char'] データに無効な UTF-8 文字がある場合でも、VARCHAR 列へのデータのロードを…

Redshift でテーブルにカラムを追加できる位置

Redshift でテーブルの末尾にしかカラムを追加できない。ドキュメントを見る限りカラム位置を指定するような構文はない。 接続する $ psql -a "host=redshift-cluster-poc-central.********.ap-northeast-1.redshift.amazonaws.com user=awsuser dbname=dev …

QueryEditor v2 で Redshift にアクセスするための最小権限

QueryEditor v2 を利用する IAM ロール / IAM ユーザーにアタッチする。 IAM ポリシー AmazonRedshiftReadOnlyAccess AmazonRedshiftQueryEditorV2NoSharing IAM 権限 redshift:GetClusterCredential redshift:CreateClusterUser redshift:JoinGroup { "Vers…

UNPIVOT を CROSS JOIN に書き換えるケース

UNPIVOT で性能要件を満たさない場合に「項目テーブル作成 & CROSS JOIN+WITH句」へ書き換えたケース。 書換前 書換後 参考 [Redshift] テーブルの縦持ちと横持ちを入れ換える方法 | DevelopersIO [新機能] RedshiftのPIVOT/UNPIVOT機能を試してみた | Devel…

Amazon Redshift の SYS_QUERY_HISTORY の planning_time と compile_time は execution_time に含まれるぽい

検証結果 planning_time と compile_time は execution_time に含まれるぽい。 検証手順 とあるコンパイルに時間がかかるクエリを実行する。 SYS_QUERY_HISTORY を確認する。 execution_time、compile_time、planning_time を足すと elapsed_time を超えてし…

Amazon Redshift の SYS_QUERY_HISTORY の elapsed_time は lock_wait_time を含む

検証結果 elapsed_time = end_time - start_time lock_wait_time は elapsed_time に含まれる 検証手順 テーブルを作成して、行を挿入 CREATE TABLE testtab1(id int primary key, name varchar(32)); INSERT INTO testtab1 (id, name) VALUES(1, 'foo'); IN…

Glue カタログでテーブルのカラムを追加・削除すると、Redshift Spectrum でも追加・削除される

Glue カタログでテーブルのカラムを追加・削除すると、Redshift Spectrum でも追加・削除されるという当たり前のことを検証してみたメモ。 カラム追加・削除 Redshift から Glue カタログを参照するため external schema を作成する。 create external schem…

Redshift Spectrum から Glue カタログのVARCHARにクエリすると "Invalid column type" エラーが発生する

Glue カタログの VACHAR 型はサイズパラメータ( VARCHAR (256) など)がないが、Redshift Spectrum からサイズパラメータなしで定義された VARCHAR 列をクエリすると、"Invalid column type" エラーが発生する。 Redshift Spectrum を使用して、AWS Glue デ…

Amazon Redshift のクエリモニタリングルールで長時間実行クエリーを中止する

Amazon Redshift の WLM クエリモニタリングルールで、一定時間以上実行されているクエリを中止してみた。 以下の例では 10 秒以上要したクエリを中止している。 実行結果 [ec2-user@ip-172-31-0-222 ~]$ export LC_ALL=C [ec2-user@ip-172-31-0-222 ~]$ cat…

Redshift の "ERROR: 1023 DETAIL: Serializable isolation violation"

準備 psql で Redshift に接続する。 psql "host=ds2xl-2n.******.us-west-2.redshift.amazonaws.com user=awsuser dbname=mydb port=5439" テーブルを作成してデータを投入する。 \echo :AUTOCOMMIT; CREATE TABLE tab1 (col1 INTEGER NOT NULL); CREATE TA…

Redshift の Timestamp 型のカラムに COPY コマンドでデータをロードしてみる

ただのメモ。 データを用意して % cat ts_test.csv 202 2012-12-31 12:34:56 652 2012-12-31 12:34:56 761 2012-12-31 12:34:56 811 2012-12-31 12:34:56 922 2012-12-31 12:34:56 1160 2012-12-31 12:34:56 1309 2012-12-31 12:34:56 1413 2012-12-31 12:34…

Redshift のリザルトキャッシュを無効化する方法

性能試験などで敢えてリザルトキャッシュを使わずにクエリ性能を計測したい場合は以下の手順で無効化できる。 手順 セッションレベルで無効化する方法 set enable_result_cache_for_session=off; ユーザーレベルで無効化する方法 ALTER USER awsuser SET ena…

psqlメモ

設定 ~/.psqlrc \set PROMPT1 '%[%033[1;32m%]%n %`date +%H:%M` %R%#%[%033[0m%] ' \set PROMPT2 '%[%033[1;32m%]%R%#%[%033[0m%] ' \timing on \set HISTSIZE 1000000 psqlコマンドのお勧め設定 - 青木ブログ コマンド例 ログイン psql "host=dc18xl8.****…