[GCP] CloudSQLのデータをCSV出力するには

お世話になっております。
しゃまとんです。

GCPのマネージドデータベースであるCloudSQLにて、DBからCSV化を行いたいと思いもろもろを調べていたのですが、ちょっと手こずったのでメモしておきたいと思います。

CSV出力はどのようにするかぐぐってみると、よく出てくるのが

SELECT … INTO OUTFILE

でのやり方です。

ですが、これをCloudSQLに対して実行すると

ようなエラーとなり拒否されてしまいます。
これは公式にもあるのですが、CloudSQLではOUTFILEがサポートされていません。

Cloud SQL の特長

やり方として、CloudStorageに対してエクスポートする手法を公式で説明していますがいちいち経由するのがちと煩わしいなというところで、別の対処法でCSV化することができます。

やり方は結構シンプルでシェル上でデータを取得(SELECT)して、出力された文字を置換していくだけです。

上記の例では、全ての項目に対して「”」ではさみ、カンマで区切ったものになります。

これでシェル上では対応できるのですが、自分はスクリプト化したかったのでGoで同じような処理をするものを書いてみました。

シェルスクリプトと若干違うのですが、最初の行のカラムには「”」をつけないようにしています。CSVからINSERT文を生成するさいに邪魔になっていたので。

最初は、シェルの処理をそのままGo内で使おうとしていたのですが、なかなかうまくいかなかった(パイプが結構めんどい)ので、他の機能を使って同じような処理を行いました。

ちなみに、メモリコピーが走ったりするので、簡易的なスクリプト等にとどめていただけると幸いです。
以上です。

■ 参考
MySQLのCSV出力が権限によって出来ない場合の対処法
Goで外部コマンドをパイプして実行する