初期 SQL の実行

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

一部のデータベースに接続する場合は、データベースに接続する時、たとえば、ワークブックを開く、抽出の更新、Tableau Server へのサインイン、または Tableau Server へのパブリッシュ時に実行する初期 SQL コマンドを指定できます。ビューの更新時には初期 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 にサインインしていない場合は、空の文字列を返します。taroyamada
TableauServerUserFull現在のサーバー ユーザーのユーザー名およびドメイン。サーバーでの擬装の設定時に使用します。ユーザーが Tableau Server にサインインしていない場合は、空の文字列を返します。domain.lan\taroyamada
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;

 

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