LoginSignup
15
12

More than 5 years have passed since last update.

TableauでRedshiftに実行されたクエリを確認する

Posted at

TableauでRedshiftにつなぎにいっていろいろ確認しているときに、Tableauが発行しているSQLを確認したいときがあります。例えば以下の場合です。

  • psqlでRedshiftにつなぎにいくときに、長ったらしい、JOINをかくのが面倒なので、TableauでGUI上で作成してものを流用したい
  • Tableauが意図した通りのSQLを発行しているか確認したい

上記のような場合にポイントとなるのは、 どこでRedshiftは発行したクエリを保持しているのか と、 Tableauはどのようにクエリを発行しているか ということです。

どこでRedshiftは発行したクエリを保持しているのか

svl_statementtext のテーブルにシステムで実行されたすべての SQL コマンドが入っています。
ただ、このテーブルは長いSQLは200文字で分割されて別々のレコードに格納されているので、文字列を結合する必要があります。

Tableauはどのようにクエリを発行しているか

Tableauはcursorを発行してクエリを取得しています。例えば、SQL_CUR0x7ffeb2f68c60という名前のカーソルを宣言し、fetch文を発行しレコードを取得しています。以下が例です。

fetch 1000 in "SQL_CUR0x7ffeb2f68c60"

CursorはDECLAREで宣言するので、その場所を特定できれば発行しているSELECT文が分かりそうです。

結局どのようにすればいい?

以下でいけます。SQL_CUR0x7ffeb2f68c60の部分は適宜、Tableauが発行するクエリをAWSコンソールのGUIから確認すれば出来ます。

SELECT
    *
FROM
    (
    SELECT
        DISTINCT
        xid,
        pid,
        starttime,
        LISTAGG(text) WITHIN GROUP (ORDER BY sequence) OVER (PARTITION BY starttime) AS sql_text
    FROM
        svl_statementtext
    GROUP BY
        xid,
        pid,
        starttime,
        sequence,
        text
    ) as t
WHERE
    sql_text LIKE '%SQL_CUR0x7ffeb2f68c60%' AND sql_text LIKE '%declare%'
15
12
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
15
12