Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
Snowflakeでダミーデータを作ろう
Search
fkd
January 01, 2025
0
6
Snowflakeで ダミーデータを作ろう
Snowflakeでダミーデータを作る際の小ネタ集です。参考になれば幸いです。
fkd
January 01, 2025
Tweet
Share
More Decks by fkd
See All by fkd
Snowflake Cortex LLM関数のいろんなモデルを試せるチャットボットを作ってみた
fkd
0
10
PDFファイルからデータを抜き出してテーブルに入れてみた
fkd
0
520
Snowflake DCR
fkd
0
230
Featured
See All Featured
個人開発の失敗を避けるイケてる考え方 / tips for indie hackers
panda_program
98
18k
Optimizing for Happiness
mojombo
376
70k
[RailsConf 2023] Rails as a piece of cake
palkan
53
5.2k
Done Done
chrislema
182
16k
How to Create Impact in a Changing Tech Landscape [PerfNow 2023]
tammyeverts
49
2.2k
VelocityConf: Rendering Performance Case Studies
addyosmani
327
24k
10 Git Anti Patterns You Should be Aware of
lemiorhan
PRO
656
59k
Building Better People: How to give real-time feedback that sticks.
wjessup
366
19k
Being A Developer After 40
akosma
89
590k
Building Applications with DynamoDB
mza
93
6.2k
Building an army of robots
kneath
302
45k
What's in a price? How to price your products and services
michaelherold
244
12k
Transcript
Snowflakeで ダミーデータを作ろう 2024/11/22 KAG 福田陽一
自己紹介 • 名前 : 福田陽一 • 役職 : Data Engineer
/ Infrastructure Engineer 2024/11/22
ダミーデータ、必要ですよね? • ダミーデータ、あるいはテストデータと呼ばれるもの • 動作確認をするための何らかのデータ • 検証(システムテスト等)のために本番データを模倣したデータ • パフォーマンスチェック、負荷試験目的の大量データ •
いざ作ろうとすると… • 結構面倒くさい • 泥臭い作業が多い • ダミーデータを作るのは… • 大事なタスク • 結構テクいことをやる • データエンジニアリングのうち (と思っている) 2024/11/22
どうやって作ってますか? • Snowflake上で直接INSERT INTO、CTAS • ファイル(CSV等)からインポート • dbt (dbt seed、dbt
run)で投入 • Python, Snowparkでロジックを組んで投入 • …etc 2024/11/22
Snowflake上で使える手法 • 関数を組み合わせてダミーデータを生成する • GENERATOR (https://docs.snowflake.com/ja/sql-reference/functions/generator) • 指定された数だけ行を生成 • UNIFORM
(https://docs.snowflake.com/ja/sql-reference/functions/uniform) • 一様分布の疑似乱数を生成 • RANDOM (https://docs.snowflake.com/ja/sql-reference/functions/random) • ランダムな数値を生成 • RANDSTR (https://docs.snowflake.com/ja/sql-reference/functions/randstr) • ランダムな文字列を生成 • シーケンス系 (https://docs.snowflake.com/ja/sql-reference/functions/seq1) • 連番を生成 • etc… • 主に ジェネレーター、乱数生成系 (数字、文字列、分布)、連番等の関数を組み合わせる 2024/11/22
SQLの例 • 組み込み関数を組み合わせて使ってみる 2024/11/22
SQLの例 • 組み込み関数だけではできない機能を実現する • 例 : RANDSTR は大文字小文字英数しか出現しないので、記号を含めた文字列を生成できるようにしてみた 2024/11/22
SQLの例 • 半構造データを活用する • 値のバリエーションを配列で定義しておき、ランダムで1つ選出する 2024/11/22
データのランダム制の考慮 • 満遍なくデータを出力したい場合 • UNIFORM(一様分布)に任せる 2024/11/22
データのランダム制の考慮 • 標準偏差を使って配列の要素の中から選択させている • 配列の番号からはみ出さないように上限・下限も制御 2024/11/22 • データの出現に偏りを持たせたい場合(1) • NORMAL(標準偏差)
データのランダム制の考慮 2024/11/22 • ZIPF(s, N, gen) • sが大きいほど上位が頻出する • Nに指定可能な数値は1〜16,777,215のため
配列の要素0が選ばれるようにするには -1が必要 • データの出現に偏りを持たせたい場合(2) • ZIPF(Zipf分布、ジップの法則)
データの出現確率を任意で制御したい • UNIFORMと条件分岐(CASE-WHEN)の合わせ技 2024/11/22 • 閾値を任意に設定することで選出される確率を制御 • 記述は短めだが、大量のデータや、カラム数が多いときつい
データの出現確率を任意で制御したい • 条件分岐(WHEN)を使わず実現する方法 2024/11/22 半構造データで選択肢と 各要素の割合を定義しておく
データの出現確率を任意で制御したい • 各属性の当選番号を累積和で決めておいて、UNIFORMで抽選番号を発行している 2024/11/22
データの出現確率を任意で制御したい 2024/11/22 • 各属性の当選番号を累積和で決めておいて、UNIFORMで抽選番号を発行している 1 2 3
データの出現確率を任意で制御したい 2024/11/22 • 各属性の当選番号を累積和で決めておいて、UNIFORMで抽選番号を発行している join 4
最近できるようになった手法 • generate_synthetic_data (https://docs.snowflake.com/en/sql-reference/stored-procedures/generate_synthetic_data) • 元テーブルを参考に合成データを作成する 2024/11/22 INPUT OUTPUT
最近できるようになった手法 2024/11/22 • generate_synthetic_data (https://docs.snowflake.com/en/sql-reference/stored-procedures/generate_synthetic_data) • オプションパラメータを指定して、redactedになる列を操作したり、類似行を削除できたりする OUTPUT