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
に渡すことが出来るようになる。