唐突ですがMatillionユーザーの皆様
特定のテーブルの値を参照して、それをもとにフィルタをかけたり集計対象を仕分けしたりしたくなること、あると思います。
(Youtubeの超ピンポイントターゲティング広告並みの呼びかけ)
例えば、「GoogleSpreadSheetで管理している設定ファイルをBigQueryテーブルとしてインポート、その値を元にフィルタ条件を操作したい」とか「前のコンポーネントで集計した陽性/陰性ラベルごとのカウント数をテーブル出力、それをもとに不均衡なラベルが陽陰同数になるようアンダーサンプリングしてから、機械学習モデル訓練用APIに流し込みたい」とか。
かなりイケてる運用だとは思いませんか?
そこでネックになるのがテーブルの値をジョブ変数として利用できるのか?ということです。「多分できるだろうなーでもまー今じゃなくていっか」とずっと先延ばしにしてたんですが、最近試してみたらどうやら結構簡単にできそうだったので、この場で共有しておこうと思います。
それでは早速いきましょう
ーーーーーーーーーーーーーーーーーーーーーーーーーーー
まずはMatillionの操作画面にいき、以下のようなコンポーネントを設置します
メインは「テーブル読込→変数セット」というやつなんですが、一つ一つ見ていきましょう。
まずはパッケージインストール。Matillionでpythonを使うときのバイブルとされているこちらの記事を参考にしまして、必要なパッケージをインストールしておきます。
# pipのアップグレード
python3 -m pip install --upgrade pip --user
# 必要パッケージをインストール
python3 -m pip install pandas --user
python3 -m pip install pyarrow --user
python3 -m pip install google-cloud-storage --user
次に、メインである「テーブル読込→変数セット」の中身はこんな感じ↓
import google.cloud.storage
from google.cloud import bigquery
client = bigquery.Client()
# 発行クエリ
sql = """ SELECT AVG(IFNULL(pageviews, 0)) AS avg_daily_pv
FROM `{project}.{dataset_id}.{table_name}` """.format(
project=MY_PROJECT,
dataset_id=MY_DATASET_ID,
table_name=TABLE_NAME
)
# クエリを実行してデータフレームに格納
df = client.query(sql).to_dataframe()
# 値を指定して変数にセット
avg_daily_pv = df['avg_daily_pv'].values[0]
context.updateVariable('avg_daily_pv', avg_daily_pv)
ここでavg_daily_pv(これがテーブルの値をセットしたい変数、なので空でいい)、MY_PROJECT_ID(今回は環境変数)、MY_DATASET_ID、TABLE_NAME(読み込みたい値が入っているテーブル)などは適当に設定しておきます↓
対象テーブルはこちらの記事でお見せした、GoogleAnalyticsのサンプルデータを日次粒度で集計したものを使います。例えば以下では、日次PV数の平均を計算し、その平均をジョブ変数として使いたい、といったケースを想定してみましょう。
改めてこのpythonコンポーネントの中身を見ていきましょう。
まず「発行クエリ」とあるところで、該当テーブルを読み込んで変数として使いたい値が出るようなクエリを記述します。今回は日次のPV数の平均が欲しいので、そのようなクエリを記述します。
次に「クエリを実行してデータフレームに格納」とあるところで、実際にクエリを実行し、その値をpandasのデータフレームとして読み込みます。
最後に「値を指定して変数にセット」の部分で、欲しい値を取り出し、ジョブ変数であるavg_pv_dailyにセットしています。
一応読み込んだ変数を確認してみます。
ちゃんと日次PVの平均が変数としてセットされてることがわかりますね〜
というわけで今回は以上になります。ご参考になれば幸いです。
気になった方はぜひチャンネル登録を!!!↓↓↓↓↓(そんなものはない)
(追記)
チャンネルありました↓↓↓
興味がありましたらぜひこちらの登録をお願いします。自動機械学習ツールForecastFlowの説明や、実践重視のデータサイエンスオンラインサロンの動画などがあります。たまに僕もMatillionとか特徴量エンジニアリングの話してます。
https://www.youtube.com/c/GRIinc
↓個人的イチオシ動画