データインポート
- Streaming Import
- App Mobile SDK
- Bulk Import
の3種類ある。
Webアプリだと1,3の2つでログ的なものは1, DBにストアしているものは3の方法で入れれば、大抵の場合は良さそう。
スキーマ定義
TDは基本的にはログをJSON形式で送るだけなので、予めテーブルを作ったり、スキーマを決めておく必要はない。
ただ、データを送信した後に、解析する際、各フィールドをv['user_id']
と言った形でアクセスせずに、user_id
でアクセスできるようにするために、以下のようにスキーマを定義すると良い。このスキーマを作ることで、デフォルトの型が指定される。また、定義は後で変更することが出来る。
事例集
Hive Query の例が色々載っていて参考になる。
ただし、たまに間違いがあるので注意w
TreasureData UDF
UDFを使うとセッションでの最初のアクセス元を求める等、普通のSQLでは書くことが難しいクエリが簡単にかけたりする。
パフォーマンスチューニング
- TD_TIME_RANGE と TD_TIME_FORMAT は一緒に使ってはいけない
- v['hoge']を使わずにカスタムスキーマを使う
-
SELECT COUNT(DISTINCT(field))
を使ってはいけない -
SELECT COUNT(1) FROM ( SELECT DISTINCT field FROM tbl ) t
と書く -
ORDER BY
よりSORT BY
を使う (違いについて) -
GROUP BY
はより分散できるものを先に置く - good: SELECT GROUP BY uid, gender
- bad: SELECT GROUP BY gender, uid