ablog

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

Redshift

細かすぎて伝わらない 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.****…

awslabs の Redshift の AdminViews を作成する

ソースを取得する。 $ git clone https://github.com/awslabs/amazon-redshift-utils.git 実行スクリプトを作成する $ cat <EOF > create_all_views.sql \i v_check_data_distribution.sql \i v_check_transaction_locks.sql \i v_check_wlm_query_time.sql \i v_c</eof>…

Redshift の COPY コマンドはアトミックでトランザクショナル

Redshift の COPY コマンドが失敗した場合、ロールバックするか。 COPY コマンドはアトミックでトランザクショナルです。 (中略) COPY コマンドが失敗した場合、トランザクション全体が中止され、変更はすべてロールバックされます。 複数ファイル読み取り…

Redshift のテーブル一覧とサイズを確認する

Amazon Redshift のテーブル一覧とサイズを AWS Labs の table_info.sql で確認する。 % git clone https://github.com/awslabs/amazon-redshift-utils.git % cd src/AdminScripts % psql "host=rs-spectrum01.******.us-east-1.redshift.amazonaws.com user…

Redshift 検証メモ

まとめ 「SVV_TABLE_INFO.TBL_ROWS」 で削除対象としてマークされた行も含めた行数を確認できる 「SVV_TABLE_INFO.TBL_ROWS」 - 「select count(*) from テーブル名」が削除済としてマークされた行数 STV_TBL_PERM、SVV_DISKUSAGE も同様に削除済としてマー…

Amazon Redshift からテーブル作成DDLを自動生成する

Amazon Redshift 自体にはクラスターに存在するテーブルなどのオブジェクトのDDLを生成する機能はないが、以下のスクリプトやツールで生成することができる。 つまり、Oracle Database の DataPump の CONTENT=METADATA_ONLY や exp の rows=n ような機能は…

SQL Workbench/J のコンソールモードを使う

環境 macOS Sierra インストール SQL Workbench/J - Downloads で [Download generic package for all systems] をダウンロードする。*1 Workbench-Build122.zip を解凍して任意のフォルダに置く。 設定 GUIで起動する。 $ cd Workbench-Build122 $ sh ./sql…

SQL Workbench/J で Amazon Redshift に接続する

SQL Workbench/J をインストールして Amazon Redshift に接続するまでの手順をメモ。SQL Workbench/J は Java で書かれた GUI および CUI から SQL を実行できるツールで、様々な RDBMS に使える。 SQL Workbench/J is a free, DBMS-independent, cross-plat…

シンプルでシステマチックな Redshift 性能分析

実行計画とステップごとの所要時間 [Query Execution Details] Plan Actual リソース使用状況 マネジメントコンソールで見れる ビュー SVL_QUERY_METRICS_SUMMARY SVL_QUERY_METRICS SVL_QUERY_QUEUE_INFO SVL_QUERY_SUMMARY SVL_QUERY_REPORT SVL_COMPILE S…