Qlik Senseナレッジ - INSIGHT LAB

【Qlik Application Automation】Snowflakeへの書き込み&リロード

作成者: Koh|2024年11月08日

はじめに

こんにちは。と昼間の太陽を浴びながら、この記事を書いています。
11月になり冬の訪れを少しずつ感じる気候になってきました。

さて、本題に参りましょう。
少し前に出したこちらの記事は、既にお読みいただいたでしょうか。

こちらの最後で記載した通り、
今回はSnowflake上のテーブルに対して書き込みをしてみたいと思います。

前回同様に以下のような流れです。
①Snowflake上のテーブルをQlik Senseで可視化
➁Qlik SenseからQAAをRun
③Qlik Senseアプリ上で更新を確認

準備

以下を用意しましょう!

  • Qlik Cloudアカウント
  • Automation Creatorロール(Qlik Cloudアカウントに付与してもらう)
  • Snowflakeアカウント(テーブル、ウェアハウスなどの利用権限付与忘れずに)
  • サンプルデータ(前回同様)
ID カテゴリ 数量 更新者
1 A 10 タナカ
2 B 10 タナカ
3 C 10 タナカ


※Snowflake上でのテーブル作成ステップは割愛します
※QSアプリの作成、QAAのフロー作成は一部割愛します(前回の記事を確認してください)

いざ!

①データ確認&更新用のQlik Senseアプリを作成

  1. Qlik Cloud上でアプリを新規作成
  2. コネクション作成とデータ読み込み
      1. 「Snowflake」のコネクタを選択し、テーブルや認証情報などを入力

      2. Snowflake上に作成したテーブルを選択
      3. 右下の「次へ」をクリックし、データの読み込みが完了
  3. シート作成
    (前回記事の手順① - 4~① - 5まで行う)

このようにシートが作成できればOKです!


②QAAの構築

  1. 更新データをQAAで取得するフローを作成
    (前回記事の② -1~➁ - 9まで行う)
  2. Snowflakeにクエリを投げるフローを作成
    1. 「Snowflake」>「Update Record By One Field」ブロックをドラッグ&ドロップし、その前のブロックに繋ぐ
    2. 追加したブロックをクリックし、Connectionを設定



      ※account_nameはこちらを基に、利用するクラウド/リージョンからアカウント識別子を設定してください
      (これに辿り着くのに苦労した、、Qlikサポートに大変感謝です)

    3. 作成したコネクションを選択
      1. Inputsタブで更新内容を設定
        ・Tablename: <スキーマ名>.<テーブル名>
        ・Where Key: ID
        ・Where Value: [Get Expression Value](= アプリで選択したIDの値)
        ・Data Key: 更新する項目名(数量、更新者それぞれ)
        ・Data Value:  [Get Expression Value 2/3](= アプリで選択した数量、更新者の値)
        テーブルで考えると、こんなイメージです。(ID=2のレコードを更新する時)Where Key/ValueはSQLのWhere句にあたる部分ですが、複数条件の設定はできません


        以上でSnowflakeブロックの設定完了です。 
  3. Reloadフローを作成
    1. 「Qlik Cloud Services」>「Do Reload」ブロックをドラッグ&ドロップし、その前のブロックに繋ぐ
    2. 追加したブロックをクリックし、Inputsを以下の通りに設定

  4. 「Save」をクリックし、QAAを保存
  5. 最後にアプリに戻り、ボタンオブジェクトのプロパティで作成したフローを選択
    →このボタン押下がQAA実行のトリガーに設定されたことになる

以上で構築完了!!
問題なく動作するか試してみましょう。

実行結果

  1. 更新するレコードを選択、絞り込む
  2. 数量・更新者の入力ボックスに更新したい値を設定する
    ※ID、カテゴリは変数作成時に自動入力される仕組みにしています
    ※カテゴリは仕組み上不要ですが、ID以外の情報を確認し更新できるよう追加してみました
  3. 更新実行ボタンを押下

【実行前】

⇩(約10秒後)※更新時間はデータ、リロード量などに依存します

【実行後】

念の為、Snowflake上でも確認します。

成功!

おまけ

Snowflakeへの書き込みに「Update Record By One Field」ブロックを使用しましたが、
「Do Query」ブロックも使用できます。
要は直接クエリを記述して、Snowflakeに流せるブロックです。

上記で作成したフローのブロックを入れ替えて、以下クエリを記述で同処理になります。

※クエリでもスキーマ、テーブル名は大文字で書きましょ

Snowflakeのクエリを書けちゃうので、汎用性高いですね。。
(このブロックを使えば、先ほどのWhere句の制約は無くなります)

おわり

いかがでしょうか。

前回のGoogle Sheets、今回のSnowflakeだけでなく、その他対しても同様のアクションが可能です。ぜひ試してみてはいかがでしょうか!

今回含めて2回とも書き込み&リロードのみの実装でした。
実運用においては更新履歴を残したり、チャット・メールなどに通知したり、複数のアクションを組み合わせる必要があると思います。もちろんQAAで対応できます。

ぜひオペレーションの効率化や構築に苦労されていましたらご相談ください。
それではまた。

参考