LoginSignup
0
0

More than 5 years have passed since last update.

TreasureDataでカラム名に大文字が入ってしまった場合のメモ

Last updated at Posted at 2014-04-09

Treasure Dataで、テーブルへのスキーマ設定の際に、カラム名に大文字が入っていると現状では設定できない。

Schemas currently support column names consisting of lowercase alphabets, numbers, and "_" only.
http://docs.treasuredata.com/articles/schema#setting-custom-schema

現状は、データの入れ直しをする必要があるので、全データの入れ直しの手順をメモする。

まず、該当するテーブルに対して、クエリを発行する。

sql
SELECT
*
FROM
(TABLE)
LIMIT 1

上記を実行すると、vカラムの全データとtimeが1行出力される。
v:map time:int

クエリの実行結果をjson形式でダウンロードし、エディタで開く。

sql
["v","time"]
[{"id":"hi","time":"1334102460"},1334102460]

上記からスクリプト用にいらんとこを消しておく。

sql
{"id":"hi","time":"1334102460"}

スクリプトの(jobid)とtablenameを環境に合わせて書き換えて、スクリプトを実行し、標準出力をWebコンソールにコピペする。

ruby
# encoding: utf-8
require 'json'

header = JSON.parse(File.read("~.json", :encoding=>"UTF-8"))
db = "dbname"
table = "tablename"
cnt = 0
puts "-- #{db}.#{table}"
puts "SELECT "
header.each_key do |key|
  cnt += 1
  puts "v['#{key}'] AS #{key.downcase},"  if key != 'time' and cnt != header.length
  puts "v['#{key}'] AS #{key.downcase}"   if key != 'time' and cnt == header.length
  puts "#{key} AS #{key.downcase},"       if key == 'time' and cnt != header.length
  puts "#{key} AS #{key.downcase}"        if key == 'time' and cnt == header.length
end
puts "FROM #{table}"


実行時の結果出力先にTreasureDataを選び、空のテーブルに出力する。

最後にローカルのtdコマンドのswapを実行するとテーブル名の入れ替えができる。

$ td table:swap <db> <スキーマに大文字があるテーブル> <先ほどの結果を出力したテーブル>

Treasure DataについてにRelease Notesが見れるようになりましたね。
http://help.treasuredata.com/customer/portal/topics/624353-release-notes/articles

以上。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0