メイン コンテンツをスキップする 補完的コンテンツへスキップ

SQL 変換の追加

SQL ベースのテーブルを変換タスクに含めることができます。SQL 変換を使用すると、SQL SELECT クエリをパイプラインに入力して、複雑または単純な変換を定義できます。マクロを使用して、初期ロードまたは増分ロードが実行される場合にクエリが実行されるように適応することもできます。

変換タスクの作成の詳細については、「データの変換」を参照してください。

SQL 変換の追加

変換データ タスクに SQL 変換を追加するには:

  1. [変換] で、クエリに含めるデータセットを選択し、 [SQL 変換を追加] をクリックします。

    [SQL 変換を追加] が表示され、変換の設定を実行できます。

  2. [名前] にターゲット データセットの名前を入力します。

    [説明] に長い説明を追加することもできます。

  3. [実体化] で、変換された出力を実体化するかどうかを選択します。データ タスク設定から設定を継承することを選択できます。

    • [オン] にするとテーブルが作成され、関連する ELT 処理が実行されます。

    • [オフ] にすると、オンザフライで変換を実行するビューが作成されます。

  4. 増分ロードを使用すると、マクロを使用して処理されるデータのセットを減らすためにフィルターまたはその他の条件を適用することで、増分データ ロードのクエリを調整できます。増分ロードは、データがテーブルとして実体化されている場合にのみ使用できます。

    • 増分ロードが [オン] の場合

      タスクの最初の実行では初期ロードが実行され、クエリのすべての結果がターゲット テーブルに挿入されます。後続の実行では、増分処理用に定義したフィルターまたは特定の条件を利用して、増分ロードが実行されます。増分ロード中、タスクはデータを更新または挿入としてのみ処理し、削除は管理されません。

    • 増分ロードが [オフ] の場合

      タスクの最初の実行では初期ロードが実行され、クエリのすべての結果がターゲット テーブルに挿入されます。後続の実行では、クエリのすべての結果をターゲット テーブルと比較し、新規、変更、または削除されたレコードを処理します。

    情報メモクエリがターゲットに存在する必要があるすべてのレコードを選択する場合は、増分ロードをオフに設定します。選択されていないレコードはターゲットで削除されます。
  5. SQL 変換を作成する準備ができたら、 [追加] をクリックします。

    [SQL 変換を編集] が表示されます。

  6. クエリを入力して、SQL ベースのテーブルを [SELECT クエリ] で返します。

    クエリは選択したソース データセットからのみ読み取り可能ですが、 [追加] でさらにソース データセットを追加できます。

    データセットから選択できます。

  7. 増分ロードを使用する場合は、マクロを使用して、初期ロードまたは増分ロードが実行される場合にクエリが実行されるように適応できます。

    詳細については、「マクロを使用してクエリをロード タイプに適応させる」を参照してください。

  8. [パラメーターを抽出] をクリックして、SELECT クエリのパラメーターを解析します。

    パラメーターは、ソース オブジェクトまたはターゲット オブジェクトにマッピングする必要があります。可能なマッピング先

    • 履歴タイプ 2 構造 (_history)

    • 現在の構造

    • ターゲット オブジェクト

      ターゲット オブジェクトをマップできるのは、パラメーターが増分マクロ内で定義される場合のみです。

    ヒント メモパラメーターを参照に置き換えて、クエリを読みやすくすることができます。パラメーターの値を変更すると、SELECT クエリの参照も変更されます。
  9. [テーブルの説明] をクリックして、クエリ出力メタデータのプレビューを取得します。

    データのサンプルを使用して、結果をプレビューすることもできます。

    データのプレビュー

  10. テーブルに主キーがあることを確認してください。

    メタデータの設定を編集することもできます。

    • [キー] 列に主キーを設定します。

    • [Nullable] 列で列が null 許容かどうかを設定します。

    • 列を選択し、 [編集] をクリックして、列名、キー、null 許容、データ型を設定します。

  11. クエリの結果に問題がなければ、[OK] をクリックします。データセットがターゲットのリストに追加され、プレビューできるようになりました。

データのプレビュー

データのサンプルを使用して、結果をプレビューできます。

情報メモデータのプレビューが Qlik 管理コンソール のテナント レベルで有効になっている必要があります。[特徴量の管理] の [設定] にある [データ統合 でのデータ表示] オプションで見つけられます。

データをプレビューするには、次の役割が割り当てられている必要があります。

  • データ接続が常駐するスペースで [データ表示可能]。

  • データ プロジェクトが常駐するスペースで [表示可能]。

結果のプレビューを表示するには、

  • [データを表示] をクリックします。

データのサンプルを使用した結果が表示されます。[列の数] でサンプルに含めるデータ列の数を設定できます。

サンプル データをフィルターするには、2 つの方法があります。

  • フィルター を使用して、取得するサンプル データをフィルターします。

    例えば、フィルター ${OrderYear}>2023 を使用し、[列の数] を 10 に設定すると、2024 年から 10 個の注文のサンプルを取得します。

  • 特定の列でサンプル データをフィルターします。

    これは、既存のサンプル データのみに作用します。フィルター を使用して 2024 年の注文のみを含め、列フィルターで 2022 年の注文を表示するように設定すると、サンプルは空になります。

データ サンプルを特定の列順に並べ替えることができます。並べ替えは、既存のサンプル データのみに作用します。フィルター を使用して 2024 年の注文のみを含め、列順序を逆にしても、サンプル データには 2024 年の注文のみが含まれます。

マクロを使用してクエリをロード タイプに適応させる

増分ロードを使用する場合は、マクロを使用して、初期ロードまたは増分ロードが実行される場合にクエリが実行されるように適応できます。

マクロを選択し、それぞれの句の中にクエリを追加します。

  • Q_RUN_INCREMENTAL は、増分ロードの実行時にのみ実行されるクエリを配置できる句を追加します。

  • Q_RUN_INITIAL_LOAD は、初期ロードの実行時にのみ実行されるクエリを配置できる句を追加します。

各マクロで完全なクエリを指定する必要はありません。ユース ケースに基づいてコードを調整または追加できます。

ユース ケース: 日付範囲を使用した増分フィルター:

このユース ケースでは、一連の注文データをカスタム SQL で変換する必要があります。これは大規模なデータセットであるため、増分フィルタリングを含めて、増分ロードで過去 12 時間の注文のみが考慮されるようにする必要があります。

これは基本的なクエリです。

SELECT O.ORDER_ID, O.CUSTOMER_ID, OD.PRODUCT_ID, OD.QUANTITY, O.AMOUNT , OD.LAST_UPDATE_DTM FROM “mydb”.”myStorageTask”.”ORDER” O JOIN “mydb”.”myStorageTask”.”ORDER_DETAIL” OD ON O.ORDER_ID = OD.ORDER_ID

これは増分実行中に適用するフィルターで、過去 12 時間に追加された注文のみが考慮されます。

WHERE OD.UPDATE_DTM > DATEADD(hour, -12, CURRENT_TIMESTAMP())
ヒント メモSQL ベースのテーブルを実装する場合は、テーブル名を ${TABLE} 表記に置き換えることをお勧めします。これにより、開発環境から本番環境に移行する場合など、環境ごとに変わる可能性のあるデータベース名やスキーマ名をハードコーディングすることを防ぐことができます。

これは、フィルター マクロを使用し、テーブル名を ${TABLE} 表記に置き換えた完全なクエリです。

SELECT O.ORDER_ID, O.CUSTOMER_ID, OD.PRODUCT_ID, OD.QUANTITY, O.AMOUNT , OD.LAST_UPDATE_DTM FROM ${ORDER} O JOIN ${ORDER_DETAIL} OD ON O.ORDER_ID = OD.ORDER_ID {{#QLIK_FUNC_IF Q_RUN_INCREMENTAL}} WHERE OD.UPDATE_DTM > DATEADD(hour, -12, CURRENT_TIMESTAMP() ) {{/QLIK_FUNC_IF}}

これにより、初期ロード クエリが行われます。

SELECT O.ORDER_ID, O.CUSTOMER_ID, OD.PRODUCT_ID, OD.QUANTITY, O.AMOUNT , OD.LAST_UPDATE_DTM FROM ${ORDER} O JOIN ${ORDER_DETAIL} OD ON O.ORDER_ID = OD.ORDER_ID

増分ロードクエリ:

SELECT O.ORDER_ID, O.CUSTOMER_ID, OD.PRODUCT_ID, OD.QUANTITY, O.AMOUNT , OD.LAST_UPDATE_DTM FROM ${ORDER} O JOIN ${ORDER_DETAIL} OD ON O.ORDER_ID = OD.ORDER_ID WHERE OD.UPDATE_DTM > DATEADD(hour, -12, CURRENT_TIMESTAMP() )

ユース ケース: ターゲット内のデータを使用した増分フィルター:

この使用例では、一連の注文データをカスタム SQL で変換する必要があります。注文は大規模なデータセットであるため、増分フィルタリングを含めて、増分ロードでターゲット テーブル内のデータよりも新しい注文詳細レコードのみが考慮されるようにする必要があります。また、行が初期ロードまたは増分ロードによって処理されたかをマークすることもできます。

情報メモこの例からわかるように、マクロを使用して、初期ロードまたは増分ロードのクエリの任意の部分を調整できます。

これは基本的なクエリです。

SELECT O.ORDER_ID, O.CUSTOMER_ID, OD.PRODUCT_ID, OD.QUANTITY, O.AMOUNT , OD.LAST_UPDATE_DTM FROM “mydb”.”myStorageTask”.”ORDER” O JOIN “mydb”.”myStorageTask”.”ORDER_DETAIL” OD ON O.ORDER_ID = OD.ORDER_ID

これは、増分実行中に適用するフィルターです。「ORDERS_DERIVED」はターゲット データセットの名前です。

WHERE OD.UPDATE_DTM > = (SELECT MAX(LAST_UPDATE_DTM) FROM “mydb”,”myTrasformTask”.”ORDERS_DERIVED” )
ヒント メモ増分ロードでは、変換タスクによって作成されたターゲット オブジェクトに ${TABLE} 表記をマッピングすることもできます。

これは、フィルター マクロを使用し、テーブル名を ${TABLE} 表記に置き換えた完全なクエリです。ロードが初期の場合は LOADED_BYINIT に設定され、ロードが増分の場合は INCR に設定されます。

SELECT O.ORDER_ID, O.CUSTOMER_ID, OD.PRODUCT_ID, OD.QUANTITY, O.AMOUNT, OD.LAST_UPDATE_DTM, {{#QLIK_FUNC_IF Q_RUN_INITIAL_LOAD}} ‘INIT’ as LOADED_BY {{/QLIK_FUNC_IF}} {{#QLIK_FUNC_IF Q_RUN_INCREMENTAL}} ‘INCR’ as LOADED_BY {{/QLIK_FUNC_IF}} FROM ${ORDER} O JOIN ${ORDER_DETAIL} OD ON O.ORDER_ID = OD.ORDER_ID {{#QLIK_FUNC_IF Q_RUN_INCREMENTAL}} WHERE OD.UPDATE_DTM >= (SELECT MAX(LAST_UPDATE_DTM) FROM ${TARGET_TABLE} ) {{/QLIK_FUNC_IF}}

これにより、初期ロード クエリが行われます。

SELECT O.ORDER_ID, O.CUSTOMER_ID, OD.PRODUCT_ID, OD.QUANTITY, O.AMOUNT, OD.LAST_UPDATE_DTM, ‘INIT’ as LOADED_BY FROM ${ORDER} O JOIN ${ORDER_DETAIL} OD ON O.ORDER_ID = OD.ORDER_ID

増分ロードクエリ:

SELECT O.ORDER_ID, O.CUSTOMER_ID, OD.PRODUCT_ID, OD.QUANTITY, O.AMOUNT, OD.LAST_UPDATE_DTM, ‘INCR’ as LOADED_BY FROM ${ORDER} O JOIN ${ORDER_DETAIL} OD ON O.ORDER_ID = OD.ORDER_ID WHERE OD.UPDATE_DTM >= (SELECT MAX(LAST_UPDATE_DTM) FROM ${TARGET_TABLE} )

ベスト プラクティス

  • SQL 変換を追加しても、主キーは自動的に定義されません。[データセット] タブでデータセットにキーを追加します。

  • 変換された出力に列ヘッダーを手動で作成しないでください。

  • クエリが実行されるたびに異なる列が返される可能性があるため、SELECT に * を付けて使用しないでください。スキーマに変更があった場合は、それに応じてクエリを変更し、[テーブルを表示] を再度実行します。その後、列の編集やテーブルの調整ができます。

このページは役に立ちましたか?

このページまたはコンテンツに、タイポ、ステップの省略、技術的エラーなどの問題が見つかった場合は、お知らせください。改善に役立たせていただきます。