REVISIO Tech Blog

https://tech.revisio.co.jp/

テレビデータ分析スタートアップ REVISIO(旧TVISION INSIGHTS) が運営する技術ブログ。

フィード

記事のアイキャッチ画像
SnowflakeのSQLチューニングヒント
REVISIO Tech Blog
はじめに DBManiaです。 突然ですが、みなさんはSnowflakeのパフォーマンスチューニングは行われていますか? パフォーマンスチューニングはWarehouseのスケールアップとクエリーアクセラレーターで十分という方もいらっしゃるかも知れません。 しかし、実はSnowflakeは少しSQLのチューニングをしただけで2時間かかるクエリーが30秒で終わるようになることもあります。 今回はREVISIOで実践しているSQLパフォーマンスチューニング方法を公開したいと思います。 SQLチューニングに必須なこと。 みなさんは小学生のころに、相手の気持ちになって考えましょうと言われたことはないでし…
3日前
記事のアイキャッチ画像
スポットA-URシミュレーターを作りました
REVISIO Tech Blog
はじめに REVISIOデータサイエンティストの本川です。(mtkwT (Tetsuya Motokawa) · GitHub) 12/1にスポットA-URシミュレーターというテレビCMプラニングためのツールをローンチしたので、その裏側の仕組みについて書き残します。 ツール紹介 スポットA-URシミュレーターは、テレビCMのバイイング方法の1つである「スポットCM」におけるプランニングツールです。 テレビ業界ではこれまでグロスのリーチ指標(GRPやTRPなど)が主に使用されていましたが、近年ユニークリーチ指標も着目されるようになりました。 A-URはAttention Unique Reach…
5ヶ月前
記事のアイキャッチ画像
SnowflakeのUDFやPROCEDUREでdefaultを使う
REVISIO Tech Blog
DBManiaです。 弊社がSnowflake社のData Drivers Awards 2023にて、Data Driver of the Yearを受賞してから初の更新となります。 Snowflakeに新機能としてUDFとPROCEDUREにオプション引数が実装されました。 この機能の何が凄いのか、具体例で説明したいと思います。 作成するFUNCTIONの仕様 日付と経過日数を指定すると、指定した日付から指定した経過日数の「YYYY年MM月DD日」という文字列を返すFUNCTIONを作る。 ただし、日付を指定しない場合は本日を、日数を指定しなければ当日の文字列を返す。 -- (2023-1…
6ヶ月前
記事のアイキャッチ画像
StreamlitとCognitoを使ってログイン機能を実装してみた
REVISIO Tech Blog
REVISIOのエンジニア植草です。 先日片岡から Streamlitについて投稿がございましたが、Snowflake上でStreamlitのコンテンツを 扱えるようになり、Snowflake・Streamlitのアップデートのスピード感を目の当たりにしているところです。 私もStreamlitを触り始めて早二ヶ月、いろんなコンテンツが簡単に作れて本当に優れたフレームワークだと日々感じています。 今回は開発したコンテンツを外部公開する場合を想定し、ログイン機能についてStreamlitとAWS Cognitoを使って実装してみました。 まずは作ったサンプル画面です。 3つの画面で構成されていま…
7ヶ月前
記事のアイキャッチ画像
Snowflakeのクエリー結果キャッシュが効く条件を調べてみた
REVISIO Tech Blog
つい先日、"SnowflakeのHands On Essentials - Data Warehouse"を獲得したDBManiaです。 相変わらずSnowflakeのDWHとしての性能、機能に惚れ込んで、使い倒す日々を送っております。 クエリー結果キャッシュとは さて、Snowflakeのパフォーマンスを上げるための大きなポイントにクエリー結果キャッシュを使用する、というのがあります。 クエリー結果キャッシュというのは、過去に実行されたSQLをある程度の時間(基本は24時間)、Snowflakeのクラウドサービスレイヤー上に保管しておく仕組みで、次に同じSQLが要求されたときにはその下のクエ…
9ヶ月前
記事のアイキャッチ画像
Streamlit in Snowflakeでアプリを作る方法
REVISIO Tech Blog
REVISIOのエンジニア片岡です。 Pythonのみで簡単にダッシュボード的なWebアプリが作れるフレームワークStreamlitですが、昨年Snowflakeに買収され、 Snowflakeのウェアハウス(サーバー)上で実行してユーザーへ提供できるようになりました。 Snowflake Native AppのUIとしてStreamlitを使用 Native AppではなくシンプルにSnowflake上でStreamlitを実行 の2種類がありますが、今回は2について、どのような開発・利用体験となるのか確認してみました。 おおまかな流れは以下のようになります。 Streamlitアプリをロー…
9ヶ月前
記事のアイキャッチ画像
Docker 4.19でコンテナ・ホストOS間ネットワークが5倍高速になったらしいので試してみる
REVISIO Tech Blog
エンジニアの片岡です。 先日、Docker Desktopの最新版4.19がリリースされました。 macOSでDockerコンテナとホストOSの間のネットワークが5倍高速になったとの情報を見て、もしそのような高速化がされているなら嬉しいなということで、早速試してみました。 www.publickey1.jp また、昨年12月にリリースされた4.15で、コンテナとホストOS間のファイル共有実装として新たなVirtioFSというものが使用可能になりました。 既存のgRPC FUSEから新しいVirtioFSに変えることで高速化するとのことです。 これも合わせて試したいと思います。 www.publ…
1年前
記事のアイキャッチ画像
SnowflakeのSnowsightからGUIベースで外部ステージが作成できるようになりました。
REVISIO Tech Blog
SnowflakeのSnowsightから、GUIベースで外部ステージを作成できる機能がプレビューされました。 これでお手軽に外部ステージが作成できますね。 残念ながら日本語ドキュメントはまだ用意されていないようですので、英文のドキュメントを参考に、さっそく作成してみました。 左ペインの「データ」メニューから「データベース」、その中の「スキーマ」を選択し、右上の「作成」から「ステージ」を選びます。 弊社ではS3にストレージ統合を作成していますので、そちらを利用します。 ステージの作成メニューです。一部完全には日本語化されていませんが、ご愛敬ですね。 ステージ名を入力し、URLを入れます。 必要…
1年前
記事のアイキャッチ画像
Snowflakeのアカウント複製で開発環境を作ってみた
REVISIO Tech Blog
DBManiaです。Snowflakeでアカウント複製機能がGAになりましたね。 これでレプリケーションやフェイルオーバーが自由にできるようになったのですが、アカウント複製でできるのはそれだけではありません。 この機能を利用すると、本番環境から独立した開発環境を、しかもBUSINESS CRITICALでないENTERPRISE契約でも簡単に構築することもできるのです。 アカウントを分けることで、ユーザーやロールを本番環境と完全に独立でき、また「うっかり本番環境に変更を加えてしまった!」といった事故を防げます。 実際にアカウント複製を利用して開発環境を構築してみましたので、その方法について書き…
1年前
記事のアイキャッチ画像
SnowflakeでDAGを活用するための3つのTips
REVISIO Tech Blog
最近Snowflakeの記事を投稿していますDBManiaです。 今回はSnowflakeで有向非巡回グラフ(Directed Acyclic Graph、以下DAGと表記)と、DAGを組む際にハマりそうなポイントについて説明いたします。 SnowflakeのDAGとは 前準備 Tips1:TASKはRESUMEしないと動作しないが、動作する場合もある さらに混迷深まる RESUME問題のまとめ Tips2:DAGではルートTASKは1つしか設定できない。 Tips3:まったく処理を行わないTASKを作成する裏技 最後に SnowflakeのDAGとは SnowflakeのDAGはTASKの集…
1年前
記事のアイキャッチ画像
SNOWDAYで紹介しきれなかったRedshiftとSnowflakeの違い42選
REVISIO Tech Blog
REVISIOのエンジニア片岡です。 先日2月14日、Snowflakeの大規模イベントSNOWDAY JAPANに参加・登壇してきました。 登壇資料はこちら。 speakerdeck.com ANAインターコンチネンタルホテル東京+オンラインでの開催でしたが、オフラインイベントの独特の雰囲気と盛り上がりを久しぶりに体感できて非常に楽しかったです。 沢山の興味深いセッションや趣向を凝らした会場設営、コミュニティイベント含めてSnowflakeの世界観が感じられたイベントでした。 さて、タイトルにあるようにSNOWDAYでは時間の都合で紹介しきれなかった部分があったので、ここに書いておこうと思い…
1年前
記事のアイキャッチ画像
SnowflakeのTimeTravelはViewにも適用できます。
REVISIO Tech Blog
はじめに 弊社でRedshiftから移行したDWH、Snowflake(移行についてはSNOWDAY JAPANで発表させていただきました)に実装されているTimeTravel機能ですが、これは非常に便利な機能です。 どういう機能かはSnowflakeを使われた方なら存知だとは思いますが、簡単に説明すると、「ある日時のデータベースの状態を再現する」機能です。 たとえば、ある処理を実行した結果、データがおかしくなったので、原因を調査したいが差分が取れない、うっかりデータを削除してしまったが元に戻したい、といったケースはDB使っている人なら一度は経験していると思います。こういった場合、通常のDBで…
1年前
記事のアイキャッチ画像
RedshiftからSnowflakeへの移行 & Snowflakeイベント登壇
REVISIO Tech Blog
REVISIOのエンジニア片岡です。 当社では創業以来、ビジネスの根幹であるテレビ視聴データを格納・処理するデータウェアハウスとしてAmazon Redshiftを使ってきました。 約7年の間、Redshiftの機能の進化に合わせ、クラスタータイプやサイズをアップデートしながら運用してきたのですが、昨年Snowflakeに移行する大きな決断をし、作業を進めて12月に完了しました。 背景 ビジネスが拡大し、顧客・ユーザーの増加やデータ量増加、ワークロード増加という状況の中でRedshiftのパフォーマンス面や管理面での課題が大きくなっていき、それをカバーするためにクラスターのサイズアップを行った…
1年前
記事のアイキャッチ画像
SnowflakeのSEQ関数は、慎重に使いましょう。
REVISIO Tech Blog
みなさん、Snowflakeは使っていますか? 極めて合理的で高い性能を持っているDataWareHouse、Snowflake。 弊社ではメインのDWHとして採用し、その性能に非常に満足しています。 今回はSnowflakeで連番を作るのにサンプルとしてよく使われているSEQ関数について書きます。 SEQ関数の前にまずはGENERATOR SEQ関数で連番を使うために、まずはGENERATOR関数について説明します。 GENERATOR関数は関数リファレンスでは「行を作成します」と書かれています。まさにこのとおりなのですが、「列を持たない」というキーワードを追加するともっとわかりやすいかも知…
1年前
記事のアイキャッチ画像
SQL: 組み合わせにビット演算を使ったGROUP BY
REVISIO Tech Blog
はじめに こんにちは、データアナリティクスチームのHuangです。 SQL関連について記事を書きました。 データの抽出となるとSQLはほぼ毎日のように使われている言語ではありますが、実際の仕事現場では教科書に載っているようなケースがほとんど存在してません。実際の業務では教科書には載っていないような要件が多くあり、印象に残っているケースがあります。 その中でも印象的なものを要件と解決方法について例を交えながら紹介していきます。 背景 膨大なデータを集計するときに、GROUP BY文はよく使われます。 例えばこのテーブルがあるとします。 とあるチェーン店のデータベースに、ある会員が登録した店舗の情…
2年前
記事のアイキャッチ画像
テレビCMの効果をウェブ検索データで推定する
REVISIO Tech Blog
Google TrendsのデータでテレビCMの(ウェブ検索数への貢献の)効果を推定するアプローチを紹介します。
3年前
記事のアイキャッチ画像
Githubでマージされたのクエリを自動的にRedashに反映する運用について
REVISIO Tech Blog
はじめに こんにちは。データサイエンティストの曽我です。 Redashというダッシュボードツールがあるのですがご存知でしょうか。 ダッシュボード機能だけではなく、クエリをパラメータで動的に変更できたりする優れものです。そんな便利なRedashですが、Redashで使用しているクエリの管理はどうされていますか? 弊社では試行錯誤の末、GithubでマージされたクエリがRedashに自動的に反映されるようにしています。 この記事ではどのようにRedashを管理、運用しているのかについて書いていきます。 背景 実際にRedashを使い始めてから不便と言いますか、痒いところに手が届かないと思うことがで…
3年前
記事のアイキャッチ画像
ビジネス課題を解決するための指標を考える〜Cスコア編〜
REVISIO Tech Blog
はじめに データサイエンティストをしている曽我です。 弊社ではテレビ番組やテレビCMの見られ方に関して様々なデータを取得しています。 取得したデータからビジネス課題を解決するために指標を作りクライアントへ提供をしている会社になります。 指標には様々な種類があり、注視度(テレビへ人の顔が向けられていたか)が最たる例になります。 今回はその中でもCスコア(クリエイティブスコア)について触れていきます。 他にどんな指標があるのか興味を持たれましたら弊社HPよりお問い合わせください。 ビジネス課題とCスコアの生まれた背景 テレビCMの注視を測定していると1つの課題が出てきます。 それはクリエイティブ(…
3年前
記事のアイキャッチ画像
Docker Compose + libfaketimeでテスト用コンテナの日時を固定する
REVISIO Tech Blog
久しぶりのブログになってしまいました。 開発チームのエンジニア、片岡です。 今回は、ユニットテストにおける時間の問題についてのTipsです。 ユニットテストを行う際に手間のかかる作業として、テスト用環境の構築があります。 今はDockerがあるのでかなり手間が減りました。 ユニットテストは何度やっても同じテストができて、同じ結果になることが重要ですが、その際に問題となるのはシステム日時です。 「今日」とか「今月」などの日付・時刻によって返す結果が変わる処理があった場合にどうやって環境を設定しておけばよいか。 Docker Composeとlibfaketimeを使ってシステム日時を固定すること…
3年前
記事のアイキャッチ画像
変数重要度とPartial Dependence Plotでブラックボックスモデルを解釈する
REVISIO Tech Blog
はじめに モデルの学習 変数重要度 Partial Dependence Plot まとめ 参考 はじめに こんにちは、データサイエンティストの森下です。 本記事では所謂ブラックボックスモデルを解釈する方法を紹介したいと思います。 RF/GBDT/NNなどの機械学習モデルは古典的な線形回帰モデルよりも高い予測精度が得られる一方で、インプットとアウトプットの関係がよくわからないという解釈性の問題を抱えています。 この予測精度と解釈性のトレードオフでどちらに重点を置くかは解くべきタスクによって変わってくると思いますが、たとえばTVISIONでのデータ分析はクライアントの意思決定に繋げる必要があり、…
5年前
記事のアイキャッチ画像
purrrとbroomで複数の回帰モデルを効率的に管理する
REVISIO Tech Blog
はじめまして。データサイエンティストの森下です。 TVISIONでは探索的にデータを見てく段階では、可視化に加えて複数の回帰モデルを作成して検討する、ということをよくやっています。 モデルの数が少ない場合は個別にモデルを作成してsummary()で見ていく事もできますが、モデルの数が増えるにつれてそのやり方では管理が難しくなってきます。 そこで、本記事では、purrrのmap()とbroomのtidy(), glance()を用いて複数の回帰モデルを効率的に扱う方法を紹介したいと思います。 まずはライブラリを読み込みます。tidyverseはデータハンドリングと可視化のためのパッケージ群です*…
5年前
記事のアイキャッチ画像
データ分析の信頼性をチームで上げるモブレビューの導入
REVISIO Tech Blog
こんにちは。データサイエンティストのshobyです。 今回は、データ分析の信頼性をチームで上げるために、皆でコードレビューをするモブレビューを導入した話をご紹介します。 モブレビューを導入することにより、分析要件や分析手法の妥当性をチームとして保証し、より精度の高い分析結果を出すことができるようになりました。 概要 TVISION INSIGHTSにおける分析プロセス TVISION INSIGHTSでの分析における課題 モブレビューとは TVISION流モブレビューの進め方 モブレビュー導入による効果 TVISION INSIGHTSにおける分析プロセス TVISION INSIGHTSでは…
5年前
記事のアイキャッチ画像
RedShiftでETL処理向けの擬似JSON型カラムViewを作成する
REVISIO Tech Blog
こんにちは。データサイエンティスト兼、データ基盤エンジニアのshobyです。 今回は、RedShiftでETL処理向けに、擬似的にJSON型のカラムを持つViewを作成する方法をご紹介します。 擬似JSON型のカラムを使用することで、データマートへデータを移す際のデータ量を圧縮することができ、処理を効率化することができます。 概要 RedShiftにおけるJSON型の対応状況 擬似的なJSON型の用途 Viewを用いたETL処理 擬似JSONカラムの作成 TVISION INSIGHTSでの活用事例 RedShiftにおけるJSON型の対応状況 RedShiftはPostgreSQL互換の分散…
6年前
記事のアイキャッチ画像
AWS Data Pipelineのハマりポイント
REVISIO Tech Blog
こんにちは、エンジニアの taross-f です。 弊社では様々なログデータをAWS Batch, AWS Lambda, AWS Data Pipeline などを組み合わせてETLを行っています。 その中で先日Datapipelineを触っていろいろハマるポイントがあったので、同じ気持ちになる人を減らすためにも共有してみたいと思います。 ※本記事はAWS Data Pipelineの使い方自体は説明しません そもそもAWS Data Pipeline とは AWS Data Pipeline とは - AWS Data Pipeline AWS Data Pipeline は、データの移動…
6年前
記事のアイキャッチ画像
DataGripからAmazon Athenaを利用する
REVISIO Tech Blog
こんにちは。データサイエンティスト兼、データ基盤エンジニアのshobyです。 今回は、DataGripからAmazon Athenaを使用する方法をご紹介します。 概要 DataGripとAthenaについて DataGripからAthenaを利用する DataGripとAthenaについて DataGripはJetBrains製のCross PlatformなSQL用IDE、AthenaはS3に対してクエリが発行できるサーバーレスの分析環境です。 DataGripからAthenaを利用することで、IDEならではの強力なコード補完機能を利用しつつ、S3上のファイルに対してクエリを発行することが…
6年前
記事のアイキャッチ画像
RedShiftでの日時処理を行う際の注意点
REVISIO Tech Blog
こんにちは。データサイエンティスト兼、データ基盤エンジニアのshobyです。 RedShiftの日時処理、紛らわしいですよね。 今回は、RedShiftで日時処理をする際の注意点をご紹介します。 概要 現在日時取得の注意点 曜日取得の注意点 日時間隔取得の注意点 現在日時取得の注意点 現在日時を取得する際は、紛らわしい関数名と、タイムゾーンに注意する必要があります。 まず、現在の日時をDATE型で取得するのがCURRENT_DATE、 TIMESTAMP型で取得するのがGETDATEです。 上記関数で取得できる現在時刻は、UTCであるため、JSTで日時を格納しているカラムと比較するには、以下の…
6年前
記事のアイキャッチ画像
S3のデータを別アカウントの別バケットにコピーする際の権限設定
REVISIO Tech Blog
こんにちは。データサイエンティスト兼、データ基盤エンジニアのshobyです。 TVISION INSIGHTSでは、本番環境と開発環境でAWSのアカウントを分けて運用しており、 時折本番ログデータを開発用S3バケットにコピーする必要が生じています。 別アカウントの別バケットにデータをコピーする際に一番の詰まるポイントは権限周りです。 今回は、異なるアカウント間でデータをコピーする際に、問題を起こしづらい権限設定の方法をご紹介します。 概要 S3の権限の仕組みについて 他人のはReadのみ、自分のにWrite作戦 TVISION INSIGHTSでの活用事例 S3の権限の仕組みについて 異なるア…
6年前
記事のアイキャッチ画像
RedShiftでDECIMAL(NUMERIC)を使用する際の有効桁数について
REVISIO Tech Blog
こんにちは。データサイエンティスト兼、データ基盤エンジニアのshobyです。 皆さんは、RedShiftで小数点数を扱う際に、どのような型を使用していますか? 今回は、固定精度で小数点数を扱うことのできるDECIMAL(NUMERIC)と、その有効桁数についてご紹介します。 ※なお、この記事内では、RedShiftのドキュメントに合わせ、NUMERICではなくDECIMAL表記を使用します。 概要 DECIMALとは DECIMALの用途 DECIMALで値を格納する際の注意点 DECIMALで値を計算する際の注意点 TVISION INSIGHTSでの活用事例 DECIMALとは DECIM…
6年前
記事のアイキャッチ画像
DataGripって、便利
REVISIO Tech Blog
はじめまして、最近TVISION INSIGHTSにジョインしたエンジニアの taross-fです。 前職ではソーシャルゲームの会社で主にC#を書いて過ごしていましたが、現在はデータベースからAWSからいろいろ触っていて、必死に楽しく日々を過ごしています。 他メンバーのpostでもありましたが、弊社ではDB接続のクライアントとしてDataGripを使用しています。初めて使ったんですがかなり良さげなので、いいところと便利機能をいくつか紹介したいと思います。 www.jetbrains.com いいところ さまざまなDBに対応している MySQLだったらMySQL WorkBench, SQLSe…
6年前
記事のアイキャッチ画像
『継続して○○した日数』とその最大値をSQLで求める
REVISIO Tech Blog
こんにちわ。データ部の長野です。 TVISION INSIGHTSのデータ部では、複雑なデータ抽出をする機会が多々あります。 今回は最近おこなった複雑なデータ抽出ロジックの1つ、 「『継続して○○した日数』とその最大値」 をSQLで求める方法を紹介します! ======= 2021/06/26追記 ======= 記事中に積み上げ和を表現するのに、SUM(not_cont_date_flg) OVER (PARTITION BY user_id) AS cum_not_cont_date_flgというコード記述があるのですが、以下のような御指摘を受けました。 先日の「連続で結果xが出た回数」の…
6年前