ablog

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

VSCode でスペルチェックを使う

拡張機能 Code Spell Checker をインストールする。 スペルチェックの対象とするファイルの拡張子は [Code Spell Checker]-[拡張機能の設定]-[C Spell: Enabled Language Ids] で [項目の追加] で追加できる。 参考 VSCode に Code Spell Checker を導入して…

Redshift でオブジェクト権限を持つグループ・ユーザーを確認する

AWS

select a.relname, b.nspname, a.relacl from pg_class a, pg_namespace b where a.relnamespace = b.oid and a.relacl is not null and b.nspname not like 'pg_%';

Redsfhit でユーザーとグループの一覧を確認する

AWS

select usename, usesysid, usesuper, useconfig, groname, grosysid, grolist from pg_user, pg_group where pg_user.usesysid = any(pg_group.grolist); 参考 amazon web services - Redshift: How to list all users in a group - Stack Overflow

Redshift クラスターに awslabs - amazon-redshift-utils の AdminViews を作成する

AWS

Redshift クラスターに awslabs - amazon-redshift-utils の AdminViews を作成する。 % git clone https://github.com/awslabs/amazon-redshift-utils.git % cd amazon-redshift-utils/src/AdminViews % ls -1 *.sql > run_all.sql % perl -i -pe 's/^/\\i …

Github に push すると "Support for password authentication was removed on August 13, 2021. Please use a personal access token instead." と怒られる

Github に push すると "Support for password authentication was removed on August 13, 2021. Please use a personal access token instead." と怒られる。 事象 % git push origin master Username for 'https://github.com': yoheia Password for 'http…

Amazon Managed Grafana で Redshift のクエリをモニタリングする

AWS

Amazon Managed Grafana(AMG) で Redshift のクエリをモニタリングしてみた。ダッシュボードの定義(JSON)をインポートすると以下のようなダッシュボードを作成できる。 ダッシュボードの見た目 Redshift の設定 Redshift クラスターを選択し、[Actions]-[M…

SCT で Teradata の拡張パックを Redshift にインストールする

AWS

SCTインストール SCT 1.0 Build 655 をダウンロードして、インストールする。 AWS SCT のインストール、検証、更新 - AWS Schema Conversion Tool JDBC 4.2–compatible driver version 2.1 (without the AWS SDK) をダウンロードする。 Amazon Redshift JDBC…

SCT on EC2 Windows から Redshift に接続する

AWS

macOS版 SCT がなくなったので、SCT on EC2 Windows で使う手順。 macOS へアプリケーションインストール AWS CLI v2 Session Manager Plugin Microsoft Remote Desktop EC2インスタンス作成 EC2(Windows)インスタンス作成 AMI: Microsoft Windows Server …

Redshift に import した UDF を確認する

AWS

Redshift に import した UDF を確認する。 sample=# select * from pg_library a, pg_language b where a.language_oid = b.oid; name | language_oid | file_store_id | owner | lanname | lanispl | lanpltrusted | lanplcallfoid | lanvalidator | lanacl…

Redshift で特定スキーマの持つファンクションを調べる

AWS

SQL select a.proname, a.proacl, a.pronamespace, b.nspname from pg_proc a, pg_namespace b where b.nspname = 'aws_teradata_ext' and a.pronamespace = b.oid order by a.proname; 実行結果 proname | proacl | pronamespace | nspname ---------------…

Redshift で毎日決まった時間に一時停止する

AWS

IAMロールを作成する IAMロール RedshiftPauseResumeRole を作成 Permissions policies IAMポリシー RedshiftPauseResumeRolePolicy を作成してアタッチ { "Version": "2012-10-17", "Statement": [ { "Sid": "VisualEditor0", "Effect": "Allow", "Action":…

Redshift で COPY コマンド実行時の query_temp_blocks_to_disk を調べる

AWS

Redshift で COPY コマンド実行時に query_temp_blocks_to_disk が使われることがあることを確認した。 QMR(Query Monitoring Rule) で query_temp_blocks_to_disk > 1MB のクエリを中止するよう設定した上で、分散キー・ソートキーが指定されたテーブルに非…

Redshift のデータシェアリング設定手順

AWS

producer 側 create datashare test_db; alter datashare test_db set publicaccessible = true; alter datashare test_db add schema sample1, sample2; -- consumer 側で "select current_namespace;" を実行し、以下のクエリの <name space> に指定する grant usage o</name>…

Redshift で CREATE TEMP TABLE は QMR の Memory to disk (1 MB blocks) にひっかかる

AWS

Redshift で CREATE TEMP TABLE は QMR(Query Monitoring Rule) の Memory to disk (1 MB blocks) の制限にひっかかることを確認した。 準備 QMR の設定 テーブルを作成する CREATE TABLE lineorder ( lo_orderkey INTEGER NOT NULL, lo_linenumber INTEGE…

psql の変数にクオーテーションをつける方法

:'変数名' とすればよい。 dev=# SELECT current_database() AS database_name; database_name --------------- dev (1 row) dev=# \gset dev=# select :'database_name'; ?column? ---------- dev (1 row) 参考 psqlの変数にクォーテーションをつける方法 -…

Redshift を時限で一時停止・起動する設定

AWS

Redshift クラスターを土日&夜間に一時停止しコストを削減する - サーバーワークスエンジニアブログ

Redshift で分散スタイル変更時の VACUUM 要否

AWS

Redshift で分散スタイル変更時の VACUUM 要否を確認してみた。 EVEN分散->KEY分散に変更した場合 テーブル作成 dev=# drop table public.customer cascade; dev=# create table public.customer ( c_custkey integer not null, c_name varchar(25) not null…

Redshift で SPLIT_TO_ARRAY 関数でデリミタ区切りのリストを横縦変換する

AWS

テーブルのフィールドにカンマ区切りのデータを登録する。 dev=# create table pivot_test (id int, txt varchar); CREATE TABLE dev=# insert into pivot_test values (1,'AZ, Sidmar,1'),(2,'Kaihatsu,Suarez,9'),(3,'Azuma,Neymar,11'),(4,'OZ,Iniesta,8'…

Redsfhit でどのグループにユーザーが所属しているか確認する

AWS

クエリ select pg_user.usename, pg_user.usesysid, pg_group.groname, pg_group.grolist from pg_user,pg_group; 実行結果 usename | usesysid | groname | grolist ------------------------------+----------+----------------------------+--------- rds…

AWS CLI v2 のページャーを無効化する

AWS

Config で設定 恒久的にページ分割を無効化したい場合は、~/.aws/config ファイルに以下のように書きます。 ~/.aws/config [default] cli_pager= export コマンドで設定 一時的にページ分割を無効化したい場合は、export や setx コマンドで以下のように設定…

Redshift のパラメータグループを AWS CLI で設定する

AWS

マネコンでパラメータグループやワークロード設定を行う。 設定したパラメータを表示する % aws redshift describe-cluster-parameters --parameter-group-name poc-auto-wlm (中略) { "ParameterName": "max_concurrency_scaling_clusters", "ParameterVa…

git rm で fatal: pathspec did not match any files と怒られる

git

事象 git rm でファイルを削除しようとすると、"fatal: pathspec 'ファイルパス' did not match any files" と怒られる。 % git rm ./.DS_Store fatal: pathspec './.DS_Store' did not match any files 原因 Gitに登録していないファイルのため。普通にファ…

GitHub から clone しようとすると、"Permission denied (publickey). fatal: Could not read from remote repository." と怒られる

事象 GitHub から clone しようとすると、"Permission denied (publickey). fatal: Could not read from remote repository." と怒られる。 % git clone git@github.com:yoheia/redshift_concurrent_query_executer.git Cloning into 'redshift_concurrent_q…

Redshift でテーブルにアクセス権があるのに "permission denied for schema ..." と怒られる

事象 ユーザーにテーブルに対する権限を付与しているのに "permission denied for schema ..." と怒られる。 こんな感じでアクセス権を付与しているが、 % psql "host=redshift-cluster-poc.********.ap-northeast-1.redshift.amazonaws.com user=awsuser db…

よく使う pgbench のオプション

ベンチマーク用オプション -t: 指定した回数トランザクションを実行する (回数を指定) -T: 指定した秒数トランザクションを実行する(期間を指定) -c: データベースセッション数 -j: ワーカースレッド数 -f : 実行するSQLスクリプトファイル名 -r: コマン…

よく使う psql のオプション

よく使う psql のオプション -f: SQLスクリプトファイルを指定して実行する -a: 実行した SQL も出力する 実行例 psql "host=redshift-cluster-poc.********.ap-northeast-1.redshift.amazonaws.com user=awsuser dbname=dev port=5439" -a -f sample.sql 参…

macOS に pgbench をインストールする

% brew install postgres 参考 Postgres on Mac with Brew 💻. Brewing PostgreSQL on OS X | by Gopi Krishna Kancharla | Think Special — Gopi K Kancharla | Medium | Think Special — Gopi K Kancharla

Redshift でクエリを同時多重実行検証をするスクリプト

TL;DR Redshift クラスターのサイジングや Concurrency Scaling の検証などで、クエリを同時実行し、クエリ単体のレスポンス要件と複数クエリのスループット要件の両方を満たしているかを検証したりする bash スクリプト。bash スクリプトから pgbench を読…

Redshift でワークロードキュー毎のクエリ同時実行数を確認する

AWS

クラスター全体での実行中とキュー待ちのクエリ数 マネジメントコンソールで[Redshift]-[クラスターを選択]-[クエリのモニタリング]-[ワークロードの同時実行] オレンジ色:実行中のクエリ数 青色:ワークロードキュー待ちのクエリ数 「キューに入れられたク…

psql on EC2 で Redshift のクエリの結果セットが大きい場合のボトルネックを調べる

AWS

サマリー EC2インスタンス(t2.micro)から psql で Redshift に結果セットが100GB以上と大きい select 文を発行すると、CloudWatch メトリクスでネットワーク受信量 (バイト数)が約500MB/分になる。 m5.large では約3.2GB/分のスループットが出た。 t2.micr…