文系人間がデータサイエンティストを目指すブログ

中学で数学をあきらめた超文系人間が、大学院に進学し、データサイエンティストを目指すという無謀なブログです。

【スポンサーリンク】

データ分析およびITの初心者が、GoogleのBigQueryを使って、つまづいた8つのこと

【スポンサーリンク】

Excelファイルで遊びはじめて早2年、基本情報処理技術者試験に2回連続で落ちるなど遺憾無くそのおバカっぷりを発揮している私ですが、「「使っている」と言うだけで、マウンティングできる」Googleのビッグデータ分析向けデータウェアハウス、BigQueryを曲がりなりにもトライアルしてみたので、使う際につまづいたことをまとめていきたいと思います。

 

なお、IT業界に詳しくない方におかれましては、「あぁ、なんか意味不明なことをやってるな」と、IT業界に詳しい方におかれましては、「えw?そんな基本的なところで躓いたんw?」とご笑納いただければ幸いです。

 

【何をしたかったか?】

環境の変化により、パワーのあるマシンを使えなくなった直後のタイミングで、サイズ合計2GB、合計1600万行、138個のCSVファイルを集計、編集、加工しなきゃいけないことに。

 

以前なら、サーバーにインストールしたTableau desktopで編集、加工していれば、コーヒー飲みながら1時間以内でできていた作業ですが、不運にもその環境が使えなくなったので、泣く泣く別の方法を考えることに。

 

ある程度詳しい方であれば、「MySQLですればいいやん」とかお感じになられると思いますが、

そもそも私は、

「前処理」→Access or Tableau or Excel or SQL(サーバーにデータが蓄積されているときのみ)

「可視化」→Tableau or  Excel

「統計解析」→R  or Excel

という、なんちゃってデータ分析者だったので、「素人にも簡単に使えますよ」とGoogle様が謳っているBigQueryに「マウンティングできるかも」というスケベ心もあり、チャレンジしてみることに。

 

【つまづき1.アップロードできるファイルのサイズに制限があります】

BigQueryに代表されるGoogle Cloud Platformには色々なサービスがあり、「何が何かわからん」状態になること必須なのですが、とりえず今回は前処理したいだけなので、BigQueryだけ使うことに。

BigQueryにデータを投入するには、

1.ファイルのアップロード

2.Google Cloud Strageから引っ張ってくる

という主に2パターンあるのですが、あんまり他のサービスとか使いたくないので、1.のファイルのアップロードを試みてみることに。

 

Dailyのデータファイルだったので、1日ごとにcsvファイル(1日あたり約12MB)をアップロードをしようとしたところ、【10MB以上のファイルはアップロードできません】【英語】無慈悲な通知が。

 

やむなくGoogle Cloud Strageからファイルを移していく方法に切り替えることに

 

【つまづき2.Google Cloud StrageからBig Queryへの投入は1ファイル単位】

Google Cloud Strageへのファイルのアップロード自体はそんなに難しいことじゃなく、1つであろうと、138個であろうと、ファイル名を選択してするだけ。もちろん複数個でも可能。

問題が、Google Cloud Strage→BigQueryへのファイル移設の際、1ファイル単位でしか移設できなかったこと。

もしかしたら私が知らないだけで、便利な方法はあるのかもですが、138個のファイルを移設する作業は、さすがに飽きました。

 

【つまづき3.カラム名は英語only】

データを移設する際には、他のSQLサーバーにデータを取り込むのと同じく、列名(カラム名)とデータ形式を指定いなければいけないのですが、列名(カラム名)は英語しか使えません。

アホーな私は「CSVファイルの列名と同じにしよう!」と日本語を入れたのですが、当然ながら拒否されます。

当たり前すぎる・・・・・。

 

【つまづき4.日本語を含むファイルの場合、文字コードに注意】

取り込んでるファイルは、日本語を含むCSVファイルだったのですが、無事BigQueryに投入後、プレビューしてみると見事に日本語が文字化けしている・・・・・

調べてみると、そもそものcsvファイルの文字コードがANSIだったことに起因するとのこと。なので、138個のcsvファイルの文字形式をそれぞれUTF-8に変換していったのですが、さすがに飽きました。

 

【つまづき5.独特のSQLクエリ】

そもそもやりたいことの第一は、1つ1つのdailyのファイルを合算することだったので、select ~ from ~ union と何も考えずに打ち込んだのですが、BigQueryにはUNION句はありません。

まぁ、もともとのUNION句の性質とBigQueryがカラム志向だと言うことを知ってしまえば納得できるんですが、SQLに関しては、他にも一般的なDBとちょくちょく違う点があるので、検索しながらやってみるのがよろしいかと。

 

【つまづき6.クエリを開始する際には実行する場所を選択してください】

SQLクエリを書いたら、あとは赤字の「RUN QUERY」をクリックしてワクワクしながら結果を待ちたいところですが、何回押してもQuery Failedとの結果が・・・。正しいクエリを書いてるし、ここまでさせといてなんでやねん!と怒りの気持ちに駆られますが、慌てず、Show OptionsをクリックしてProcessing Location(実行する場所)を選んでください。

MUSTな項目を隠すんじゃねーよ」

とか思わないで・・・・

 

【つまづき7.Bigという名前に甘えないで、テーブル合算は常識の範囲内で】

上記の設定が終わって、無事クエリを書いて実行したところ、38秒後くらいに「大きすぎて時間がかかりすぎてるので終了します」との無慈悲な通知英語で表示されました。

 

さすがに138個のファイル、合計すれば1600万行を一度に結合するのはアホすぎたか

ただ、よく見ればRegacy SQLが云々と英語で書いてあったので、回避方法はあるのかも。これについては引き続きトライアルかな。

 

【つまづき8.抽出結果がExcelの限界を超える可能性】

すったもんだがあって、作業が完了。抽出結果をcsvにexportしようしたところ、excelのレコードの上限に引っかかってしまうと言う笑えない事態に。

テキスト化→Tableauに読み込ませるが可能だったので、結果的に事なきを得たんですが、最終的にどのフォーマットで誰に渡すか?を意識しないとエラい目に遭うな、を予感させる事態だったのでした。

 

【まとめ】

以上、色々書いてきましたが、ほとんどが私の「説明書を読まずにやってみる性格」と「英語力のなさ」に起因するものかと。実際、一度覚えるとスラスラと使えますしね。

 

しかし、つい1年前までスペックの低いPCとExcelで数字遊びしていた身分としては、クラウドってほんまに便利やなぁ、と。早いし、安いし、どこでも使えるし。

これを知ってるか知らないかで、何かと差が出てしまうのは当たり前だな、と思うのでした。

 

最近流行りの「AIが人間の仕事を奪う」にも通じることがありますが、結局はITをはじめとするツールって「使う側と使われる側(使わない側)の差が開いてくる」だけじゃないかな、と。

もちろん得られるものと失うものの比較検証は必要だと思いますが。

と、話を大きくして終わりたいと思います。

 

ではでは。

 

※参考にした本

 

スッキリわかる SQL 入門 ドリル215問付き! (スッキリシリーズ)

スッキリわかる SQL 入門 ドリル215問付き! (スッキリシリーズ)

 

 

 

プログラマのためのGoogle Cloud Platform入門 サービスの全体像からクラウドネイティブアプリケーション構築まで

プログラマのためのGoogle Cloud Platform入門 サービスの全体像からクラウドネイティブアプリケーション構築まで

 

 

 

ビッグデータ分析・活用のためのSQLレシピ

ビッグデータ分析・活用のためのSQLレシピ

 

 

【スポンサーリンク】