初期 SQL の実行

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

一部のデータベースに接続する場合、データベースへの接続時に実行またはキャッシュされた値を使用する初期 SQL コマンドを指定できます。データベースへの接続は、ワークブックを開いたとき、抽出を更新したとき、Tableau Server へにサインインしたとき、Tableau Server にパブリッシュしたときなどに行われます。

注: 初期 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 ステートメントのデータ ソースにパラメーターを渡すことができます。次のリストに、初期 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;

 

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