はじめに
こんにちは。と昼間の太陽を浴びながら、この記事を書いています。
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アプリを作成
- Qlik Cloud上でアプリを新規作成
- コネクション作成とデータ読み込み
-
- 「Snowflake」のコネクタを選択し、テーブルや認証情報などを入力
- Snowflake上に作成したテーブルを選択
- 右下の「次へ」をクリックし、データの読み込みが完了
- シート作成
(前回記事の手順① - 4~① - 5まで行う)
このようにシートが作成できればOKです!
②QAAの構築
- 更新データをQAAで取得するフローを作成
(前回記事の② -1~➁ - 9まで行う)
- Snowflakeにクエリを投げるフローを作成
- 「Snowflake」>「Update Record By One Field」ブロックをドラッグ&ドロップし、その前のブロックに繋ぐ
- 追加したブロックをクリックし、Connectionを設定
※account_nameはこちらを基に、利用するクラウド/リージョンからアカウント識別子を設定してください
(これに辿り着くのに苦労した、、Qlikサポートに大変感謝です)
- 作成したコネクションを選択
- 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ブロックの設定完了です。
- Reloadフローを作成
- 「Qlik Cloud Services」>「Do Reload」ブロックをドラッグ&ドロップし、その前のブロックに繋ぐ
- 追加したブロックをクリックし、Inputsを以下の通りに設定
- 「Save」をクリックし、QAAを保存
- 最後にアプリに戻り、ボタンオブジェクトのプロパティで作成したフローを選択
→このボタン押下がQAA実行のトリガーに設定されたことになる
以上で構築完了!!
問題なく動作するか試してみましょう。
実行結果
- 更新するレコードを選択、絞り込む
- 数量・更新者の入力ボックスに更新したい値を設定する
※ID、カテゴリは変数作成時に自動入力される仕組みにしています
※カテゴリは仕組み上不要ですが、ID以外の情報を確認し更新できるよう追加してみました
- 更新実行ボタンを押下
【実行前】
⇩(約10秒後)※更新時間はデータ、リロード量などに依存します
【実行後】
念の為、Snowflake上でも確認します。
成功!
おまけ
Snowflakeへの書き込みに「Update Record By One Field」ブロックを使用しましたが、
「Do Query」ブロックも使用できます。
要は直接クエリを記述して、Snowflakeに流せるブロックです。
上記で作成したフローのブロックを入れ替えて、以下クエリを記述で同処理になります。
※クエリでもスキーマ、テーブル名は大文字で書きましょ
Snowflakeのクエリを書けちゃうので、汎用性高いですね。。
(このブロックを使えば、先ほどのWhere句の制約は無くなります)
おわり
いかがでしょうか。
前回のGoogle Sheets、今回のSnowflakeだけでなく、その他対しても同様のアクションが可能です。ぜひ試してみてはいかがでしょうか!
今回含めて2回とも書き込み&リロードのみの実装でした。
実運用においては更新履歴を残したり、チャット・メールなどに通知したり、複数のアクションを組み合わせる必要があると思います。もちろんQAAで対応できます。
ぜひオペレーションの効率化や構築に苦労されていましたらご相談ください。
それではまた。
参考