td-client-rubyでTreasureDataにテーブルとカラムを作る


td-client-rubyを使っていろいろTreasureDataに投げ込む作業をしてたんですが、そもそもテーブルの作り方もカラムの作り方も、ソース以外に書いてありそうなものがなくて戸惑ったので、メモ書きです。

テーブルの作成

client = TreasureData::Client.new("TD_APIKEY")

とか適当に初期化は済んでいる前提で

client.create_log_table("DB名", "テーブル名")

これ実態としては

client.create_table("DB名", "テーブル名", "log")

で、そもそもlogってなんぞやっていうとTDにはテーブルのタイプというのがあるようなんですが、いまはlogしかないのかな?
https://docs.treasuredata.com/articles/td-cli#td-tablecreate
cliでもtypeオプションはあるんですが、log以外の扱いについて記述はないですね。

なので、今のところテーブル作成は

client.create_log_table("DB名", "テーブル名")

でよいようです。
(というかcreate_tableの方は呼べないはず)

カラムの作成

いやいや、TDって自動でよしなにカラム作成してくれるからいいじゃんって思うじゃないですか?
そう思ってたんですけどね、投げ込むデータによっては、longだと誤認されて死亡とかそういうこともあるし、なによりカラム順がぐちゃぐちゃだと見づらくて死ぬみたいなこともあるので、指定して作成できるならそうしたい。

client.update_schema("DB名", "テーブル名", table_schema)

update_schemaというのがあるのでこんな感じでできるんですが、困ったのはtable_schemaをどういう形で渡したら満足するのかということ。
なんとなくjsonで渡すのかなあとかやってみると"Arrayでよこせ"と言われArrayで渡そうとすると500が返る。。

まあ結論、二次元配列なんですけどね。

table_schema = [["hoge", "string"],["fuga", "long"]]

といった形で渡してあげると、stringのhoge列とlongのfuga列(とtime)を持ったテーブルになります。

https://github.com/treasure-data/td-client-ruby/blob/master/lib/td/client/api/table.rb#L71
もしかしてここ、Array of arraysであるべきでは…?

以上、なにかの参考になればmm