メインコンテンツまでスキップ
waffle.svg
Domo Knowledge Base

SQL DataFlow を作成する

Version 11

 

はじめに

DataFlowは、SQLクエリを使用して作成することができます。ETLを使用する場合に比べて難しくなりますが、オプションはより幅広くなります。ETL DataFlowの作成については、「ETL DataFlow」をご覧ください。

重要:DataFlowの入力DataSetは、PDPポリシーで制限することはできません。利用可能なすべての行はDataFlowを経由する必要があります。このため、PDPポリシーは、DataFlowが生成する出力DataSetに適用する必要があります。
 

PDPポリシーが有効の状態で入力DataSetを使ってDataFlowを作成する場合は、以下の条件が少なくとも1つ満たされていないとDataFlowに不具合が発生します。

  • 「管理者」セキュリティプロフィールまたは「DataFlowを管理する」が有効になっているカスタムロールがある。

  • あなたはDataSetの所有者である。

  • あなたは、「すべての行」ポリシーの一部を構成している。これにより、DataSetのすべての行にアクセスできます。

DataFlowでPDPを使用する方法に関しては、「PDPとDataFusion / DataFlow」を参照してください。 

SQL DataFlowを作成するインターフェースには、Data Centerからアクセスします。Data Centerの詳細については、「 Data Centerのレイアウト」を参照してください。

ビデオ - MySQL DataFlow概要


ビデオ - DataFlowを使用してDataSetを結合する

 

SQL DataFlowを作成する

注記:Redshiftでは、次に記されているように、ストアドプロシージャはサポートされていません。http://docs.aws.amazon.com/redshift/latest/dg/c_unsupported-postgresql-features.html 代替手段として、ストアドプロシージャをサポートするMySQL DataFlowを使用します。  

SQL  DataFlowを作成するには、

  1. Domoで、画面上部のツールバーの [データ]をクリックします。

  2. ウィンドウ上部の [Magic変換] ツールバーの [SQL] をクリックします。

    ヒント:SQL DataFlowエディターは、Domoの任意の場所でAppツールバーを選択し、[データ]、[SQL]の順に選択することでも開くことができます。
  3. 作成したいDataFlowのタイプを選択します。
     [DataFlowを作成]ビューが開きます。

  4. DataFlowの名前と詳細を入力します。

  5. 以下に従って、目的のDataFlow用の入力Datasetを選択します。

    1. [DataSetを選択する]をクリックします。

      注記:DataFlowの入力DataSetは既にDomoに存在するものである必要があります[DataFlowを作成]ビューで新しいDataSetをアップロードすることはできません。新規DataSetのDomoへのアップロード方法については、「コネクターでデータに接続する」を参照してください。

       

      重要:DataSetの名前とDataSet内の各列の名前は64文字以下である必要があります(空白も含む)。これはMySQLエンジンの制限ですが、Magic ETLにはこの制限はありません。
    2. 目的のDataSetを選択します。
      DataSetの所有者、実行履歴や列名などの選択したDataSetの詳細に関する情報が表示されます。

      sql_dataflow_info.png

    3. [DataSetを選択]をクリックします。
      選択したDataSetのタイルが画面に表示されます。データセットタイルをクリックしてプレビューウィンドウを表示することができます。

      (1.)(オプション)[ 列を選択]の下で、列名の右側の「x」をクリックすると、DataSetに含めたくない列を削除できます。または、[全ての列を削除] をクリックすると、すべての列を削除できます。

      [列を追加] ボタンをクリックして該当の列を選択することで、DataSetに個々の列を戻すこともできます。また、[全ての列を追加]をクリックすると、DataSetに全ての列を戻すことができます。
      SQL_DataFlow_2.png

      (2.)DataSetの処理方法を選択します。このメニューでは、すべてのDataSetを処理するか、最後にDataFlowが実行された後に追加された新しい行のみを処理するかを選択できます。
      SQL_DataFlow_3.png

      重要:最後のDataFlowの実行後に追加された新しい行のみを処理する方法を使用できるのは、その入力DataSetが追加行のみを処理する方法を使用して更新されるように設定されている場合に限られます。追加タイプの更新を使用したDataSetのスケジュールの詳細については、「DataSetの基本スケジュール」を参照してください。
      ヒント:入力DataSetに大量の行数が含まれる場合は、追加行のみを処理する方法を使用するようにしてください。新しい行のみを処理することで、DataFlowの実行速度を向上できます。
    4. ステップ5を繰り返すことで、必要な数の入力DataSetをさらに選択できます。

  6. (オプション)以下に従って変換を追加します。

    1. [変換を追加]をクリックします。
      さまざまなオプションとともに、[変換]ダイアログが表示されます。これらのオプションの詳細については、「変換および出力DataSetオプションを理解する」を参照してください。

    2. SQLコードを入力し、入力DataSetを変換させます。

    3. [適用]をクリックします。

  7. [出力DataSetを追加]をクリックします。
    さまざまなオプションとともに、[出力DataSet]ダイアログが表示されます。これらのオプションの詳細については、「変換および出力DataSetオプションを理解する」を参照してください。

    1. SQLコードを入力し、入力DataSetをどのように結合させるかを指定します。
      [変換]ダイアログで入力DataSetを変換した場合は、その変換はここで適用されます。

    2. (オプション)前の2つのステップを繰り返して、出力DataSetを追加します。

    3. [終了]をクリックします。

  8. DataFlowをスケジュールする追加のオプションを選択さまざまなスケジュールオプションの詳細については、「DataFlowをスケジュールする」を参照してください。

    注記:スケジュールがまだ指定されていない場合は、DataFlowはデフォルトで手動スケジュールに設定されます。
  9. (条件付き) StrictモードでDataFlowを実行する場合は、[Strictモード]オプションをオンに切り替えます。
    このオプションの詳細については、「Strictモードを理解する」を参照してください。 

  10. (条件付き)以下のいずれかを行い、DataFlowを保存します:

    • この DataFlow を出力して Domo で利用できる DataSet にするためのスクリプトを実行したいときは、[保存して実行]をクリックし、必要に応じてバージョンの説明を入力してから、[保存]をクリックして確認します。
      これで、DataFlowからDataSetが作成されるプロセスが開始されます。入力DataSetのサイズによって、この作成プロセスは1分から1時間、またはそれ以上かかります。DataSetの生成に加え、DataFlowのカードがData CenterのDataFlowリストに追加されます。

    • このDataFlowを今回だけDataSetに出力せずに保存したい場合は、[保存]をクリックし、必要に応じてバージョンの説明を入力してから、[保存] を再びクリックして確定します。DataFlowのカードがData CenterのDataFlowリストに追加されますが、DataSetは生成されません。DataFlowを実行してDataSetに出力する操作はいつでも行うことができます。これは、DataFlowリストにあるDataFlowのカードにマウスポインタを合わせ、gear_icon_old.pngをクリックして[実行]を選択することで行います。このオプション、およびこのメニューで利用できるその他のオプションは本トピックにて後述します。

DataFlowを保存すると、このバージョンのエントリーがDataFlowの詳細ビュー内の [バージョン] タブに追加されます。保存する際に説明を入力した場合は、DataFlowのエントリーにその説明が表示されます。バージョンの詳細については、 「DataFlowのバージョン履歴を閲覧する」を参照してください。 

注記:DataFlowが正常に実行されたときにDataFlowの出力DataSetが「更新済み」としてマークされないのはどうしてかと、疑問に思われるユーザーの方が多くいます。これは一般的には、データが実際には変更されていないためです。つまり更新されていません。そのため、DataSetは更新済みとは表示されません。  

変換および出力DataSetオプションを理解する

新しい変換を作成すると、タイプまたはSQLタイプの変換を作成できます。

  • 表変換では、SELECTステートメントを使用して新しい表が作成され、常に出力表が生成されます。出力表が生成されるため、これらの表に基づき簡単なインデックスを作成できます。 

  • SQL変換では、ストアドプロシージャといったSELECTステートメントを通常は含まない表が作成されます。この変換タイプでは出力表は作成されません。

簡単なインデックス作成

インデックスは、表での操作速度を向上させるデータ構造です。簡単なインデックス作成を使用すると、表の変換で1つ以上の列にすばやくインデックスを作成できます。

インデックスを作成するには、次の方法を実行します。

  1. DataFlowに新しい変換を追加します。

  2. 変換タイプで [表]を選択します。

  3. [インデックス作成中]タブを選択します。

     

  4. インデックスのタイプを選択します。

  5. インデックスを適用する列を選択します。

  6. [終了]をクリックします。 

以下のスクリーンショットは、変換ダイアログのコンポーネントを示しています。

dataflow_transform_ui.png

以下の表で、このコンポーネントに関する詳細を見ることができます。

コンポーネント

説明

入力/変換リスト

SQLステートメントを作成する際に活用できるよう、このDataFlowで選択した全ての入力DataSetの名前が表示されます。さらに、以前に作成した変換もここに表示されます。これらの名前は [変換] および [出力DataSet] ダイアログの両方に表示されます。[変換] ダイアログで1つ以上の入力DataSetを変換した場合、[出力DataSet] ダイアログで参照した時にその変換は入力DataSetに適用されます。

入力DataSetをクリックすると、DataSet内の全ての列とそのデータタイプ(DECIMAL、TEXT、DATE/TIMEなど)のリストが表示されます。

SQLフィールド

入力DataSetの変換や結合を行うためのSQLコードを作成できます。このフィールドには、コードを書く時に便利な自動入力機能が含まれています。

[SQLを実行] メニュー

以下の2つのオプションを使用できます:

  • [SQLを実行]SQLが有効かどうか確認するためのテストを実施することができます。

  • [ここまで実行]この時点までの以前の変換全てを実行します。

  • [EXPLAIN SQL]SQLのEXPLAIN PLANを表示します。これは、クエリの実行時にデータベースが作成するステップの順序付けられたリストです。このオプションを使用するとクエリを最適化できます。ただし、これらのステップは非常に複雑で専門的なため、この機能は上級ユーザーのみに推奨されます。  
     

    注記:実行時の効率性向上に必要なインデックスはMySQLによって判断されるため、すべてのインデックス変換がEXPLAIN SQLに表示されるわけではありません。インデックスを実行することで、効率性が低下すると判断される場合もあるためです。
[プレビュー]ボタン [SQLを実行]または [ここまで実行] の選択後に、ペイン下部にプレビューエリアを展開または折りたたみます。

新しい変換を作成すると、表タイプまたはSQLタイプの変換を作成できます。

  • 表変換では、SELECTステートメントを使用して新しい表が作成され、常に出力表が生成されます。出力表が生成されるため、これらの表に基づき簡単なインデックスを作成できます。 
  • SQL変換では、ストアドプロシージャといったSELECTステートメントを通常は含まない表が作成されます。この変換タイプでは出力表は作成されません。

変換と出力DataSetはどちらも、[ここまで実行]オプションをサポートしています。[ここまで実行]では、選択した変換までに限定してDataFlowを実行できます。数多くの変換や出力がある非常に大規模なDataFlowでは、このオプションを使用するとDataFlowのコードをテストする時間を節約できる可能性があります。このオプションを使用するには、変換または出力DataSetのスパナメニューで [ここまで実行] を選択するか、変換または出力DataSetのエディターを開き、[SQLを実行] メニューの隣にある矢印をクリックして [ここまで実行] を選択します。

DataFlowの特定の変換の上または下のいずれかに変換を追加することもできます。これを行うには、変換のスパナメニューで[上に変換を追加]または [下に変換を追加] を選択し、表タイプまたはSQLタイプのどちらの変換を作成するかを選択します。

簡単なインデックス作成

インデックスは、表での操作速度を向上させるデータ構造です。簡単なインデックス作成を使用すると、入力DataSetまたは表の変換で1つ以上の列にすばやくインデックスを作成できます。

入力DataSetまたは変換でインデックスを作成するには、

  1. 入力DataSetまたは変換のエディターを開きます。
  2. [インデックス作成中] タブを選択します。
  3. インデックスのタイプを選択します。
  4. インデックスを適用する列を選択します。
  5. [終了]をクリックします。 

ビデオ - SQL EXPLAIN PLAN

 

Strictモードを理解する

Strictモードは、データ変更ステートメントの無効な値や欠損値をMySQLでどのように処理するかを制御します。 また、 ゼロによる除算、ゼロの日付、日付内でのゼロ値の処理方法にも影響します。詳細については、https://dev.mysql.com/doc/refman/5.6/en/sql-mode.html#sql-mode-strictを参照してください。

DataFlow作成のためのベストプラクティス

各DataFlowでは以下の点に注意しましょう。

  • 変換における各ステップに、記述的な名前をつけること。

  • 結合または操作される入力DataSet、および作成されるDataSetの説明を含めること。データの所有者を示すことも必要です。

  • 出力DataFlowと同じ名前を付けること(DataFlowの出力はData Center内の独自のDataSetになるため)。これにより、どのDataSetがどのDataFlowによって作成されたかを容易に識別できるようになります。


データの結合や変換に使用するSQLベースのDataFlowを作成し、プログラミングの腕を試してみましょう。