TreasureData

Treasure Data で既存のテーブルと同じスキーマのテーブルを作成する

TreasureData にて、例えば巨大なテーブル A からランダムサンプリングしたテーブル B を作成したいとき、あらかじめテーブル A と同じスキーマを持ったテーブル B を作成しておく必要がある。

Web UI から良い感じにやる方法があるのかと思ったけど見当たらなかったので、td コマンドを使ってなんとかした。

#!/bin/sh -eu

FROM_DB='sample_datasets'
FROM_TABLE='nasdaq'

TO_DB='sample_datasets'
TO_TABLE='nasdaq_sample'

SCHEMA=$(td schema:show $FROM_DB $FROM_TABLE | grep -e '^ ' | perl -ple 's/\s+//g' | tr '\n' ' ')

td table:create $TO_DB $TO_TABLE
td schema:set $TO_DB $TO_TABLE $SCHEMA

以下、簡単な解説。

例えば td schema:show

$ td schema:show sample_datasets nasdaq
sample_datasets.nasdaq (
  symbol:string
  open:double
  volume:long
  high:double
  low:double
  close:double
)

このような形式でスキーマ情報を返してくるので、これを整形して

$ td schema:show sample_datasets nasdaq | grep -e '^ ' | perl -ple 's/\s+//g' | tr '\n' ' '
symbol:string open:double volume:long high:double low:double close:double

このような一行の文字列にすることで、 td schema:set に渡すことが出来るようになる。