初期 SQL の実行

: Tableau Prep Builder バージョン 2019.2.2 以降では初期 SQL の使用がサポートされていますが、Tableau Desktop でサポートされているオプションと同じオプションがすべてサポートされているわけではありません。Tableau Prep Builder での初期 SQL の使用については、Tableau Prep Builder オンライン ヘルプの「初期 SQL を使用した接続のクエリ」(新しいウィンドウでリンクが開く)を参照してください。

データベースによっては、データベースへの接続時に実行する初期 SQL コマンドを指定できる場合もあります。データベースへの接続は、ワークブックを開くとき、抽出を更新するとき、Tableau Server にサインインするとき、または Tableau Server にパブリッシュするときなどに行われます。ビューの更新時には初期 SQL は実行されません。この初期 SQL はカスタム SQL 接続とは異なります。カスタム SQL 接続はクエリの発行対象となる関係 (表) を定義します。詳細については、「カスタム SQL クエリへの接続」を参照してください。

このコマンドを使用すると、次を実行できます。

  • セッション中に使用する一時表の設定。

  • カスタム データ環境の設定。

[サーバー接続] ダイアログ ボックスまたは [データ ソース] ページでは初期 SQL コマンドを追加するオプションを利用できます。

注: データ ソースが初期 SQL ステートメントの実行をサポートしている場合、[サーバー接続] ダイアログ ボックスの左下隅に [初期 SQL] リンクが表示されます。データ ソースの詳細については、「サポートされるコネクタ」を参照してください。

初期 SQL を使用するには

  1. [サーバー接続] ダイアログ ボックスで、[初期 SQL] をクリックします。または [データ ソース] ページで、接続先のデータベースに応じ、[データ] > [初期 SQL] か、[データ] > [クエリ バンディングおよび初期 SQL] を選択します。

  2. [初期 SQL] ダイアログ ボックスに SQL コマンドを入力します。[挿入] ドロップダウン メニューを使用してデータ ソースにパラメーターを渡すことができます。

注: Tableau はステートメントのエラーを調べません。この SQL ステートメントは、接続時にデータベースにそのまま送信されます。

ソフトウェア ライセンスにより、接続への初期 SQL の使用が制限される場合があります。Tableau Server にパブリッシュする場合、初期 SQL ステートメントを許可するようにサーバーが設定されている必要があります。既定では、ワークブックを Web ブラウザーに読み込んだときにこれらのステートメントを実行できるようにサーバー ソフトウェアが設定されています。

管理者は、tsm configuration set コマンドを使用してサーバーを構成し、初期 SQL ステートメントを無視することができます。

tsm configuration set -k vizqlserver.initialsql.disabled -v true

サーバーで初期 SQL ステートメントが許可されていない場合、ワークブックは開きますが、初期 SQL コマンドは送信されません。

tsm configuration set コマンドの詳細については、「Tableau Server ヘルプ」(新しいウィンドウでリンクが開く)を参照してください。

初期 SQL ステートメントのパラメーター

初期 SQL ステートメントのデータ ソースにパラメーターを渡すことができます。これが役立つ理由は複数あります。

  • TableauServerUser または TableauServerUserFull パラメーターを使用して偽装を設定できます。

  • データ ソースでサポートされている場合は、行レベルのセキュリティ (Oracle VPD や SAP Sybase ASE など) を設定して、ユーザーが表示権限を持つデータのみを表示させることができます。

  • ログに、Tableau バージョンやワークブック名などの詳細を提供できます。

次のパラメーターは初期 SQL ステートメントでサポートされます。

パラメーター説明返される値の例
TableauServerUser現在のサーバー ユーザーのユーザー名。サーバーで擬装を設定する際に使用します。ユーザーが Tableau Server にサインインしていない場合は、空の文字列を返します。jsmith
TableauServerUserFull現在のサーバー ユーザーのユーザー名およびドメイン。サーバーで擬装を設定する際に使用します。ユーザーが Tableau Server にサインインしていない場合は、空の文字列を返します。domain.lan\jsmith
TableauAppTableau アプリケーションの名前。

Tableau Desktop Professional

Tableau Server

TableauVersionTableau アプリケーションのバージョン。9.3
WorkbookNameTableau ワークブックの名前。埋め込みデータ ソースが入ったワークブックでのみ使用します。財務分析

警告: Tableau Desktop にはドメインが含まれていません。委任を使用しておらず、tsm 設定「set -k DelegationUseFullDomainName=-v true--force-keys」を設定している場合は、これを含めることができます

次の例は、初期 SQL ステートメントでパラメーターを使用できるさまざまな方法を示しています。

  • この例では、Microsoft SQL Server でセキュリティ コンテキストを設定します。

    EXECUTE AS USER = [TableauServerUser] WITH NO REVERT;

  • この例では、DataStax データ ソースでパラメーターを使用して、ログ記録に詳細を追加したり、セッション変数を設定してデータを追跡したりする方法を説明しています。

    SET TABLEAUVERSION [TableauVersion];

  • この例を使用すると、Oracle VPD に低レベルのセキュリティを設定する際に役立ちます。

    begin

     DBMS_SESSION.SET_IDENTIFIER([TableauServerUser]);

    end;

    注:Oracle PL/SQL ブロックでは、ブロックを終了するために、末尾にセミコロンを付ける必要があります。正しい構文については、Oracle ドキュメントを参照してください。

サーバーに対する実行の保留

初期 SQL ステートメントを保留して、サーバー上でのみ実行されるようにすることができます。サーバーへの実行を保留する理由の 1 つに、偽装を設定したコマンドを実行するパーミッションを持っていない場合があります。サーバー上でのみ実行されるコマンドを囲うには <ServerOnly></ServerOnly> タグを使用します。

例:

CREATE TEMP TABLE TempTable(x varchar(25));
INSERT INTO TempTable VALUES (1);
<ServerOnly>INSERT INTO TempTable Values(2);</ServerOnly>

セキュリティと偽装

初期 SQL ステートメントで TableauServerUser または TableauServerUserFull パラメーターを使用している場合は、他のユーザーと共有できない専用接続を作成します。これによりキャッシュの共有が制限され、セキュリティが向上し、低パフォーマンスにつながる可能性があります。

MySQL および Oracle 接続で「表を作成する」際のトラブルシューティング

MySQL 接続で、初期 SQL を使用して表を作成しても表が一覧表示されない

MySQL への接続時に、次のような初期 SQL ステートメントを実行すると、Tableau でのクエリの構築方法が理由で表が表示されない場合があります。

CREATE TABLE TestV1.testtable77(testID int);

この問題を解決するには、次のように IF NOT EXISTS を SQL ステートメントに追加します。

CREATE TABLE IF NOT EXISTS TestV1.TestTable(testID int);

Oracle 接続で、初期 SQL を使用して表を作成すると Tableau が停止する

Oracle に接続して次のような初期 SQL ステートメントを実行すると、Tableau でのクエリの構築方法が原因で、Tableau は回転マークが表示された状態で停止します。

CREATE TABLE TEST_TABLE (TESTid int)

この問題を解決するには、次の SQL ステートメントを使用します。

BEGIN
EXECUTE IMMEDIATE 'create table test_table(testID int)';
EXCEPTION
WHEN OTHERS THEN NULL;
END;

 

フィードバックをお送りいただき、ありがとうございます。フィードバックは正常に送信されました。ありがとうございます!