ablog

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

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

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

検証結果

  • 3本接続を張った後、4本目の接続を張ろうとすると即時エラーとなる。
$ psql -A -h rs-ra3-4xl-4n.********.us-east-1.redshift.amazonaws.com -p 5439 -d dev -U testuser
Password for user testuser:
psql: error: connection to server at "rs-ra3-4xl-4n.********.us-east-1.redshift.amazonaws.com" (10.0.13.174), port 5439 failed: FATAL:  too many connections for user "testuser"

事前準備

  • Redshift に接続する。
$ psql -A -h rs-ra3-4xl-4n.********.us-east-1.redshift.amazonaws.com -p 5439 -d dev -U awsuser
  • ユーザーを作成する。
CREATE USER testuser password 'abcD1234' CONNECTION LIMIT 3;

参考

構文
CREATE USER name [ WITH ]
PASSWORD { 'password' | 'md5hash' | 'sha256hash' | DISABLE }
[ option [ ... ] ]

where option can be:

CREATEDB | NOCREATEDB
| CREATEUSER | NOCREATEUSER
| SYSLOG ACCESS { RESTRICTED | UNRESTRICTED }
| IN GROUP groupname [, ... ]
| VALID UNTIL 'abstime'
| CONNECTION LIMIT { limit | UNLIMITED }
| SESSION TIMEOUT limit
| EXTERNALID external_id

(中略)

CONNECTION LIMIT { limit | UNLIMITED }

ユーザーが同時に開けるデータベース接続の最大数。この制限はスーパーユーザーには適用されません。同時接続の最大数を許可するには、UNLIMITED キーワードを使用します。データベースごとの接続数の制限が適用される場合もあります。詳細については、「CREATE DATABASE」を参照してください。デフォルトは UNLIMITED です。現在の接続を確認するには、STV_SESSIONSシステムビューに対してクエリを実行します。

https://docs.aws.amazon.com/ja_jp/redshift/latest/dg/r_CREATE_USER.html:tilte

Redshift Spectrum で外部スキーマの作成と同時に外部データベースを作成する

Redshift Spectrum で外部スキーマの作成と同時に外部データベースを作成する。

外部スキーマの作成と同時に外部データベースを作成するには、FROM DATA CATALOGステートメントで CREATE EXTERNAL DATABASE を指定して CREATE EXTERNAL SCHEMA 句を含めます。
次の例では、外部データベース spectrum_schema を使用して spectrum_db という名前の外部スキーマを作成します。

create external schema spectrum_schema from data catalog 
database 'spectrum_db' 
iam_role 'arn:aws:iam::123456789012:role/MySpectrumRole'
create external database if not exists;
Amazon Redshift Spectrum 用の外部スキーマ - Amazon Redshift

Redshift Spectrum でサポートされるデータ型

次の データ型 がサポートされています。

  • SMALLINT (INT2)
  • INTEGER (INT、INT4)
  • BIGINT (INT8)
  • DECIMAL (NUMERIC)
  • REAL (FLOAT4)
  • DOUBLE PRECISION (FLOAT8)
  • BOOLEAN (BOOL)
  • CHAR (CHARACTER)
  • VARCHAR (CHARACTER VARYING)
  • VARBYTE (CHARACTER VARYING) – Parquet および ORC データファイルで、パーティション化されていないテーブルでのみ使用できます。
  • DATE – テキスト、Parquet、または ORC データファイルでのみ使用できます。またはパーティション列としてのみ使用できます。
  • TIMESTAMP
CREATE EXTERNAL TABLE - Amazon Redshift

Redshift の STL_QUERY.query と SYS_QUERY_HISTORY. query_id の対応表を作成する

Redshift の STL テーブルのクエリID(query列)と SYS ビューのクエリID(query_id)は別の値のため、クエリIDで結合することはできない。トランザクションID(STLとSYSのトランザクションIDが 1:1 の場合)で結合することができる。

Redshift の STL テーブルと SYS ビュー - ablog

STL_QUERY と SYS_QUERY_HISTORYCSV(|区切り)に出力したファイルを transaction_id(xid) で結合してして、query と query_id の対応表を作成したメモ。

  • STL_QUERY から query と xid だけを抽出して重複排除する。
perl -F'\|' -lane 'print qq/$F[3]|$F[4]/' STL_QUERY.csv|sort -u > STL_QUERY_qid_xid.csv
  • SYS_QUERY_HISTORY から query_id と transaction_id だけを抽出して重複排除する。
perl -F'\|' -lane 'print qq/$F[1]|$F[3]/' SYS_QUERY_HISTORY.csv|sort -u > SYS_QUERY_HISTORY_qid_xid.csv
  • 作成した2ファイルを結合して対応表を作成する。
  • 列は transaction_id、query_id、query という並び。
join -t'|' -1 2 -2 2 SYS_QUERY_HISTORY_qid_xid.csv STL_QUERY_qid_xid.csv > query_id_query.csv