データサイエンス

BigQuery, GCS, Matillionで日本語はどこまで使えるか?

どうも、最近ふとセリーグの本塁打ランキングを見ると、村上、岡本、佐藤(照)の並びになっていて「そっか、もう時代は、令和なんだな……」としみじみ思った、平成初期生まれの分析官、岡部です。

今回はGoogle BigQueryやGCS、Matillionといったデータサイエンス界のホームランキングたるこれらの海外サービスで、日本語での命名がどこまで使えるかをまとめとこうと思います。要は備忘録です。
例えば、ひとえにBigQueryと言っても、データセット名やテーブル名、カラム名、その中の値など、異なる概念がいくつもあります。つまりこの中でどこに日本語が使えて、どこに使えないのかを明確にしとこうということですね。
異なるレベルでの話をごちゃ混ぜにして「GCPでは日本語が使える」みたいなざっくりとした理解でいると、「え!この前は使えたのに!」ということになりかねませんので……(主に自分への戒め)

 

ことの発端

同僚からの以下の質問でした

「Matillion経由でGCS上のファイルをBQにテーブルとしてインポートしたいんですが、そもそもテーブル名って日本語を使えるんですか??」

おやまあ、なんと簡単な質問でしょう。
「俺に……任せとけぃ!」と言わんばかりに、意気揚々と以下のような回答をいたしました。
【注】サイゼリヤの間違い探しばりに紛らわしい嘘が散りばめられています。ご注意ください。

「BigQueryのデータセット・テーブル名いずれも日本語は使えません。(キリッ)」

「ちなみに、カラム名にも日本語は不可、値としては日本語OKです。(ドヤ)」

「また、GCS上のバケット名・ファイル名にも日本語は使用不可です。(フフン)」

さて、自信満々に答えたはいいものの、冷静になって考えると
(果たして本当に正しかった……のか……??)という疑問がふつふつと湧いてきます。
そこで実際に検証してみたところ、上記回答は大嘘であることが判明いたしました。

それでは正しい回答はなんだったのか?
以下で確認していきましょう。

「BigQueryのデータセット名・テーブル名いずれも日本語は使えません。」 ▶︎ 「データセット名には使用不可だが、テーブル名には使用可能」

「データセットID」だったり「テーブルID」ともいうようです。
(「ID」と言われると一気に日本語使えない気がしてきますね。)

データセット名には使えません↓

f:id:gri-blog:20210626200708p:plain

テーブル名には使えます↓

f:id:gri-blog:20210626200831p:plain

▼ 公式ドキュメントはこちら
例にも「00_お客様」が使えると書いてありますね。

「ちなみに、カラム名にも日本語は不可、値としては日本語OKです。」▶︎ 正しい

値というのはデータの中身ですね。例としては割愛させていただきますが、問題なく使えます。
イメージとしてはこのような感じでしょうか↓
f:id:gri-blog:20210626195619p:plain

▼ 公式ドキュメントはこちら

「また、GCS上のバケット名・ファイル名にも日本語は使用不可です。」▶︎ 「バケット名には使用不可だが、フォルダ名・ファイル名には使用可能」

■ バケット名

ご覧の通りバケット名には使えないようです↓
f:id:gri-blog:20210626201155p:plain

▼ 公式ドキュメントはこちら

■ フォルダ名・ファイル名

正確には両者区別されず「オブジェクト名」と呼称されているようです。
こちらは両者とも使用可能です。
f:id:gri-blog:20210626214620p:plain

▼ 公式ドキュメントはこちら

Matillionではどうなのか?

ことの発端は「Matillionで日本語を取り扱えるのか?」というものでしたので、こちらも検証します。
GCP側でそもそも使えないところはともかく、BigQueryのテーブル名や、GCSのオブジェクト名が日本語だった場合、適切に処理できるのでしょうか?

まずは先程の「日本語テスト」を読み込んでみましょう。
…………読み込めません。問答無用で怒られます。
f:id:gri-blog:20210626214735p:plain

それではテーブル出力はどうでしょう?
……こちらも問答無用で怒られますね。どうやらBigQueryの日本語テーブルはMatillionでは扱えないようです。
f:id:gri-blog:20210626214821p:plain

お次はGCS。
テーブル名に日本語を指定すると怒られるのは、先ほどと同じ。

f:id:gri-blog:20210626215115p:plain

ではGCSのオブジェクト名はどうでしょう?
英数字のみで命名されたテーブルを、日本語オブジェクト名(日本語テスト2)で出力してみます。
……こちらはできそう。

f:id:gri-blog:20210626215330p:plain

実際に出力されていることを確認しました。

f:id:gri-blog:20210626215413p:plain

 

おわりに:教訓めいたこと

こうしてみると、使えたり使えなかったりの地雷が至る所に埋まっています。
世界中に展開しているとはいえ海外製サービス、致命的な箇所以外の日本語対応は、
「まだ慌てるような時間じゃない」みたいな感じで後回しにされたりするものなのかもしれませんね。

なんにせよ今回の件から私が得るべき教訓は「自分の数少ない経験から変な推論をせず、何がどこまで適用可能かを明確にする」ということでしょう。(貝木泥舟風)
「BigQueryではカラム名に日本語が使えなかった」→「テーブル名も日本語が使えないに違いない」というような推論です。

ノーベル経済学賞受賞のダニエル・カーネマン教授もいうように、
どうやら人間というものはとかく、自身の数少ない経験から帰納的に結論を導いてしまうようです。
認知のクセなので、経験からの推論が正しいと思い込むこと自体はしょうがないでしょう。
しかし、だからこそ時には「正しいと思い込んでるだけかもしれない」と疑ってかかることが必要なのだと思います。
(カーネマンに言わせると「システム2」で「システム1」を監視する。)

とまあ、最後は蛇足でしたが、本記事がどなたかの参考になると幸いです。
また詳しい方、いまだに私の理解が間違っている場合、そっと教えていただけると助かります。
それでは快適なGCPライフを。

Taizo Okabe
脳筋系データサイエンティスト。筋肉は裏切らない。筋肉。