0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

TreasureDataと文字化け

Posted at

文字化けに遭遇

突然ですが、Treasure Data(以下TD)でPrestoクエリを実行したら文字化けしてしまっていた、なんてことありませんか?
Screen Shot 2019-12-05 at 19.28.50.png

そもそも文字化けって

文字化けというと、UTF-8のファイルをShift-jisとして開いてしまったときに発生するイメージを持っているかと思います。
テキストエディタで文字コードを指定して開いてみます。

# UTF-8で開いた場合
col1,col2,col3
テスト1,テスト2,テスト3
# Shift-jisで開いた場合
col1,col2,col3
繝�繧ケ繝茨シ�,繝�繧ケ繝茨シ�,繝�繧ケ繝茨シ�

想定通り文字化けしていますね。
これと同じことがTDへデータインポートする際に発生しているのです。

Treasure Data の文字コード

TDはUTF-8でデータを保持しています。
そのため、例えばShift-jisのcsvファイルをTDへアップロードする場合は「Shift-jisのデータが対象だよ」と教えてあげる必要があり、正しく設定していればデータアップロード時にUTF-8へ自動変換してくれます。

意図的に文字化けを発生させてみる

UTF-8のファイルをアップロードして文字化けを発生させてみましょう。

TDコンソール(ブラウザ)でアップロードする場合、Advanced Settingsから文字コードを指定することができます。
Screen Shot 2019-12-05 at 19.50.25.png

UTF-8のファイルなのですが、あえてShift-JISと設定してみます。
Screen Shot 2019-12-05 at 19.46.16.png

すると先述のようにプレビュー時点で文字化けしてしまっています。もちろんこのままアップロードするとプレビュー通り文字化けした状態で格納されます。
Screen Shot 2019-12-05 at 19.56.03.png

TDで文字化けが発生してしまったら

先述したように文字化けした状態でTDへデータをアップロードしてしまうと、文字コードは当然UTF-8なのですが、間違った文字が格納されている状態になっています。無理やり解釈した結果が入っているわけです。

事後対応としては対象レコードをDELETEしてから、正しくデータ投入し直す必要があります。
プレビューで確認してからデータアップロードできればよいのですが、業務の中で毎回プレビューを表示しチェックするのはなかなか難しいかと思います。

事前に十分なテストを実施し、文字化けが発生しないようにしましょう。

ダウンロード結果のみが文字化けしている場合

TDコンソールにてPresto/Hiveクエリを実行すると結果をダウンロードすることができます。
現時点では文字コードがUTF-8の一択なので、ダウンロードしたファイルをShift-jisとして開いてしまい文字化けしているように見えてしまうことが考えられます。
その場合は、TD上では正しくデータが格納されているので、どの文字コードとして処理しているのか、落ち着いて整理してみてください。

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

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?