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

SQL 変換の追加

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

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

SQL 変換の追加

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

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

    [名前] に変換の名前を設定します。その他の設定の詳細については、「設定」を参照してください。

    SQL 変換を作成する準備ができたら、 [追加] をクリックします。

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

  2. クエリ パネルに SQL ベースのテーブルを返すクエリを記述します。

    詳細については、「SQL クエリの編集」を参照してください。

  3. [クエリを実行] をクリックします。

    この操作により、メタデータとデータのプレビューが取得されます。

  4. [パラメーター] でパラメーターを確認します。

    詳細については、「パラメーター」を参照してください。

  5. [メタデータ] でプライマリ キーを設定します。

    詳細については、「メタデータ」を参照してください。

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

SQL クエリの編集

クエリ パネルに SQL ベースのテーブルを返すクエリを入力します。クエリは選択したソース データセットからのみ読み取り可能ですが、 [追加] でさらにソース データセットを追加できます。

  • [オブジェクト] からデータセットをロードするステートメントを作成できます。もっと見る をクリックしてから、 [エディターで SELECT 文を生成] をクリックします。

  • データセットの名前をクリップボードにコピーするには、もっと見る をクリックしてから、 [コピー] をクリックします。

  • データセットまたは列名をエディターに移動するには、 [>] をクリックします。

  • エディターでテキストを検索して置換するには、検索 をクリックします。

情報メモ[SQL assistant] を使用して、生成 AI によるクエリを生成できます。詳細については、「テキストプロンプトから SQL 変換を生成する」を参照してください。SQL assistantQlik Cloud Government では使用できません。

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

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

キーボード ショートカット

情報メモキーボードのショートカットは、Windows を想定しています。macOS の場合、Ctrlの 代わりに Command を使用します。
  • Ctrl+F 検索と置換

  • Ctrl+/ 現在の行のコメントアウト/コメント解除

  • Ctrl+Enter クエリの実行

  • Ctrl+Z 元に戻す

  • Ctrl+Y やり直し

結果のプレビュー

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

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

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

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

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

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

  • 最後に実行されたクエリの最終実行時刻と期間を表示するには、 [最後に実行されたクエリ] をクリックします。

結果のフィルタリング

1 つ以上の列で結果をフィルタリングできます。

  • フィルタリングする最初の列で もっと見る をクリックし、次に [フィルター] をクリックします。

    使用する演算子とフィルタリングする値を選択します。

    [フィルターを追加] をクリックすると、さらに列フィルターを追加できます。

フィルターは既存のサンプル データにのみ影響します。

結果のソート

データ サンプルを特定の列順にソートできます。

  • ソートする列の もっと見る をクリックし、 [昇順でソート] または [降順でソート] をクリックします。

ソートは、既存のサンプル データのみに作用します。フィルターを使用して 2024 年の注文のみを含め、ソート順序を逆にした場合でも、サンプル データには 2024 年の注文のみが含まれます。

表示される列の管理

結果に表示される列を選択できます。変換を保存しても選択内容は保存されません。

  • 列を非表示にするには、列で もっと見る をクリックしてから、 [列を非表示] をクリックします。

  • すべての列の表示を管理するには、任意の列で もっと見る をクリックしてから、 [列を表示] をクリックします。

パラメーター

SELECT クエリのパラメーターを変更するには、 [パラメーター] をクリックします。パラメーターは、ソース オブジェクトまたはターゲット オブジェクトにマッピングする必要があります。

パラメーターは、次の場合に自動的にマッピングされます。

  • [オブジェクト] で [エディターで SELECT 文を生成] を使用します。

  • データセットまたは列名をエディターに移動するには、 [>] をクリックします。

  • パラメーター名は、 [オブジェクト] 内のテーブルのテーブル名と一致します。

情報メモ任意のパラメーター名を使用する場合は、パラメーターを手動でマッピングする必要があります。データセット名と一致するパラメーター名のみが自動的にマッピングされます。

可能なマッピング先

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

  • 現在の構造

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

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

ヒント メモパラメーターを参照に置き換えて、クエリを読みやすくすることができます。パラメーターの値を変更すると、SELECT クエリの参照も変更されます。

メタデータ

[メタデータ] で、メタデータの設定を編集できます。

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

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

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

クエリの実行

開発中はいつでも、 [クエリを実行] をクリックしてクエリを実行できます。初めてクエリを実行すると、メタデータが取得されます。クエリが実行されると、 [メタデータ] に移動してプライマリ キーを設定できます。この設定は、変換を完了するために必要となります。

情報メモエディターに複数のクエリが含まれている場合は、クエリを選択して [クエリを実行] をクリックすることで、単一のクエリを実行できます。

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

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

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

  • 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 変換の設定を編集するには、設定 をクリックします。

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

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

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

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

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

  • [履歴データ ストア (タイプ 2)] で、履歴データを保存するかどうかを選択します。データ タスク設定から設定を継承することを選択できます。この設定では、 [実体化] がオンになっている必要があります。

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

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

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

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

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

    情報メモクエリがターゲットに存在する必要があるすべてのレコードを選択する場合は、増分ロードをオフに設定します。選択されていないレコードはターゲットで削除されます。
  • ベスト プラクティス

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

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

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

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

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