狠狠撸

狠狠撸Share a Scribd company logo
BigQuery勉強会
~Standard SQL Dialect~
2016/8/23
森下健 @ Sprocket
1
今回の内容
? Standard SQLの基本
? Standard SQLの便利機能を紹介
? (user, action, time) というイベントデータの処理例
? 間隔ベースのセッションIDを付ける
? ユーザやセッションの属性とイベントデータを?つのテーブルにする
? あるAction Xが発?した後、時刻T以内にAction Zが発?する割合の集計
2
Standard SQLの基本
3
Standard SQL Dialect
? 2016年6?にBeta公開された書き?
? ?規模かつ複雑な処理の記述が可能
? (以前のをよく知らないので差分はわからないんですが)
? BQは処理が複雑でも料?同じなのでかなり使いみちがある
? なぜ「Standard」なのかと?われてもわかりません...
https://cloud.google.com/blog/big-data/2016/06/bigquery-111-now-with-standard-sql-iam-and-partitioned-tables
4
Standard SQLモードに切り替えて使う
②チェックを外す
①Show Optionsで開いて
5
Time Partitioning
? _PARTITIONTIME というのがあるらしいが、よく知らない…
? https://cloud.google.com/bigquery/docs/partitioned-tables
? 今の旧来のテーブルならば
という形で取れます
SELECT ...
FROM `my_dataset.table_name_*`
WHERE _TABLE_SUFFIX BETWEEN '20160720' AND FORMAT_DATE('%Y%m%d', CURRENT_DATE())
①
②
6
細かいこと
? JSON_EXTRACT 関数が消えた
? DISTINCT がまともに動く感じになった
? /* ... */ でコメントになる
? 最後の結果セットをOrder Byできるサイズの上限は結構低い
? 数千万レコードでもNGだったりする
? ※ 完全ではないが対処法はある
? 昔はTipsとしてよく?われていた EACH とかもう不要
7
Standard SQLの便利機能 3つ
WITH
Analytic Function
Nest
8
WITH構?
SELECT ...
FROM (
SELECT ...
FROM (
SELECT ...
FROM original_data
) as A
) as B
WITH A as (
SELECT ...
FROM original_data
)
, B as (
SELECT ...
FROM A
)
SELECT ...
FROM B
■ 従来記法 ■ WITH記法
?れ?地獄から解放され、上から下に処理を書けるようになった 9
Analytic Function
? 以前の Window Function (今回呼び名変わった?)
? ※新しい機能ではないが紹介
? 普通のSQL(例えばMySQLの)ではできない、レコード間の演算
ができる
10
11
user action time
1 A 1
1 B 1
1 X 5
1 B 8
1 Z 9
2 A 2
2 B 5
2 D 10
例えば、ユーザ毎にアクセス順序でのSequence IDを付けたい
user action time seq
1 A 1 1
1 B 1 2
1 X 5 3
1 B 8 4
1 Z 9 5
2 A 2 1
2 B 5 2
2 D 10 3
SELECT *, RANK() OVER (PARTITION BY user ORDER BY time) as seq
FROM data
ORDER BY user, seq
RANK():
1から順に連番をふる
12
user action time
1 A 1
1 B 1
1 X 5
1 B 8
1 Z 9
2 A 2
2 B 5
2 D 10
例えば、ユーザ毎に前回アクセスからの経過時刻をとりたい
WITH add_last_time as (
SELECT *,
LAG(time) OVER (PARTITION BY user ORDER BY time) as last_time
FROM data
)
, add_span as (
SELECT *,
time - last_time as span
FROM add_last_time
)
select * from add_span ORDER BY user, time
user action time last_time span
1 A 1 null null
1 B 1 1 0
1 X 5 1 4
1 B 8 5 3
1 Z 9 8 1
2 A 2 null null
2 B 5 2 3
2 D 10 5 5
LAG(X):
?つ前のXの値を取得する
13
user action time
1 A 1
1 B 1
1 X 5
1 B 8
1 Z 9
2 A 2
2 B 5
2 D 10
例えば、ユーザ毎に最初の2つのデータを残したい
WITH add_seq as (
SELECT *, RANK() OVER (PARTITION BY user ORDER BY time) as seq
FROM data
)
, omit_records as (
SELECT * FROM add_seq WHERE seq <= 2
)
SELECT * FROM omit_records
ORDER BY user, seq
user action time seq
1 A 1 1
1 B 1 2
2 A 2 1
2 B 5 2
Nest (?れ?)
? これがかなり便利
? 普通のSQLには無い感覚なので慣れは必要だが慣れるとデータ
のこねくり回しが捗ります
? 保存?Scanデータ量の削減になる
? user_idのような?字列などの場合特に
14
15
例えば、Actionを?ったユーザをAction毎にまとめる(ユーザの重複OKの場合)
user action time
1 A 1
1 B 3
1 X 5
1 B 20
1 Z 22
2 A 2
2 B 30
2 X 60
3 X 4
4 B 2
4 A 4
Row action users
1 A 1
2
4
2 B 1
1
2
4
3 X 1
2
3
4 Z 1
重複しているよ?
WITH action_users as (
SELECT action, ARRAY_AGG(user) as users
FROM data
GROUP by action
)
SELECT * FROM action_users
ORDER BY action
ARRAY_AGG():
GROUP BYと共に使い、
値をARRAY型の1レコードにまとめる
16
例えば、Actionを?ったユーザをAction毎にまとめる(ユニークユーザの場合)
user action time
1 A 1
1 B 3
1 X 5
1 B 20
1 Z 22
2 A 2
2 B 30
2 X 60
3 X 4
4 B 2
4 A 4
WITH action_users as (
SELECT action, ARRAY_AGG(user) as users
FROM data
GROUP by action
)
, unique_action_users as (
SELECT action,
ARRAY(
SELECT DISTINCT user FROM UNNEST(users) as user
) as users
FROM action_users
)
SELECT * FROM unique_action_users ORDER BY action
Row action users
1 A 1
2
4
2 B 1
2
4
3 X 1
2
3
4 Z 1
ARRAY():
Sub Queryが単?列の複数(0~N)レコード
を返す場合に使う.
UNNEST():
ARRAY型を展開する。
JOIN的になる場合と
グループ単位で処理したい場合で
少し意味合いが違う感じ.
Row action users
1 A 1
2
4
2 B 1
1
2
4
3 X 1
2
3
4 Z 1
■Group By する必要がある場合: ARRAY_AGG(STRUCT(...)) ... GROUP BY
SELECT ...,
ARRAY_AGG(STRUCT(col1, col2, ...))
FROM ...
GROUP BY X
複数列をArray型に?れる?法
■Group By する必要がない場合 or 何か計算処理する場合: ARRAY(SELECT STRUCT(...))
SELECT ...,
ARRAY(
SELECT STRUCT(col1 * 2, SUM(col2) OVER ... , ...) FROM ...
)
FROM ... STRUCT():
レコード型を作る。
レコード型という単?列になる。
(user, action, time)
というイベントデータの処理例
18
19
間隔ベースのセッションIDを付ける
user action time
1 A 1
1 B 3
1 X 5
1 B 20
1 Z 22
2 A 2
2 B 30
2 X 35
やりたいこと: ユーザ毎にアクセス間隔が10以上なら別のSessionIDを付けるようにしたい
1
2
1
2
user action time last_time new_session session_seq
1 A 1 null 0 1
1 B 3 1 0 1
1 X 5 3 0 1
1 B 20 5 1 2
1 Z 22 20 0 2
2 A 2 null 0 1
2 B 30 2 1 2
2 X 35 30 0 2
WITH add_last_time as (
SELECT *,
LAG(time) OVER (PARTITION BY user ORDER BY time) as last_time
FROM data
)
, add_span as (
SELECT *, IF(time - last_time >= 10, 1, 0) as new_session
FROM add_last_time
)
SELECT *, 1+SUM(new_session) OVER (PARTITION BY user ORDER BY time) as session_seq
FROM add_span ORDER BY user, time
user session_seq session_start_time session_end_time session_time_span actions.action actions.time
1 1 1 5 4 A 1
B 3
X 5
1 2 20 22 2 B 20
Z 22
2 1 2 2 0 A 2
2 2 30 35 5 B 30
20
ユーザやセッションの属性とイベントデータを?つのテーブルにする: Step1
user action time
1 A 1
1 B 3
1 X 5
1 B 20
1 Z 22
2 A 2
2 B 30
2 X 35
やりたいこと:ユーザやセッションの属性とイベントデータを?つのテーブルにする
WITH ... 略 ...
, add_session_seq as (
SELECT *, 1+SUM(new_session) OVER (PARTITION BY user ORDER BY time) as session_seq
FROM add_span
)
SELECT user, session_seq,
MIN(time) as session_start_time,
MAX(time) as session_end_time,
MAX(time) - MIN(time) as session_time_span,
ARRAY_AGG(STRUCT(action, time)) as actions
FROM add_session_seq
GROUP BY user, session_seq
user session_seq ... actions.action actions.time
1 1 A 1
B 3
X 5
1 2 B 20
Z 22
2 1 A 2
2 2 B 30
21
ユーザやセッションの属性とイベントデータを?つのテーブルにする: Step2
やりたいこと:ユーザやセッションの属性とイベントデータを?つのテーブルにする
WITH ... 略 ...
, group_by_user as (
SELECT user,
MAX(session_seq) as session_num,
ARRAY_AGG(STRUCT(
session_start_time, session_end_time, session_time_span, actions
)) as sessions
FROM group_by_session GROUP BY user
)
SELECT * FROM group_by_user
ORDER BY user
user session_num sessions.session_start_time sessions.session_end_time sessions.session_time_span sessions.actions.action sessions.actions.time
1 2 1 5 4 A 1
B 3
X 5
20 22 2 B 20
Z 22
2 2 2 2 0 A 2
30 35 5 B 30
X 35
22
ユーザ毎に, あるAction Xが発?した後、時刻T以内にAction Zが発?する割合の集計
やりたいこと: Xの後に時刻10以内にZが発?する割合を求める
user action time
1 A 1
1 X 5
1 B 9
1 Z 11
2 A 2
2 X 15
2 Z 40
3 Z 3
3 X 6
4 X 4
4 X 5
4 Z 7
1
0 (時刻10以内でない)
0 (ZがXの後で発?していない)
1 (最初のXに対してのみ計算するとする)
X=4, Z=2 → 50% とカウントしたい
23
ユーザ毎に, あるAction Xが発?した後、時刻T以内にAction Zが発?する割合の集計
user action time
1 A 1
1 X 5
1 B 9
1 Z 11
2 A 2
2 X 15
2 Z 40
3 Z 3
3 X 6
4 X 4
4 X 5
4 Z 7
user first_x_time action_times.action action_times.time
1 5 X 5
Z 11
2 15 X 15
Z 40
3 6 Z 3
X 6
4 4 X 4
X 5
Z 7
WITH group_by_user as (
SELECT user, ARRAY_AGG(STRUCT(action, time)) as action_times
FROM data WHERE action in ('X', 'Z')
GROUP BY user
),
pickup_first_x_timeas (
SELECT user, action_times,
(
SELECT MIN(time)
FROM UNNEST(action_times) WHERE action='X?
) as first_x_time
FROM group_by_user
)
SELECT * FROM pickup_first_x_time ORDER BY user
24
ユーザ毎に, あるAction Xが発?した後、時刻T以内にAction Zが発?する割合の集計
user first_x_time action_times.action action_times.time
1 5 X 5
Z 11
2 15 X 15
Z 40
3 6 Z 3
X 6
4 4 X 4
X 5
Z 7
WITH ...
, count_z as (
SELECT user, first_x_time,
(
SELECT COUNT(*)
FROM UNNEST(action_times) as a
WHERE a.action = 'Z?
AND a.time BETWEEN first_x_time AND first_x_time + 10
) as z_count,
action_times
FROM pickup_first_x_time
)
SELECT * FROM count_z ORDER BY user
user first_x_time z_count action_times.action action_times.time
1 5 1 X 5
Z 11
2 15 0 X 15
Z 40
3 6 0 Z 3
X 6
4 4 1 X 4
X 5
Z 7
25
WITH ...
SELECT
COUNT(*) as x_cnt,
COUNTIF(z_count > 0) as z_cnt
FROM count_z
user first_x_time z_count action_times.action action_times.time
1 5 1 X 5
Z 11
2 15 0 X 15
Z 40
3 6 0 Z 3
X 6
4 4 1 X 4
X 5
Z 7
ユーザ毎に, あるAction Xが発?した後、時刻T以内にAction Zが発?する割合の集計
x_cnt z_cnt
4 2
まとめ
? Standard SQLは結構強い
? まだβ版なので仕様が変わる可能性もあるが、考え?などは変
わらないので慣れておくのは良いこと
? 是?活?していきましょう!
26

More Related Content

What's hot (20)

Apache Avro vs Protocol Buffers
Apache Avro vs Protocol BuffersApache Avro vs Protocol Buffers
Apache Avro vs Protocol Buffers
Seiya Mizuno
?
【DL輪読会】マルチモーダル 基盤モデル
【DL輪読会】マルチモーダル 基盤モデル【DL輪読会】マルチモーダル 基盤モデル
【DL輪読会】マルチモーダル 基盤モデル
Deep Learning JP
?
PostgreSQL 12は ここがスゴイ! ~性能改善やpluggable storage engineなどの新機能を徹底解説~ (NTTデータ テクノ...
PostgreSQL 12は ここがスゴイ! ~性能改善やpluggable storage engineなどの新機能を徹底解説~ (NTTデータ テクノ...PostgreSQL 12は ここがスゴイ! ~性能改善やpluggable storage engineなどの新機能を徹底解説~ (NTTデータ テクノ...
PostgreSQL 12は ここがスゴイ! ~性能改善やpluggable storage engineなどの新機能を徹底解説~ (NTTデータ テクノ...
NTT DATA Technology & Innovation
?
惭测厂蚕尝と笔辞蝉迟驳谤别厂蚕尝の基本的な実行プラン比较
惭测厂蚕尝と笔辞蝉迟驳谤别厂蚕尝の基本的な実行プラン比较惭测厂蚕尝と笔辞蝉迟驳谤别厂蚕尝の基本的な実行プラン比较
惭测厂蚕尝と笔辞蝉迟驳谤别厂蚕尝の基本的な実行プラン比较
Shinya Sugiyama
?
今こそ知りたいSpring Batch(Spring Fest 2020講演資料)
今こそ知りたいSpring Batch(Spring Fest 2020講演資料)今こそ知りたいSpring Batch(Spring Fest 2020講演資料)
今こそ知りたいSpring Batch(Spring Fest 2020講演資料)
NTT DATA Technology & Innovation
?
あなたが知らない リレーショナルモデル
あなたが知らない リレーショナルモデルあなたが知らない リレーショナルモデル
あなたが知らない リレーショナルモデル
Mikiya Okuno
?
深い亲子関係のテーブル设计
深い亲子関係のテーブル设计深い亲子関係のテーブル设计
深い亲子関係のテーブル设计
琢磨 三浦
?
惭辞苍驳辞顿叠と础箩补虫で作る解析フロントエンド&骋谤补辫丑顿叠を用いたソーシャルデータ解析
惭辞苍驳辞顿叠と础箩补虫で作る解析フロントエンド&骋谤补辫丑顿叠を用いたソーシャルデータ解析惭辞苍驳辞顿叠と础箩补虫で作る解析フロントエンド&骋谤补辫丑顿叠を用いたソーシャルデータ解析
惭辞苍驳辞顿叠と础箩补虫で作る解析フロントエンド&骋谤补辫丑顿叠を用いたソーシャルデータ解析
Takahiro Inoue
?
データベース设计彻底指南
データベース设计彻底指南データベース设计彻底指南
データベース设计彻底指南
Mikiya Okuno
?
今からでも遅くないDBマイグレーション - Flyway と SchemaSpy の紹介 -
今からでも遅くないDBマイグレーション - Flyway と SchemaSpy の紹介 -今からでも遅くないDBマイグレーション - Flyway と SchemaSpy の紹介 -
今からでも遅くないDBマイグレーション - Flyway と SchemaSpy の紹介 -
onozaty
?
実践 NestJS
実践 NestJS実践 NestJS
実践 NestJS
Ayumi Goto
?
OpenLineage による Airflow のデータ来歴の収集と可視化(Airflow Meetup Tokyo #3 発表資料)
OpenLineage による Airflow のデータ来歴の収集と可視化(Airflow Meetup Tokyo #3 発表資料)OpenLineage による Airflow のデータ来歴の収集と可視化(Airflow Meetup Tokyo #3 発表資料)
OpenLineage による Airflow のデータ来歴の収集と可視化(Airflow Meetup Tokyo #3 発表資料)
NTT DATA Technology & Innovation
?
Where狙いのキー、order by狙いのキー
Where狙いのキー、order by狙いのキーWhere狙いのキー、order by狙いのキー
Where狙いのキー、order by狙いのキー
yoku0825
?
[B23] PostgreSQLのインデックス?チューニング by Tomonari Katsumata
[B23] PostgreSQLのインデックス?チューニング by Tomonari Katsumata[B23] PostgreSQLのインデックス?チューニング by Tomonari Katsumata
[B23] PostgreSQLのインデックス?チューニング by Tomonari Katsumata
Insight Technology, Inc.
?
骋辞による奥别产アプリ开発のキホン
骋辞による奥别产アプリ开発のキホン骋辞による奥别产アプリ开発のキホン
骋辞による奥别产アプリ开発のキホン
Akihiko Horiuchi
?
搁别濒补诲辞尘辞を使ったトランザクション履歴管理をプロダクトに适用した际のメリット/デメリット/课题など
搁别濒补诲辞尘辞を使ったトランザクション履歴管理をプロダクトに适用した际のメリット/デメリット/课题など搁别濒补诲辞尘辞を使ったトランザクション履歴管理をプロダクトに适用した际のメリット/デメリット/课题など
搁别濒补诲辞尘辞を使ったトランザクション履歴管理をプロダクトに适用した际のメリット/デメリット/课题など
なべ
?
Optuna Dashboardの紹介と設計解説 - 2022/12/10 Optuna Meetup #2
Optuna Dashboardの紹介と設計解説 - 2022/12/10 Optuna Meetup #2Optuna Dashboardの紹介と設計解説 - 2022/12/10 Optuna Meetup #2
Optuna Dashboardの紹介と設計解説 - 2022/12/10 Optuna Meetup #2
Preferred Networks
?
骋辞初心者が骋辞でコマンドラインツールの作成に挑戦した话
骋辞初心者が骋辞でコマンドラインツールの作成に挑戦した话骋辞初心者が骋辞でコマンドラインツールの作成に挑戦した话
骋辞初心者が骋辞でコマンドラインツールの作成に挑戦した话
dcubeio
?
SQLチューニング入門 入門編
SQLチューニング入門 入門編SQLチューニング入門 入門編
SQLチューニング入門 入門編
Miki Shimogai
?
ビッグデータ処理データベースの全体像と使い分け?2018年惫别谤蝉颈辞苍
ビッグデータ処理データベースの全体像と使い分け?2018年惫别谤蝉颈辞苍ビッグデータ処理データベースの全体像と使い分け?2018年惫别谤蝉颈辞苍
ビッグデータ処理データベースの全体像と使い分け?2018年惫别谤蝉颈辞苍
Tetsutaro Watanabe
?
Apache Avro vs Protocol Buffers
Apache Avro vs Protocol BuffersApache Avro vs Protocol Buffers
Apache Avro vs Protocol Buffers
Seiya Mizuno
?
【DL輪読会】マルチモーダル 基盤モデル
【DL輪読会】マルチモーダル 基盤モデル【DL輪読会】マルチモーダル 基盤モデル
【DL輪読会】マルチモーダル 基盤モデル
Deep Learning JP
?
PostgreSQL 12は ここがスゴイ! ~性能改善やpluggable storage engineなどの新機能を徹底解説~ (NTTデータ テクノ...
PostgreSQL 12は ここがスゴイ! ~性能改善やpluggable storage engineなどの新機能を徹底解説~ (NTTデータ テクノ...PostgreSQL 12は ここがスゴイ! ~性能改善やpluggable storage engineなどの新機能を徹底解説~ (NTTデータ テクノ...
PostgreSQL 12は ここがスゴイ! ~性能改善やpluggable storage engineなどの新機能を徹底解説~ (NTTデータ テクノ...
NTT DATA Technology & Innovation
?
惭测厂蚕尝と笔辞蝉迟驳谤别厂蚕尝の基本的な実行プラン比较
惭测厂蚕尝と笔辞蝉迟驳谤别厂蚕尝の基本的な実行プラン比较惭测厂蚕尝と笔辞蝉迟驳谤别厂蚕尝の基本的な実行プラン比较
惭测厂蚕尝と笔辞蝉迟驳谤别厂蚕尝の基本的な実行プラン比较
Shinya Sugiyama
?
今こそ知りたいSpring Batch(Spring Fest 2020講演資料)
今こそ知りたいSpring Batch(Spring Fest 2020講演資料)今こそ知りたいSpring Batch(Spring Fest 2020講演資料)
今こそ知りたいSpring Batch(Spring Fest 2020講演資料)
NTT DATA Technology & Innovation
?
あなたが知らない リレーショナルモデル
あなたが知らない リレーショナルモデルあなたが知らない リレーショナルモデル
あなたが知らない リレーショナルモデル
Mikiya Okuno
?
深い亲子関係のテーブル设计
深い亲子関係のテーブル设计深い亲子関係のテーブル设计
深い亲子関係のテーブル设计
琢磨 三浦
?
惭辞苍驳辞顿叠と础箩补虫で作る解析フロントエンド&骋谤补辫丑顿叠を用いたソーシャルデータ解析
惭辞苍驳辞顿叠と础箩补虫で作る解析フロントエンド&骋谤补辫丑顿叠を用いたソーシャルデータ解析惭辞苍驳辞顿叠と础箩补虫で作る解析フロントエンド&骋谤补辫丑顿叠を用いたソーシャルデータ解析
惭辞苍驳辞顿叠と础箩补虫で作る解析フロントエンド&骋谤补辫丑顿叠を用いたソーシャルデータ解析
Takahiro Inoue
?
データベース设计彻底指南
データベース设计彻底指南データベース设计彻底指南
データベース设计彻底指南
Mikiya Okuno
?
今からでも遅くないDBマイグレーション - Flyway と SchemaSpy の紹介 -
今からでも遅くないDBマイグレーション - Flyway と SchemaSpy の紹介 -今からでも遅くないDBマイグレーション - Flyway と SchemaSpy の紹介 -
今からでも遅くないDBマイグレーション - Flyway と SchemaSpy の紹介 -
onozaty
?
OpenLineage による Airflow のデータ来歴の収集と可視化(Airflow Meetup Tokyo #3 発表資料)
OpenLineage による Airflow のデータ来歴の収集と可視化(Airflow Meetup Tokyo #3 発表資料)OpenLineage による Airflow のデータ来歴の収集と可視化(Airflow Meetup Tokyo #3 発表資料)
OpenLineage による Airflow のデータ来歴の収集と可視化(Airflow Meetup Tokyo #3 発表資料)
NTT DATA Technology & Innovation
?
Where狙いのキー、order by狙いのキー
Where狙いのキー、order by狙いのキーWhere狙いのキー、order by狙いのキー
Where狙いのキー、order by狙いのキー
yoku0825
?
[B23] PostgreSQLのインデックス?チューニング by Tomonari Katsumata
[B23] PostgreSQLのインデックス?チューニング by Tomonari Katsumata[B23] PostgreSQLのインデックス?チューニング by Tomonari Katsumata
[B23] PostgreSQLのインデックス?チューニング by Tomonari Katsumata
Insight Technology, Inc.
?
骋辞による奥别产アプリ开発のキホン
骋辞による奥别产アプリ开発のキホン骋辞による奥别产アプリ开発のキホン
骋辞による奥别产アプリ开発のキホン
Akihiko Horiuchi
?
搁别濒补诲辞尘辞を使ったトランザクション履歴管理をプロダクトに适用した际のメリット/デメリット/课题など
搁别濒补诲辞尘辞を使ったトランザクション履歴管理をプロダクトに适用した际のメリット/デメリット/课题など搁别濒补诲辞尘辞を使ったトランザクション履歴管理をプロダクトに适用した际のメリット/デメリット/课题など
搁别濒补诲辞尘辞を使ったトランザクション履歴管理をプロダクトに适用した际のメリット/デメリット/课题など
なべ
?
Optuna Dashboardの紹介と設計解説 - 2022/12/10 Optuna Meetup #2
Optuna Dashboardの紹介と設計解説 - 2022/12/10 Optuna Meetup #2Optuna Dashboardの紹介と設計解説 - 2022/12/10 Optuna Meetup #2
Optuna Dashboardの紹介と設計解説 - 2022/12/10 Optuna Meetup #2
Preferred Networks
?
骋辞初心者が骋辞でコマンドラインツールの作成に挑戦した话
骋辞初心者が骋辞でコマンドラインツールの作成に挑戦した话骋辞初心者が骋辞でコマンドラインツールの作成に挑戦した话
骋辞初心者が骋辞でコマンドラインツールの作成に挑戦した话
dcubeio
?
SQLチューニング入門 入門編
SQLチューニング入門 入門編SQLチューニング入門 入門編
SQLチューニング入門 入門編
Miki Shimogai
?
ビッグデータ処理データベースの全体像と使い分け?2018年惫别谤蝉颈辞苍
ビッグデータ処理データベースの全体像と使い分け?2018年惫别谤蝉颈辞苍ビッグデータ処理データベースの全体像と使い分け?2018年惫别谤蝉颈辞苍
ビッグデータ処理データベースの全体像と使い分け?2018年惫别谤蝉颈辞苍
Tetsutaro Watanabe
?

Similar to BigQuery勉強会 Standard SQL Dialect (20)

20140531 JPUGしくみ+アプリケーション分科会 勉强会资料
20140531 JPUGしくみ+アプリケーション分科会 勉强会资料20140531 JPUGしくみ+アプリケーション分科会 勉强会资料
20140531 JPUGしくみ+アプリケーション分科会 勉强会资料
kasaharatt
?
Maatkit で MySQL チューニング
Maatkit で MySQL チューニングMaatkit で MySQL チューニング
Maatkit で MySQL チューニング
Kensuke Nagae
?
2010 in-depth-v11
2010 in-depth-v112010 in-depth-v11
2010 in-depth-v11
kmiyako
?
固定化か?最新化か?オプティマイザ統計の運用をもう一度考える。 -JPOUG Tech Talk Night #6-
固定化か?最新化か?オプティマイザ統計の運用をもう一度考える。 -JPOUG Tech Talk Night #6-固定化か?最新化か?オプティマイザ統計の運用をもう一度考える。 -JPOUG Tech Talk Night #6-
固定化か?最新化か?オプティマイザ統計の運用をもう一度考える。 -JPOUG Tech Talk Night #6-
歩 柴田
?
PostgreSQL13 新機能紹介
PostgreSQL13 新機能紹介PostgreSQL13 新機能紹介
PostgreSQL13 新機能紹介
Satoshi Hirata
?
[INSIGHT OUT 2011] A24 sql server wait events(mario broodbakker)
[INSIGHT OUT 2011] A24 sql server wait events(mario broodbakker)[INSIGHT OUT 2011] A24 sql server wait events(mario broodbakker)
[INSIGHT OUT 2011] A24 sql server wait events(mario broodbakker)
Insight Technology, Inc.
?
Memoizeの仕組み(第41回PostgreSQLアンカンファレンス@オンライン 発表資料)
Memoizeの仕組み(第41回PostgreSQLアンカンファレンス@オンライン 発表資料)Memoizeの仕組み(第41回PostgreSQLアンカンファレンス@オンライン 発表資料)
Memoizeの仕組み(第41回PostgreSQLアンカンファレンス@オンライン 発表資料)
NTT DATA Technology & Innovation
?
巨大な表を高速に扱うData.table について
巨大な表を高速に扱うData.table について巨大な表を高速に扱うData.table について
巨大な表を高速に扱うData.table について
Haruka Ozaki
?
db tech showcase 2019 D10 Oracle Database New Features
db tech showcase 2019 D10 Oracle Database New Featuresdb tech showcase 2019 D10 Oracle Database New Features
db tech showcase 2019 D10 Oracle Database New Features
Noriyoshi Shinoda
?
Oracle In-database-archiving ~Oracleでの論理削除~
Oracle In-database-archiving ~Oracleでの論理削除~Oracle In-database-archiving ~Oracleでの論理削除~
Oracle In-database-archiving ~Oracleでの論理削除~
Daiki Mogmet Ito
?
Develop Web Application with Node.js + Express
Develop Web Application with Node.js + ExpressDevelop Web Application with Node.js + Express
Develop Web Application with Node.js + Express
Akinari Tsugo
?
JOSUG 34th Meetup
JOSUG 34th Meetup JOSUG 34th Meetup
JOSUG 34th Meetup
irix_jp
?
[db tech showcase Tokyo 2018] #dbts2018 #D34 『サポートのトップエンジニアが語る - ワンランク上のStats...
[db tech showcase Tokyo 2018] #dbts2018 #D34 『サポートのトップエンジニアが語る - ワンランク上のStats...[db tech showcase Tokyo 2018] #dbts2018 #D34 『サポートのトップエンジニアが語る - ワンランク上のStats...
[db tech showcase Tokyo 2018] #dbts2018 #D34 『サポートのトップエンジニアが語る - ワンランク上のStats...
Insight Technology, Inc.
?
顿别惫尝翱痴贰発表资料
顿别惫尝翱痴贰発表资料顿别惫尝翱痴贰発表资料
顿别惫尝翱痴贰発表资料
Zenji Kanzaki
?
K010 appstat201201
K010 appstat201201K010 appstat201201
K010 appstat201201
t2tarumi
?
進化したのはサーバだけじゃない!?DBA の毎日をもっと豊かにするユーティリティのすすめ?
進化したのはサーバだけじゃない!?DBA の毎日をもっと豊かにするユーティリティのすすめ?進化したのはサーバだけじゃない!?DBA の毎日をもっと豊かにするユーティリティのすすめ?
進化したのはサーバだけじゃない!?DBA の毎日をもっと豊かにするユーティリティのすすめ?
Michitoshi Yoshida
?
The Art of Network Protocols - RIP編 -
The Art of Network Protocols - RIP編 -The Art of Network Protocols - RIP編 -
The Art of Network Protocols - RIP編 -
kirin_gumi
?
Linuxのプロセススケジューラ(Reading the Linux process scheduler)
Linuxのプロセススケジューラ(Reading the Linux process scheduler)Linuxのプロセススケジューラ(Reading the Linux process scheduler)
Linuxのプロセススケジューラ(Reading the Linux process scheduler)
Hiraku Toyooka
?
Preview: 世界中のゲーム分析をしてきたPlayFabが大進化!一緒に裏側の最新データ探索の仕組みを覗いてみよう
Preview: 世界中のゲーム分析をしてきたPlayFabが大進化!一緒に裏側の最新データ探索の仕組みを覗いてみようPreview: 世界中のゲーム分析をしてきたPlayFabが大進化!一緒に裏側の最新データ探索の仕組みを覗いてみよう
Preview: 世界中のゲーム分析をしてきたPlayFabが大進化!一緒に裏側の最新データ探索の仕組みを覗いてみよう
Daisuke Masubuchi
?
PythonでテキストをJSONにした話(PyCon mini sapporo 2015)
PythonでテキストをJSONにした話(PyCon mini sapporo 2015)PythonでテキストをJSONにした話(PyCon mini sapporo 2015)
PythonでテキストをJSONにした話(PyCon mini sapporo 2015)
Satoshi Yamada
?
20140531 JPUGしくみ+アプリケーション分科会 勉强会资料
20140531 JPUGしくみ+アプリケーション分科会 勉强会资料20140531 JPUGしくみ+アプリケーション分科会 勉强会资料
20140531 JPUGしくみ+アプリケーション分科会 勉强会资料
kasaharatt
?
Maatkit で MySQL チューニング
Maatkit で MySQL チューニングMaatkit で MySQL チューニング
Maatkit で MySQL チューニング
Kensuke Nagae
?
2010 in-depth-v11
2010 in-depth-v112010 in-depth-v11
2010 in-depth-v11
kmiyako
?
固定化か?最新化か?オプティマイザ統計の運用をもう一度考える。 -JPOUG Tech Talk Night #6-
固定化か?最新化か?オプティマイザ統計の運用をもう一度考える。 -JPOUG Tech Talk Night #6-固定化か?最新化か?オプティマイザ統計の運用をもう一度考える。 -JPOUG Tech Talk Night #6-
固定化か?最新化か?オプティマイザ統計の運用をもう一度考える。 -JPOUG Tech Talk Night #6-
歩 柴田
?
PostgreSQL13 新機能紹介
PostgreSQL13 新機能紹介PostgreSQL13 新機能紹介
PostgreSQL13 新機能紹介
Satoshi Hirata
?
[INSIGHT OUT 2011] A24 sql server wait events(mario broodbakker)
[INSIGHT OUT 2011] A24 sql server wait events(mario broodbakker)[INSIGHT OUT 2011] A24 sql server wait events(mario broodbakker)
[INSIGHT OUT 2011] A24 sql server wait events(mario broodbakker)
Insight Technology, Inc.
?
Memoizeの仕組み(第41回PostgreSQLアンカンファレンス@オンライン 発表資料)
Memoizeの仕組み(第41回PostgreSQLアンカンファレンス@オンライン 発表資料)Memoizeの仕組み(第41回PostgreSQLアンカンファレンス@オンライン 発表資料)
Memoizeの仕組み(第41回PostgreSQLアンカンファレンス@オンライン 発表資料)
NTT DATA Technology & Innovation
?
巨大な表を高速に扱うData.table について
巨大な表を高速に扱うData.table について巨大な表を高速に扱うData.table について
巨大な表を高速に扱うData.table について
Haruka Ozaki
?
db tech showcase 2019 D10 Oracle Database New Features
db tech showcase 2019 D10 Oracle Database New Featuresdb tech showcase 2019 D10 Oracle Database New Features
db tech showcase 2019 D10 Oracle Database New Features
Noriyoshi Shinoda
?
Oracle In-database-archiving ~Oracleでの論理削除~
Oracle In-database-archiving ~Oracleでの論理削除~Oracle In-database-archiving ~Oracleでの論理削除~
Oracle In-database-archiving ~Oracleでの論理削除~
Daiki Mogmet Ito
?
Develop Web Application with Node.js + Express
Develop Web Application with Node.js + ExpressDevelop Web Application with Node.js + Express
Develop Web Application with Node.js + Express
Akinari Tsugo
?
JOSUG 34th Meetup
JOSUG 34th Meetup JOSUG 34th Meetup
JOSUG 34th Meetup
irix_jp
?
[db tech showcase Tokyo 2018] #dbts2018 #D34 『サポートのトップエンジニアが語る - ワンランク上のStats...
[db tech showcase Tokyo 2018] #dbts2018 #D34 『サポートのトップエンジニアが語る - ワンランク上のStats...[db tech showcase Tokyo 2018] #dbts2018 #D34 『サポートのトップエンジニアが語る - ワンランク上のStats...
[db tech showcase Tokyo 2018] #dbts2018 #D34 『サポートのトップエンジニアが語る - ワンランク上のStats...
Insight Technology, Inc.
?
顿别惫尝翱痴贰発表资料
顿别惫尝翱痴贰発表资料顿别惫尝翱痴贰発表资料
顿别惫尝翱痴贰発表资料
Zenji Kanzaki
?
K010 appstat201201
K010 appstat201201K010 appstat201201
K010 appstat201201
t2tarumi
?
進化したのはサーバだけじゃない!?DBA の毎日をもっと豊かにするユーティリティのすすめ?
進化したのはサーバだけじゃない!?DBA の毎日をもっと豊かにするユーティリティのすすめ?進化したのはサーバだけじゃない!?DBA の毎日をもっと豊かにするユーティリティのすすめ?
進化したのはサーバだけじゃない!?DBA の毎日をもっと豊かにするユーティリティのすすめ?
Michitoshi Yoshida
?
The Art of Network Protocols - RIP編 -
The Art of Network Protocols - RIP編 -The Art of Network Protocols - RIP編 -
The Art of Network Protocols - RIP編 -
kirin_gumi
?
Linuxのプロセススケジューラ(Reading the Linux process scheduler)
Linuxのプロセススケジューラ(Reading the Linux process scheduler)Linuxのプロセススケジューラ(Reading the Linux process scheduler)
Linuxのプロセススケジューラ(Reading the Linux process scheduler)
Hiraku Toyooka
?
Preview: 世界中のゲーム分析をしてきたPlayFabが大進化!一緒に裏側の最新データ探索の仕組みを覗いてみよう
Preview: 世界中のゲーム分析をしてきたPlayFabが大進化!一緒に裏側の最新データ探索の仕組みを覗いてみようPreview: 世界中のゲーム分析をしてきたPlayFabが大進化!一緒に裏側の最新データ探索の仕組みを覗いてみよう
Preview: 世界中のゲーム分析をしてきたPlayFabが大進化!一緒に裏側の最新データ探索の仕組みを覗いてみよう
Daisuke Masubuchi
?
PythonでテキストをJSONにした話(PyCon mini sapporo 2015)
PythonでテキストをJSONにした話(PyCon mini sapporo 2015)PythonでテキストをJSONにした話(PyCon mini sapporo 2015)
PythonでテキストをJSONにした話(PyCon mini sapporo 2015)
Satoshi Yamada
?

More from Ken Morishita (9)

颈翱厂や础苍诲谤辞颈诲アフ?リ开発の骋辞辞诲笔谤补肠迟颈肠别
颈翱厂や础苍诲谤辞颈诲アフ?リ开発の骋辞辞诲笔谤补肠迟颈肠别颈翱厂や础苍诲谤辞颈诲アフ?リ开発の骋辞辞诲笔谤补肠迟颈肠别
颈翱厂や础苍诲谤辞颈诲アフ?リ开発の骋辞辞诲笔谤补肠迟颈肠别
Ken Morishita
?
知らないと损するアフ?リ开発における厂迟补迟别惭补肠丑颈苍别の活用法(蹿耻濒濒版)
知らないと损するアフ?リ开発における厂迟补迟别惭补肠丑颈苍别の活用法(蹿耻濒濒版)知らないと损するアフ?リ开発における厂迟补迟别惭补肠丑颈苍别の活用法(蹿耻濒濒版)
知らないと损するアフ?リ开発における厂迟补迟别惭补肠丑颈苍别の活用法(蹿耻濒濒版)
Ken Morishita
?
知らないと损するアフ?リ开発における厂迟补迟别惭补肠丑颈苍别の活用法(15分版)
知らないと损するアフ?リ开発における厂迟补迟别惭补肠丑颈苍别の活用法(15分版)知らないと损するアフ?リ开発における厂迟补迟别惭补肠丑颈苍别の活用法(15分版)
知らないと损するアフ?リ开発における厂迟补迟别惭补肠丑颈苍别の活用法(15分版)
Ken Morishita
?
厂飞颈蹿迟て?の颈翱厂アフ?リ开発
厂飞颈蹿迟て?の颈翱厂アフ?リ开発厂飞颈蹿迟て?の颈翱厂アフ?リ开発
厂飞颈蹿迟て?の颈翱厂アフ?リ开発
Ken Morishita
?
颈翱厂/础苍诲谤辞颈诲アフ?リエンシ?ニアか?理解すへ?き「惭辞诲别濒」の振る舞い
颈翱厂/础苍诲谤辞颈诲アフ?リエンシ?ニアか?理解すへ?き「惭辞诲别濒」の振る舞い颈翱厂/础苍诲谤辞颈诲アフ?リエンシ?ニアか?理解すへ?き「惭辞诲别濒」の振る舞い
颈翱厂/础苍诲谤辞颈诲アフ?リエンシ?ニアか?理解すへ?き「惭辞诲别濒」の振る舞い
Ken Morishita
?
滨翱厂/础苍诲谤辞颈诲アフ?リの3つの大事な设计方针
滨翱厂/础苍诲谤辞颈诲アフ?リの3つの大事な设计方针滨翱厂/础苍诲谤辞颈诲アフ?リの3つの大事な设计方针
滨翱厂/础苍诲谤辞颈诲アフ?リの3つの大事な设计方针
Ken Morishita
?
最近の単体テスト
最近の単体テスト最近の単体テスト
最近の単体テスト
Ken Morishita
?
尝辞驳を蝉3と谤别诲蝉丑颈蹿迟に格纳する仕组み
尝辞驳を蝉3と谤别诲蝉丑颈蹿迟に格纳する仕组み尝辞驳を蝉3と谤别诲蝉丑颈蹿迟に格纳する仕组み
尝辞驳を蝉3と谤别诲蝉丑颈蹿迟に格纳する仕组み
Ken Morishita
?
Pythonとdeep learningで手書き文字認識
Pythonとdeep learningで手書き文字認識Pythonとdeep learningで手書き文字認識
Pythonとdeep learningで手書き文字認識
Ken Morishita
?
颈翱厂や础苍诲谤辞颈诲アフ?リ开発の骋辞辞诲笔谤补肠迟颈肠别
颈翱厂や础苍诲谤辞颈诲アフ?リ开発の骋辞辞诲笔谤补肠迟颈肠别颈翱厂や础苍诲谤辞颈诲アフ?リ开発の骋辞辞诲笔谤补肠迟颈肠别
颈翱厂や础苍诲谤辞颈诲アフ?リ开発の骋辞辞诲笔谤补肠迟颈肠别
Ken Morishita
?
知らないと损するアフ?リ开発における厂迟补迟别惭补肠丑颈苍别の活用法(蹿耻濒濒版)
知らないと损するアフ?リ开発における厂迟补迟别惭补肠丑颈苍别の活用法(蹿耻濒濒版)知らないと损するアフ?リ开発における厂迟补迟别惭补肠丑颈苍别の活用法(蹿耻濒濒版)
知らないと损するアフ?リ开発における厂迟补迟别惭补肠丑颈苍别の活用法(蹿耻濒濒版)
Ken Morishita
?
知らないと损するアフ?リ开発における厂迟补迟别惭补肠丑颈苍别の活用法(15分版)
知らないと损するアフ?リ开発における厂迟补迟别惭补肠丑颈苍别の活用法(15分版)知らないと损するアフ?リ开発における厂迟补迟别惭补肠丑颈苍别の活用法(15分版)
知らないと损するアフ?リ开発における厂迟补迟别惭补肠丑颈苍别の活用法(15分版)
Ken Morishita
?
厂飞颈蹿迟て?の颈翱厂アフ?リ开発
厂飞颈蹿迟て?の颈翱厂アフ?リ开発厂飞颈蹿迟て?の颈翱厂アフ?リ开発
厂飞颈蹿迟て?の颈翱厂アフ?リ开発
Ken Morishita
?
颈翱厂/础苍诲谤辞颈诲アフ?リエンシ?ニアか?理解すへ?き「惭辞诲别濒」の振る舞い
颈翱厂/础苍诲谤辞颈诲アフ?リエンシ?ニアか?理解すへ?き「惭辞诲别濒」の振る舞い颈翱厂/础苍诲谤辞颈诲アフ?リエンシ?ニアか?理解すへ?き「惭辞诲别濒」の振る舞い
颈翱厂/础苍诲谤辞颈诲アフ?リエンシ?ニアか?理解すへ?き「惭辞诲别濒」の振る舞い
Ken Morishita
?
滨翱厂/础苍诲谤辞颈诲アフ?リの3つの大事な设计方针
滨翱厂/础苍诲谤辞颈诲アフ?リの3つの大事な设计方针滨翱厂/础苍诲谤辞颈诲アフ?リの3つの大事な设计方针
滨翱厂/础苍诲谤辞颈诲アフ?リの3つの大事な设计方针
Ken Morishita
?
最近の単体テスト
最近の単体テスト最近の単体テスト
最近の単体テスト
Ken Morishita
?
尝辞驳を蝉3と谤别诲蝉丑颈蹿迟に格纳する仕组み
尝辞驳を蝉3と谤别诲蝉丑颈蹿迟に格纳する仕组み尝辞驳を蝉3と谤别诲蝉丑颈蹿迟に格纳する仕组み
尝辞驳を蝉3と谤别诲蝉丑颈蹿迟に格纳する仕组み
Ken Morishita
?
Pythonとdeep learningで手書き文字認識
Pythonとdeep learningで手書き文字認識Pythonとdeep learningで手書き文字認識
Pythonとdeep learningで手書き文字認識
Ken Morishita
?

Recently uploaded (11)

2025フードテックWeek大阪展示会 - LoRaWANを使った複数ポイント温度管理 by AVNET玉井部長
2025フードテックWeek大阪展示会 - LoRaWANを使った複数ポイント温度管理 by AVNET玉井部長2025フードテックWeek大阪展示会 - LoRaWANを使った複数ポイント温度管理 by AVNET玉井部長
2025フードテックWeek大阪展示会 - LoRaWANを使った複数ポイント温度管理 by AVNET玉井部長
CRI Japan, Inc.
?
実はアナタの身近にある!? Linux のチェックポイント/レストア機能 (NTT Tech Conference 2025 発表資料)
実はアナタの身近にある!? Linux のチェックポイント/レストア機能 (NTT Tech Conference 2025 発表資料)実はアナタの身近にある!? Linux のチェックポイント/レストア機能 (NTT Tech Conference 2025 発表資料)
実はアナタの身近にある!? Linux のチェックポイント/レストア機能 (NTT Tech Conference 2025 発表資料)
NTT DATA Technology & Innovation
?
ラズパイを使って作品を作ったらラズパイコンテストで碍厂驰赏を貰って、さらに、文化庁メディア芸术祭で审査员推荐作品に选ばれてしまった件?自作チップでラズパイ...
ラズパイを使って作品を作ったらラズパイコンテストで碍厂驰赏を貰って、さらに、文化庁メディア芸术祭で审査员推荐作品に选ばれてしまった件?自作チップでラズパイ...ラズパイを使って作品を作ったらラズパイコンテストで碍厂驰赏を貰って、さらに、文化庁メディア芸术祭で审査员推荐作品に选ばれてしまった件?自作チップでラズパイ...
ラズパイを使って作品を作ったらラズパイコンテストで碍厂驰赏を貰って、さらに、文化庁メディア芸术祭で审査员推荐作品に选ばれてしまった件?自作チップでラズパイ...
Industrial Technology Research Institute (ITRI)(工業技術研究院, 工研院)
?
空间オーディオを用いたヘッドパスワードの提案と音源提示手法の最适化
空间オーディオを用いたヘッドパスワードの提案と音源提示手法の最适化空间オーディオを用いたヘッドパスワードの提案と音源提示手法の最适化
空间オーディオを用いたヘッドパスワードの提案と音源提示手法の最适化
sugiuralab
?
【卒业论文】深层学习によるログ异常検知モデルを用いたサイバー攻撃検知に関する研究
【卒业论文】深层学习によるログ异常検知モデルを用いたサイバー攻撃検知に関する研究【卒业论文】深层学习によるログ异常検知モデルを用いたサイバー攻撃検知に関する研究
【卒业论文】深层学习によるログ异常検知モデルを用いたサイバー攻撃検知に関する研究
harmonylab
?
LF Decentralized Trust Tokyo Meetup 3
LF Decentralized Trust Tokyo Meetup 3LF Decentralized Trust Tokyo Meetup 3
LF Decentralized Trust Tokyo Meetup 3
LFDT Tokyo Meetup
?
第1回日本理学疗法推论学会学术大会での発表资料(2025年3月2日 高桥可奈恵)
第1回日本理学疗法推论学会学术大会での発表资料(2025年3月2日 高桥可奈恵)第1回日本理学疗法推论学会学术大会での発表资料(2025年3月2日 高桥可奈恵)
第1回日本理学疗法推论学会学术大会での発表资料(2025年3月2日 高桥可奈恵)
Matsushita Laboratory
?
狈辞诲补滨迟蝉耻办颈冲反省観点の分类に基づく试合の振り返り支援システムに関する有用性検証冲顿贰滨惭2025
狈辞诲补滨迟蝉耻办颈冲反省観点の分类に基づく试合の振り返り支援システムに関する有用性検証冲顿贰滨惭2025狈辞诲补滨迟蝉耻办颈冲反省観点の分类に基づく试合の振り返り支援システムに関する有用性検証冲顿贰滨惭2025
狈辞诲补滨迟蝉耻办颈冲反省観点の分类に基づく试合の振り返り支援システムに関する有用性検証冲顿贰滨惭2025
Matsushita Laboratory
?
测距センサと滨惭鲍センサを用いた指轮型デバイスにおける颜认証システムの提案
测距センサと滨惭鲍センサを用いた指轮型デバイスにおける颜认証システムの提案测距センサと滨惭鲍センサを用いた指轮型デバイスにおける颜认証システムの提案
测距センサと滨惭鲍センサを用いた指轮型デバイスにおける颜认証システムの提案
sugiuralab
?
【卒业论文】尝尝惭を用いた惭耻濒迟颈-础驳别苍迟-顿别产补迟别における反论の効果に関する研究
【卒业论文】尝尝惭を用いた惭耻濒迟颈-础驳别苍迟-顿别产补迟别における反论の効果に関する研究【卒业论文】尝尝惭を用いた惭耻濒迟颈-础驳别苍迟-顿别产补迟别における反论の効果に関する研究
【卒业论文】尝尝惭を用いた惭耻濒迟颈-础驳别苍迟-顿别产补迟别における反论の効果に関する研究
harmonylab
?
贬补谤耻办颈厂丑颈苍办补飞补冲尝尝惭を利用した果树农家の経験知の対话的蓄积支援冲诲别颈尘2025
贬补谤耻办颈厂丑颈苍办补飞补冲尝尝惭を利用した果树农家の経験知の対话的蓄积支援冲诲别颈尘2025贬补谤耻办颈厂丑颈苍办补飞补冲尝尝惭を利用した果树农家の経験知の対话的蓄积支援冲诲别颈尘2025
贬补谤耻办颈厂丑颈苍办补飞补冲尝尝惭を利用した果树农家の経験知の対话的蓄积支援冲诲别颈尘2025
Matsushita Laboratory
?
2025フードテックWeek大阪展示会 - LoRaWANを使った複数ポイント温度管理 by AVNET玉井部長
2025フードテックWeek大阪展示会 - LoRaWANを使った複数ポイント温度管理 by AVNET玉井部長2025フードテックWeek大阪展示会 - LoRaWANを使った複数ポイント温度管理 by AVNET玉井部長
2025フードテックWeek大阪展示会 - LoRaWANを使った複数ポイント温度管理 by AVNET玉井部長
CRI Japan, Inc.
?
実はアナタの身近にある!? Linux のチェックポイント/レストア機能 (NTT Tech Conference 2025 発表資料)
実はアナタの身近にある!? Linux のチェックポイント/レストア機能 (NTT Tech Conference 2025 発表資料)実はアナタの身近にある!? Linux のチェックポイント/レストア機能 (NTT Tech Conference 2025 発表資料)
実はアナタの身近にある!? Linux のチェックポイント/レストア機能 (NTT Tech Conference 2025 発表資料)
NTT DATA Technology & Innovation
?
ラズパイを使って作品を作ったらラズパイコンテストで碍厂驰赏を貰って、さらに、文化庁メディア芸术祭で审査员推荐作品に选ばれてしまった件?自作チップでラズパイ...
ラズパイを使って作品を作ったらラズパイコンテストで碍厂驰赏を貰って、さらに、文化庁メディア芸术祭で审査员推荐作品に选ばれてしまった件?自作チップでラズパイ...ラズパイを使って作品を作ったらラズパイコンテストで碍厂驰赏を貰って、さらに、文化庁メディア芸术祭で审査员推荐作品に选ばれてしまった件?自作チップでラズパイ...
ラズパイを使って作品を作ったらラズパイコンテストで碍厂驰赏を貰って、さらに、文化庁メディア芸术祭で审査员推荐作品に选ばれてしまった件?自作チップでラズパイ...
Industrial Technology Research Institute (ITRI)(工業技術研究院, 工研院)
?
空间オーディオを用いたヘッドパスワードの提案と音源提示手法の最适化
空间オーディオを用いたヘッドパスワードの提案と音源提示手法の最适化空间オーディオを用いたヘッドパスワードの提案と音源提示手法の最适化
空间オーディオを用いたヘッドパスワードの提案と音源提示手法の最适化
sugiuralab
?
【卒业论文】深层学习によるログ异常検知モデルを用いたサイバー攻撃検知に関する研究
【卒业论文】深层学习によるログ异常検知モデルを用いたサイバー攻撃検知に関する研究【卒业论文】深层学习によるログ异常検知モデルを用いたサイバー攻撃検知に関する研究
【卒业论文】深层学习によるログ异常検知モデルを用いたサイバー攻撃検知に関する研究
harmonylab
?
LF Decentralized Trust Tokyo Meetup 3
LF Decentralized Trust Tokyo Meetup 3LF Decentralized Trust Tokyo Meetup 3
LF Decentralized Trust Tokyo Meetup 3
LFDT Tokyo Meetup
?
第1回日本理学疗法推论学会学术大会での発表资料(2025年3月2日 高桥可奈恵)
第1回日本理学疗法推论学会学术大会での発表资料(2025年3月2日 高桥可奈恵)第1回日本理学疗法推论学会学术大会での発表资料(2025年3月2日 高桥可奈恵)
第1回日本理学疗法推论学会学术大会での発表资料(2025年3月2日 高桥可奈恵)
Matsushita Laboratory
?
狈辞诲补滨迟蝉耻办颈冲反省観点の分类に基づく试合の振り返り支援システムに関する有用性検証冲顿贰滨惭2025
狈辞诲补滨迟蝉耻办颈冲反省観点の分类に基づく试合の振り返り支援システムに関する有用性検証冲顿贰滨惭2025狈辞诲补滨迟蝉耻办颈冲反省観点の分类に基づく试合の振り返り支援システムに関する有用性検証冲顿贰滨惭2025
狈辞诲补滨迟蝉耻办颈冲反省観点の分类に基づく试合の振り返り支援システムに関する有用性検証冲顿贰滨惭2025
Matsushita Laboratory
?
测距センサと滨惭鲍センサを用いた指轮型デバイスにおける颜认証システムの提案
测距センサと滨惭鲍センサを用いた指轮型デバイスにおける颜认証システムの提案测距センサと滨惭鲍センサを用いた指轮型デバイスにおける颜认証システムの提案
测距センサと滨惭鲍センサを用いた指轮型デバイスにおける颜认証システムの提案
sugiuralab
?
【卒业论文】尝尝惭を用いた惭耻濒迟颈-础驳别苍迟-顿别产补迟别における反论の効果に関する研究
【卒业论文】尝尝惭を用いた惭耻濒迟颈-础驳别苍迟-顿别产补迟别における反论の効果に関する研究【卒业论文】尝尝惭を用いた惭耻濒迟颈-础驳别苍迟-顿别产补迟别における反论の効果に関する研究
【卒业论文】尝尝惭を用いた惭耻濒迟颈-础驳别苍迟-顿别产补迟别における反论の効果に関する研究
harmonylab
?
贬补谤耻办颈厂丑颈苍办补飞补冲尝尝惭を利用した果树农家の経験知の対话的蓄积支援冲诲别颈尘2025
贬补谤耻办颈厂丑颈苍办补飞补冲尝尝惭を利用した果树农家の経験知の対话的蓄积支援冲诲别颈尘2025贬补谤耻办颈厂丑颈苍办补飞补冲尝尝惭を利用した果树农家の経験知の対话的蓄积支援冲诲别颈尘2025
贬补谤耻办颈厂丑颈苍办补飞补冲尝尝惭を利用した果树农家の経験知の対话的蓄积支援冲诲别颈尘2025
Matsushita Laboratory
?

BigQuery勉強会 Standard SQL Dialect

  • 2. 今回の内容 ? Standard SQLの基本 ? Standard SQLの便利機能を紹介 ? (user, action, time) というイベントデータの処理例 ? 間隔ベースのセッションIDを付ける ? ユーザやセッションの属性とイベントデータを?つのテーブルにする ? あるAction Xが発?した後、時刻T以内にAction Zが発?する割合の集計 2
  • 4. Standard SQL Dialect ? 2016年6?にBeta公開された書き? ? ?規模かつ複雑な処理の記述が可能 ? (以前のをよく知らないので差分はわからないんですが) ? BQは処理が複雑でも料?同じなのでかなり使いみちがある ? なぜ「Standard」なのかと?われてもわかりません... https://cloud.google.com/blog/big-data/2016/06/bigquery-111-now-with-standard-sql-iam-and-partitioned-tables 4
  • 6. Time Partitioning ? _PARTITIONTIME というのがあるらしいが、よく知らない… ? https://cloud.google.com/bigquery/docs/partitioned-tables ? 今の旧来のテーブルならば という形で取れます SELECT ... FROM `my_dataset.table_name_*` WHERE _TABLE_SUFFIX BETWEEN '20160720' AND FORMAT_DATE('%Y%m%d', CURRENT_DATE()) ① ② 6
  • 7. 細かいこと ? JSON_EXTRACT 関数が消えた ? DISTINCT がまともに動く感じになった ? /* ... */ でコメントになる ? 最後の結果セットをOrder Byできるサイズの上限は結構低い ? 数千万レコードでもNGだったりする ? ※ 完全ではないが対処法はある ? 昔はTipsとしてよく?われていた EACH とかもう不要 7
  • 9. WITH構? SELECT ... FROM ( SELECT ... FROM ( SELECT ... FROM original_data ) as A ) as B WITH A as ( SELECT ... FROM original_data ) , B as ( SELECT ... FROM A ) SELECT ... FROM B ■ 従来記法 ■ WITH記法 ?れ?地獄から解放され、上から下に処理を書けるようになった 9
  • 10. Analytic Function ? 以前の Window Function (今回呼び名変わった?) ? ※新しい機能ではないが紹介 ? 普通のSQL(例えばMySQLの)ではできない、レコード間の演算 ができる 10
  • 11. 11 user action time 1 A 1 1 B 1 1 X 5 1 B 8 1 Z 9 2 A 2 2 B 5 2 D 10 例えば、ユーザ毎にアクセス順序でのSequence IDを付けたい user action time seq 1 A 1 1 1 B 1 2 1 X 5 3 1 B 8 4 1 Z 9 5 2 A 2 1 2 B 5 2 2 D 10 3 SELECT *, RANK() OVER (PARTITION BY user ORDER BY time) as seq FROM data ORDER BY user, seq RANK(): 1から順に連番をふる
  • 12. 12 user action time 1 A 1 1 B 1 1 X 5 1 B 8 1 Z 9 2 A 2 2 B 5 2 D 10 例えば、ユーザ毎に前回アクセスからの経過時刻をとりたい WITH add_last_time as ( SELECT *, LAG(time) OVER (PARTITION BY user ORDER BY time) as last_time FROM data ) , add_span as ( SELECT *, time - last_time as span FROM add_last_time ) select * from add_span ORDER BY user, time user action time last_time span 1 A 1 null null 1 B 1 1 0 1 X 5 1 4 1 B 8 5 3 1 Z 9 8 1 2 A 2 null null 2 B 5 2 3 2 D 10 5 5 LAG(X): ?つ前のXの値を取得する
  • 13. 13 user action time 1 A 1 1 B 1 1 X 5 1 B 8 1 Z 9 2 A 2 2 B 5 2 D 10 例えば、ユーザ毎に最初の2つのデータを残したい WITH add_seq as ( SELECT *, RANK() OVER (PARTITION BY user ORDER BY time) as seq FROM data ) , omit_records as ( SELECT * FROM add_seq WHERE seq <= 2 ) SELECT * FROM omit_records ORDER BY user, seq user action time seq 1 A 1 1 1 B 1 2 2 A 2 1 2 B 5 2
  • 14. Nest (?れ?) ? これがかなり便利 ? 普通のSQLには無い感覚なので慣れは必要だが慣れるとデータ のこねくり回しが捗ります ? 保存?Scanデータ量の削減になる ? user_idのような?字列などの場合特に 14
  • 15. 15 例えば、Actionを?ったユーザをAction毎にまとめる(ユーザの重複OKの場合) user action time 1 A 1 1 B 3 1 X 5 1 B 20 1 Z 22 2 A 2 2 B 30 2 X 60 3 X 4 4 B 2 4 A 4 Row action users 1 A 1 2 4 2 B 1 1 2 4 3 X 1 2 3 4 Z 1 重複しているよ? WITH action_users as ( SELECT action, ARRAY_AGG(user) as users FROM data GROUP by action ) SELECT * FROM action_users ORDER BY action ARRAY_AGG(): GROUP BYと共に使い、 値をARRAY型の1レコードにまとめる
  • 16. 16 例えば、Actionを?ったユーザをAction毎にまとめる(ユニークユーザの場合) user action time 1 A 1 1 B 3 1 X 5 1 B 20 1 Z 22 2 A 2 2 B 30 2 X 60 3 X 4 4 B 2 4 A 4 WITH action_users as ( SELECT action, ARRAY_AGG(user) as users FROM data GROUP by action ) , unique_action_users as ( SELECT action, ARRAY( SELECT DISTINCT user FROM UNNEST(users) as user ) as users FROM action_users ) SELECT * FROM unique_action_users ORDER BY action Row action users 1 A 1 2 4 2 B 1 2 4 3 X 1 2 3 4 Z 1 ARRAY(): Sub Queryが単?列の複数(0~N)レコード を返す場合に使う. UNNEST(): ARRAY型を展開する。 JOIN的になる場合と グループ単位で処理したい場合で 少し意味合いが違う感じ. Row action users 1 A 1 2 4 2 B 1 1 2 4 3 X 1 2 3 4 Z 1
  • 17. ■Group By する必要がある場合: ARRAY_AGG(STRUCT(...)) ... GROUP BY SELECT ..., ARRAY_AGG(STRUCT(col1, col2, ...)) FROM ... GROUP BY X 複数列をArray型に?れる?法 ■Group By する必要がない場合 or 何か計算処理する場合: ARRAY(SELECT STRUCT(...)) SELECT ..., ARRAY( SELECT STRUCT(col1 * 2, SUM(col2) OVER ... , ...) FROM ... ) FROM ... STRUCT(): レコード型を作る。 レコード型という単?列になる。
  • 19. 19 間隔ベースのセッションIDを付ける user action time 1 A 1 1 B 3 1 X 5 1 B 20 1 Z 22 2 A 2 2 B 30 2 X 35 やりたいこと: ユーザ毎にアクセス間隔が10以上なら別のSessionIDを付けるようにしたい 1 2 1 2 user action time last_time new_session session_seq 1 A 1 null 0 1 1 B 3 1 0 1 1 X 5 3 0 1 1 B 20 5 1 2 1 Z 22 20 0 2 2 A 2 null 0 1 2 B 30 2 1 2 2 X 35 30 0 2 WITH add_last_time as ( SELECT *, LAG(time) OVER (PARTITION BY user ORDER BY time) as last_time FROM data ) , add_span as ( SELECT *, IF(time - last_time >= 10, 1, 0) as new_session FROM add_last_time ) SELECT *, 1+SUM(new_session) OVER (PARTITION BY user ORDER BY time) as session_seq FROM add_span ORDER BY user, time
  • 20. user session_seq session_start_time session_end_time session_time_span actions.action actions.time 1 1 1 5 4 A 1 B 3 X 5 1 2 20 22 2 B 20 Z 22 2 1 2 2 0 A 2 2 2 30 35 5 B 30 20 ユーザやセッションの属性とイベントデータを?つのテーブルにする: Step1 user action time 1 A 1 1 B 3 1 X 5 1 B 20 1 Z 22 2 A 2 2 B 30 2 X 35 やりたいこと:ユーザやセッションの属性とイベントデータを?つのテーブルにする WITH ... 略 ... , add_session_seq as ( SELECT *, 1+SUM(new_session) OVER (PARTITION BY user ORDER BY time) as session_seq FROM add_span ) SELECT user, session_seq, MIN(time) as session_start_time, MAX(time) as session_end_time, MAX(time) - MIN(time) as session_time_span, ARRAY_AGG(STRUCT(action, time)) as actions FROM add_session_seq GROUP BY user, session_seq
  • 21. user session_seq ... actions.action actions.time 1 1 A 1 B 3 X 5 1 2 B 20 Z 22 2 1 A 2 2 2 B 30 21 ユーザやセッションの属性とイベントデータを?つのテーブルにする: Step2 やりたいこと:ユーザやセッションの属性とイベントデータを?つのテーブルにする WITH ... 略 ... , group_by_user as ( SELECT user, MAX(session_seq) as session_num, ARRAY_AGG(STRUCT( session_start_time, session_end_time, session_time_span, actions )) as sessions FROM group_by_session GROUP BY user ) SELECT * FROM group_by_user ORDER BY user user session_num sessions.session_start_time sessions.session_end_time sessions.session_time_span sessions.actions.action sessions.actions.time 1 2 1 5 4 A 1 B 3 X 5 20 22 2 B 20 Z 22 2 2 2 2 0 A 2 30 35 5 B 30 X 35
  • 22. 22 ユーザ毎に, あるAction Xが発?した後、時刻T以内にAction Zが発?する割合の集計 やりたいこと: Xの後に時刻10以内にZが発?する割合を求める user action time 1 A 1 1 X 5 1 B 9 1 Z 11 2 A 2 2 X 15 2 Z 40 3 Z 3 3 X 6 4 X 4 4 X 5 4 Z 7 1 0 (時刻10以内でない) 0 (ZがXの後で発?していない) 1 (最初のXに対してのみ計算するとする) X=4, Z=2 → 50% とカウントしたい
  • 23. 23 ユーザ毎に, あるAction Xが発?した後、時刻T以内にAction Zが発?する割合の集計 user action time 1 A 1 1 X 5 1 B 9 1 Z 11 2 A 2 2 X 15 2 Z 40 3 Z 3 3 X 6 4 X 4 4 X 5 4 Z 7 user first_x_time action_times.action action_times.time 1 5 X 5 Z 11 2 15 X 15 Z 40 3 6 Z 3 X 6 4 4 X 4 X 5 Z 7 WITH group_by_user as ( SELECT user, ARRAY_AGG(STRUCT(action, time)) as action_times FROM data WHERE action in ('X', 'Z') GROUP BY user ), pickup_first_x_timeas ( SELECT user, action_times, ( SELECT MIN(time) FROM UNNEST(action_times) WHERE action='X? ) as first_x_time FROM group_by_user ) SELECT * FROM pickup_first_x_time ORDER BY user
  • 24. 24 ユーザ毎に, あるAction Xが発?した後、時刻T以内にAction Zが発?する割合の集計 user first_x_time action_times.action action_times.time 1 5 X 5 Z 11 2 15 X 15 Z 40 3 6 Z 3 X 6 4 4 X 4 X 5 Z 7 WITH ... , count_z as ( SELECT user, first_x_time, ( SELECT COUNT(*) FROM UNNEST(action_times) as a WHERE a.action = 'Z? AND a.time BETWEEN first_x_time AND first_x_time + 10 ) as z_count, action_times FROM pickup_first_x_time ) SELECT * FROM count_z ORDER BY user user first_x_time z_count action_times.action action_times.time 1 5 1 X 5 Z 11 2 15 0 X 15 Z 40 3 6 0 Z 3 X 6 4 4 1 X 4 X 5 Z 7
  • 25. 25 WITH ... SELECT COUNT(*) as x_cnt, COUNTIF(z_count > 0) as z_cnt FROM count_z user first_x_time z_count action_times.action action_times.time 1 5 1 X 5 Z 11 2 15 0 X 15 Z 40 3 6 0 Z 3 X 6 4 4 1 X 4 X 5 Z 7 ユーザ毎に, あるAction Xが発?した後、時刻T以内にAction Zが発?する割合の集計 x_cnt z_cnt 4 2
  • 26. まとめ ? Standard SQLは結構強い ? まだβ版なので仕様が変わる可能性もあるが、考え?などは変 わらないので慣れておくのは良いこと ? 是?活?していきましょう! 26