ロックとチュウーハイとこりんがるな日々

日々のインプットした事をアウトプットする場所

Aurora ログを設定する

Auroraで出力できるログの種類

  • default

    • error/mysql-error-running.log{,.YYYY-MM-DD.nn}
    • error/mysql-error.log
    • external/mysql-external.log
  • option

    • クエリログ(general_log)
    • スロークエリログ(slow_query_log)

上記が出力できます

logのoutput先を指定

logのアウトプット先にはfile, とtableが選択可能

  1. parameter group
  2. name: log_output
  3. value に table or file を選択する

クエリログ(general_log)

  1. parameter group
  2. name: general_log
  3. value に 1

スロークエリログ(slow_query_log)

  1. parameter group
  2. name: slow_query_log
  3. value に 1

スロークエリの時間を設定する

何秒以上かかったクエリをスロークエリログに吐き出すのかを設定する、デフォルト値は10秒に設定されており、0秒にするとすべてのクエリがログに書かれます

  1. parameter group
  2. name: long_query_time
  3. value に 秒数を指定する

設定の反映

parameter group の反映は10秒ほどで反映します

prestoで整数同士の割り算をすると整数が返される問題の解決方法

prestoで整数同士の割り算を行う整数が返却される場合は良いが以下のような場合に0が返却される

select (10 / 5);

予想される値は 0.5 だが prestoの場合は 0 が返却されてしまう 正常に0.5 を返却してもらうためには以下のようにする必要がある

select (10 * 1.0 / 5);

もしくは以下のようにする

select (cast(5 as DOUBLE) / 10);

prestoの便利関数 url_function

prestoにはURLを分解する関数が付いています、使うと正規表現で分割してたのがアホらしくなるほど便利なんでめもっときます

select 
  url_extract_fragment('http://www.hoge.com:8080/fuga/var/index.php?flag=1&flag2=2#test'),
  url_extract_host('http://www.hoge.com:8080/fuga/var/index.php?flag=1&flag2=2#test'),
  url_extract_parameter('http://www.hoge.com:8080/fuga/var/index.php?flag=1&flag2=2#test', 'flag'),
  url_extract_path('http://www.hoge.com:8080/fuga/var/index.php?flag=1&flag2=2#test'),
  url_extract_port('http://www.hoge.com:8080/fuga/var/index.php?flag=1&flag2=2#test'),
  url_extract_protocol('http://www.hoge.com:8080/fuga/var/index.php?flag=1&flag2=2#test'),
  url_extract_query('http://www.hoge.com:8080/fuga/var/index.php?flag=1&flag2=2#test')
;
  • url_extract_fragment([url])

    与えられたURLからfragment部分を取得します ↑のSQLからは以下が取得されます

      test
    
  • url_extract_host([url])

    与えられたURLからhost部分を取得します ↑のSQLからは以下が取得されます

      www.hoge.com
    
  • url_extract_parameter([url], [parameter_name])

    与えられたURLから指定したパラメーターを取得します ↑のSQLからは以下が取得されます

      1
    
  • url_extract_path([url])

    与えられたURLからpath部分を取得します ↑のSQLからは以下が取得されます

      /fuga/var/index.php
    
  • url_extract_port([url])

    与えられたURLからport部分を取得します ↑のSQLからは以下が取得されます

      8080
    
  • url_extract_protocol([url])

    与えられたURLからprotocol部分を取得します ↑のSQLからは以下が取得されます

      http
    
  • url_extract_query([url])

    与えられたURLからprotocol部分を取得します ↑のSQLからは以下が取得されます

      flag=1&flag2=2
    

公式: https://prestodb.io/docs/current/functions/url.html

prestoで縦持ちのテーブルを横持ちのテーブルに変換する

prestoで縦のテーブルを横のテーブルに変換する方法です

with o as (
  select
    id, age_range, count(td_url) as count
  from
    m
  group by
    id, age_range
),
p as (
  select
    id,
    MAP_AGG(age_range, count) as kv
  from
    o
  group by
    id
)
select
  id,
  IF(kv[20] is null, 0, kv[20]) as arv20,
  IF(kv[25] is null, 0, kv[25]) as arv25,
  IF(kv[30] is null, 0, kv[30]) as arv30,
  IF(kv[35] is null, 0, kv[35]) as arv35,
  IF(kv[40] is null, 0, kv[40]) as arv40,
  IF(kv[45] is null, 0, kv[45]) as arv45,
  IF(kv[50] is null, 0, kv[50]) as arv50,
  IF(kv[55] is null, 0, kv[55]) as arv55,
  IF(kv[60] is null, 0, kv[60]) as arv60
from
  p
  1. map_agg関数でマップ型の構造をつくる
  2. 1で作ったマップを参照する

参照: http://qiita.com/k24d/items/79bc4828c918dfeeac34

TreasureData 前日分のログを指定する方法

最近Treasurdataを使っています 何回か同じ事を調べたのでメモです

hiveとprestoで現在のunixtimestampの取得方法が違ったので以下に書きます

hive

select * from a where
TD_TIME_RANGE(
    time,
    TD_TIME_FORMAT(TD_TIME_ADD(unix_timestamp(), '-1d'), 'yyyy-MM-dd 00:00:00', 'JST'),
    TD_TIME_FORMAT(unix_timestamp(), 'yyyy-MM-dd 00:00:00', 'JST'),
    'JST'
)

1時間前の場合

select * from a where
TD_TIME_RANGE(
    time,
    TD_TIME_FORMAT(TD_TIME_ADD(unix_timestamp(), '-1h'), 'yyyy-MM-dd HH:00:00', 'JST'),
    TD_TIME_FORMAT(unix_timestamp(), 'yyyy-MM-dd HH:00:00', 'JST'),
    'JST'
)

presto

select * from a where
TD_TIME_RANGE(
    time,
    TD_TIME_FORMAT(TD_TIME_ADD(CAST(TO_UNIXTIME(NOW()) as BIGINT), '-1d'), 'yyyy-MM-dd 00:00:00', 'JST'),
    TD_TIME_FORMAT(CAST(TO_UNIXTIME(NOW()) as BIGINT), 'yyyy-MM-dd 00:00:00', 'JST')
    'JST'
)

1時間前の場合

select * from a where
TD_TIME_RANGE(
    time,
    TD_TIME_FORMAT(TD_TIME_ADD(CAST(TO_UNIXTIME(NOW()) as BIGINT), '-1h'), 'yyyy-MM-dd HH:00:00', 'JST'),
    TD_TIME_FORMAT(CAST(TO_UNIXTIME(NOW()) as BIGINT), 'yyyy-MM-dd HH:00:00', 'JST')
    'JST'
)

ウォーキング・デッドはヒューマン・ドラマ

ウォーキング・デッドはヒューマンドラマです 僕とよく話をする人は20回ぐらいこの話を聞いているかもしれないけど 急にブログにまとめて見たくなったので現時点での僕の考えをまとめておく

まずウォーキング・デッドとはアメリカのテレビドラマです、アメコミで原作があるようですが、微妙に 登場人物やストーリーが違っていたりします 2010年ぐらいから放送されており、現在はシーズン7の前半まで放送されています

物語としてゾンビにより世界の終末後を描いています シーズンの最初の方はゾンビ対生存者の戦いを描いており、生存者達はゾンビから身を守れかつ安全に 暮らせる場所を探します

生存者達も脅威はゾンビであり、生存者同士は協力して共通の敵であるゾンビを倒していきます 法も秩序も崩壊していくなか人々はまだ道徳や今までの秩序やルールを守ろうとしますが ゆっくりとゆっくりと生存者達の人格は崩壊していき、新しいルールが作られていきます

そして生存者達の人格はゆっくりと崩壊し、新しいルールのもとに再構築されていきます

ウォーキング・デッドの見どころはゾンビがグロいとかそんな事ではなく上に書いたとおり 生存者達の人格が壊れ再構築されていく過程を楽しむのが最大の見どころかと思っています

物語が進むにつれてゾンビは新しい世界を構成する一つの要素でしかなく、そこにいて当たり前の 存在になっていきます脅威はゾンビではなく、人間になっていきます

戦いだけでなく、他にも色々なヒューマン・ドラマが展開されるのがウォーキング・デッドです ぜひ一度見て下さい

ちなみに物語の中ではゾンビという言葉は一度も登場していません、ウォーカーやバイター、感染者なんて よばれています ウォーカーという呼び名は人間を指している可能性もあります、この世界においてゾンビも人間もあるき続ける 者たちです

でわであ