Skip to content

Instantly share code, notes, and snippets.

View doryokujin's full-sized avatar

doryokujin doryokujin

View GitHub Profile
@doryokujin
doryokujin / file0.sql
Created December 6, 2018 01:32
『Treasure Data でアクセスログ分析の限界に挑む』その④ 〜アクセスに基づいたユーザーセグメントの作成 月次編(時間帯)〜 ref: https://qiita.com/doryokujin/items/750e3f322c2bc00371ac
/* TD_SCHEDULED_TIME() = '2018-11-23 11:11:00' */
/*
SELECT target_month, segment, COUNT(1) AS cnt
FROM
(
*/
SELECT target_month,
CASE
WHEN 50<=ratio_freq_sleeping OR 50<=ratio_pv_sleeping THEN 'sleeping'
WHEN 50<=ratio_freq_morning OR 50<=ratio_pv_morning THEN 'morning'
@doryokujin
doryokujin / file0.sql
Last active December 5, 2018 08:36
『Treasure Data でアクセスログ分析の限界に挑む』その③ 〜アクセスに基づいたユーザーセグメントの作成 月次編(平日/土日)〜 ref: https://qiita.com/doryokujin/items/89392c4cc0bc00c71629
TD_TIME_FORMAT(time,'u','JST') # 1(月曜日) 〜 7(日曜日)
@doryokujin
doryokujin / file0.sql
Last active December 7, 2018 05:36
『Treasure Data でアクセスログ分析の限界に挑む』その② 〜アクセスに基づいたユーザーセグメントの作成 月次編(頻度)〜 ref: https://qiita.com/doryokujin/items/d4899269a0c0aa7db6ea
TD_DATE_TRUNC('day',time,'JST') AS access_day
@doryokujin
doryokujin / file0.sql
Last active May 13, 2021 12:38
『Treasure Data でアクセスログ分析の限界に挑む』その② 〜アクセスに基づいたユーザーセグメントの作成 月次編(アクティビティ)〜 ref: https://qiita.com/doryokujin/items/605158dc61e378685265
WHERE TD_INTERVAL(time, '-10y/-1M', 'JST') /* 1ヶ月前より過去 */
@doryokujin
doryokujin / file0.sql
Last active November 27, 2018 02:23
『Treasure Data でアクセスログ分析の限界に挑む』その① 〜「日次」「週次」「月次」の集計を正しく理解する〜 ref: https://qiita.com/doryokujin/items/773f6008e420c7f3260d
# 基準日 = '2018-11-23 11:11:00'
[2018-11-22 00:00:00, 2018-11-23 00:00:00) # 日次
[2018-11-12 00:00:00, 2018-11-19 00:00:00) # 週次
[2018-10-01 00:00:00, 2018-11-01 00:00:00) # 月次
SELECT * FROM (VALUES (1, 'apple'), (2, 'banana')) as fruit(id, name);
# このクエリでは, 以下のデータセットがクエリ内で生成され使用されています。
# id | name
#-----+--------
# 1 | apple
# 2 | banana
-- 元のクエリ
col1 < 100 OR col2 is TRUE AND TD_TIME_RANGE(time, '2015-11-01')
-- 上のクエリは AND が優先的に考慮されるため, 以下のクエリと同義になります。
-- OR によって左右に分解されたこのクエリでは, TD_TIME_RANGE があるにも関わらず, (col1 < 100) の判定のために全件スキャンになります!
(col1 < 100) OR (col2 is TRUE AND TD_TIME_RANGE(time, '2015-11-01')) 
-- クエリ全体に TIME_RANGE 制約を利かす場合は明示的に () を使いましょう!
-- 以下のクエリでは TIME_RANGE 制約内のデータセットで (col1 < 100 OR col2 is TRUE) が判定されます。
(col1 < 100 OR col2 is TRUE) AND TD_TIME_RANGE(time, '2015-11-01')
SELECT * FROM table1
WHERE
col1 < 100
OR col2 is TRUE
AND TD_TIME_RANGE(time, '2015-11-01')
in:
type: google_analytics
json_key_content: |
{
// from Google API Service Account's Private Key
"type": "service_account",
"project_id": "ga-to-td",
"private_key_id": "18f4c*****",
"private_key": "-----BEGIN PRIVATE KEY-----\nMIIEvgI*****",
...
doryokujin :: ~/mydag » digdag run mydag.dig 1 ↵
2017-01-10 10:38:06 +0900: Digdag v0.9.1
2017-01-10 10:38:08 +0900 [WARN] (main): Using a new session time 2017-01-10T00:00:00+00:00.
2017-01-10 10:38:08 +0900 [INFO] (main): Using session /Users/doryokujin/mydag/.digdag/status/20170110T000000+0000.
2017-01-10 10:38:08 +0900 [INFO] (main): Starting a new session project id=1 workflow name=mydag session_time=2017-01-10T00:00:00+00:00
2017-01-10 10:38:09 +0900 [INFO] (0018@+mydag+setup): echo>: start 2017-01-10T00:00:00+00:00
start 2017-01-10T00:00:00+00:00
2017-01-10 10:38:09 +0900 [INFO] (0018@+mydag+disp_current_date): echo>: 2017-01-10 00:00:00 +00:00
2017-01-10 00:00:00 +00:00
2017-01-10 10:38:09 +0900 [INFO] (0018@+mydag+repeat): for_each>: {order=[first, second, third], animal=[dog, cat]}