はじめに
SnowflakeのオフィスでCORTEXハンズオンを受けてきました。
いろいろ新たな知識が増えた気がしますが、一番刺さったAI_FILTER関数についてだけ、取り急ぎoutputしておきます。
※現時点でAI_FILTER関数はPublic Previewです。
現地からのポスト
リアルタイムでのXのポストは下記です。
説明
このポストの写真のクエリを改めて書くと
SELECT
review_id,
review_text
FROM CUSTOMER_REVIEWS
WHERE AI_FILTER(CONCAT('ポジティブな内容か?: ', review_text)) = TRUE;
review_textがポジティブなものを絞って出力するという、なんかヤバいWHERE句なんです。
今までのデータの持ち方だとIS_POSITIVEみたいなカラムを用意しておいて、そこに事前にSENTIMENT関数で判定しておいたTRUE/FALSEの結果を入れたうえで
WHERE IS_POSITIVE = TRUE
ってやると思うんです。
訂正
SENTIMENT関数は-1~1の間の数値を返すのでWHERE句は数値の判定を行うものでした。
そんな手間を一足飛びで飛び越してテキストの値そのものにAI_FILTER関数をかけることでできてしまうという。
WHERE句の概念が崩壊してきました。
帰宅してからの復習
実際にハンズオンでやった部分、家で改めて再実行したのでクエリや結果も記しておきます。
-- ロール、DB、スキーマ、ウェアハウスの設定
USE ROLE accountadmin;
USE DATABASE snowretail_db;
USE SCHEMA snowretail_schema;
USE warehouse compute_wh;
table CUSTOMER_REVIEWS;
↑最後のtable テーブル名;は前回の投稿をご覧ください。
とりあえずCUSTOMER_REVIEWSをWHERE句なしで出してみました。
このCUSTOMER_REVIEWSテーブルのreview_text列に対してAI_FILTER関数をかましました。
-- AI_FILTER関数による条件フィルタリング
SELECT
review_id,
review_text,
AI_FILTER(CONCAT('この商品に関するポジティブな評価が含まれているか?: ', review_text)) as is_positive_review
FROM CUSTOMER_REVIEWS
WHERE AI_FILTER(CONCAT('商品の品質について言及されているか?: ', review_text)) = TRUE
LIMIT 10;
WHERE句だけでなく、SELECT項目の方にもAI_FILTER関数があります。
まずWHERE句でreview_text列の値が「商品の品質について言及されているか?」でTRUEのものに絞っています。
そのうえでreview_text列の値が「この商品に関するポジティブな評価が含まれているか?」を判定してTRUE/FALSEで返すようにしています。
WHERE句だけに使うものではないと。( ..)φメモメモ
※今更ですがAI_FILTER関数はBool値を返すものです。
この結果の画像を見ても、TRUEになっているものは確かにポジティブなことが書いてあるし、FALSEのものはネガティブなことが書いてあります。
いや、むちゃんこすごいな。
JOINの際に両方に対してAI_FILTER関数かまして結合させることもできるそうです。
注)ただしその場合はテーブルの件数が500件以下であることの制約があるとのこと。
他にも
AI_AGG
AI_SUMMERIZE_AGG
AI_CLASSIFY
AI_SIMIRALITY
などもありまして、それぞれ試してみました。(省略。)