これまでの経緯
Twitterの感情分析とキーフレーズ分析を行いたくて、Azure Cognitive ServiceのText Analyticsを Logic Appsから使ってみました。
Logic Apps + Text Analyticsを使ってツイートを分析する(1) キーフレーズ抽出
Logic Apps + Text Analyticsを使ってツイートを分析する(2) 感情分析

非常にかんたんに出来上がったものの、Google Spreadsheet APIのほうが書き込み負荷に追いつかないという問題が発生しました。
Google spreadsheetから普通のDBに切り替えたい
やはり更新系のデータをGoogle Spreadsheetに放り込むのには無理がありました。MySQL/PostgreSQL/SQL Serverなんでもいいから切り替えしたいのですが、お値段は安くても月6,000円近くします。個人の勉強用で寝かせておくにはちょっと厳しいです。
低価格なサーバレスのインスタンスがある
探していたら、性能は期待できないものの、ちょうどテスト用に良さそうなサーバレスのインスタンスがプレビューで出ていました。

ちょっと設定にくせがありましたが(初期設定で出てる項目も一回クリックしなければいけない)、データストア用のテーブルを作成して、アクションを組み込んであげたらすんなり動きました。
Tweetストア用テーブルを作成する
UTFデータを格納するため、本文が入るcontextはNTEXTで作成しました。
CREATE TABLE dbo.Tweets
(
id INT IDENTITY(1,1) NOT NULL,
context NTEXT NULL,
emotion float NULL,
username NVARCHAR(128) NULL,
created_at DATETIME2 NULL
)
ビルトインのクエリエディタでSQLを流せるので便利です。

データの書き込み先をGoogle SpreadsheetからSQL Serverに変更する
最初のSQL Server接続作成で少しハマるかもしれません。リソースの選択、デフォルトで出ているものがあっても一度クリックして再選択して確定する必要があります。その先はテーブル構造が読み出しできるので、Google Spreadsheet同様に設定します。

これで無事、データが入りました。
SQL ServerもDOMOでつながる
DOMOを見ると、SQL Data Warehouse(本気でエンタープライズで使う用なのでお値段非常に良い)のコネクタがありますが、これを使うとDOMOで普通にSQL Serverにも接続可能です。
SQL Serverインスタンス画面の上にあるサーバファイアーウォールの設定で、接続元のIPを設定してあげます。
IPアドレスのホワイトリストの設定をDOMOのWhiteList記載を見ながら設定してください。

次に、クラウドのAppコネクタを設定してあげます。


あとは普段の設定と同じように使えるはずです。
今回の実験のコストは
お値段みて、びっくりしました。お安くないです。特徴的なデータをすぐに拾えるように、京急線(ちょうど事故で急上昇だった)とか、いつもすごい勢いで流れてる宝塚のワードを解析したせいでしょう。
Text Analytics自体は1,000テキストレコードで224円なので、一ヶ月数千円で済むかと思ったら、わずか3日くらいいじっただけで2万円近くのトータルコストになりました。Logic Apps自体も、1コネクタ1回で0.014円の、1アクションで0.003円なので、検索ワードに対するデータ量をみくびった私のミスです。
1ツイートを2回Text Analytics処理しているので、__1万ツイート処理したら4480円。ちょっとバズったらすぐにお小遣いを超えてしまいます。__
実験するときは、もっと流量の普通なキーワードを選びましょう。ホットトピックを選ぶと課金破産します。気がついてよかった。

Emotionなどの実際に利用するときは、サンプリングで十分なはずなので、うまく低コストに作りましょう。
コスト削減策
- リツイート数をカウントするようなものにはLogic Appsは使わない
- RTだけの、意味の少ない文章はText Analyticsに送り込む前に先に取り除く
- (できれば)Tweet取得上限件数を作る(これは難しいかも)