仕事中の問題と解決メモ。

最近はPythonとGoogle Cloud Platformがメイン。株式会社ビズオーシャンで企画と開発運用、データ活用とか。https://github.com/uyamazak/

Google Cloud SQLでCSVインポートをコマンドでできない問題

Cloud SQLをデータ分析の一時テーブル的に使おうとしているけど、ブラウザ上のCloud Consoleではうまくいくのに、自分のマシンからgcloudコマンドでやるとエラーが連発する。

WEBブラウザ上は下記のような画面で、選択時に必要な権限を付加するとか、CSVなのかSQLのダンプなのか選べたり、テーブルを指定できる。

f:id:uyamazak:20170822104938p:plain

これでやると成功する

2017/08/22 10:41:45	インポート	gs://*******/member.csv.gz からインポートしました。

gcloudコマンドでそれっぽいコマンドのヘルプ

% gcloud beta sql instances import --help

NAME
    gcloud beta sql instances import - imports data into a Cloud SQL instance
        from Google Cloud Storage

SYNOPSIS
    gcloud beta sql instances import INSTANCE URI [--async]
        [--database=DATABASE, -d DATABASE] [GCLOUD_WIDE_FLAG ...]

DESCRIPTION
    (BETA) Note: authorization is required. For more information on importing
    data into Google Cloud SQL see
    https://cloud.google.com/sql/docs/import-export/importing.

POSITIONAL ARGUMENTS
     INSTANCE
        Cloud SQL instance ID.

     URI
        Path to the MySQL dump file in Google Cloud Storage from which the
        import is made. The URI is in the form gs://bucketName/fileName.
        Compressed gzip files (.gz) are also supported.

FLAGS
     --async
        Do not wait for the operation to complete.

     --database=DATABASE, -d DATABASE
        The database (for example, guestbook) to which the import is made. If
        not set, it is assumed that the database is specified in the file to be
        imported.

GCLOUD WIDE FLAGS
    These flags are available to all commands: --account, --configuration,
    --flatten, --format, --help, --log-http, --project, --quiet, --trace-token,
    --user-output-enabled, --verbosity. Run $ gcloud help for details.

NOTES
    This command is currently in BETA and may change without notice. This
    variant is also available:

        $ gcloud sql instances import

CSVSQLかを選択するオプションが見当たらない。もちろんテーブルも指定できないのでCSVは使えないふいんき(ry


それでもCloud Storage上のCSV(gz圧縮)をインポートしようとするとまず権限エラーが出る

2017/08/22 10:29:29	インポート	 gs://**********/member.csv.gz: Access denied for account ************@speckle-umbrella-2.iam.gserviceaccount.com (permission issue?)	
2017/08/22 10:27:26	インポート	 gs://**********/member.csv.gz: Access denied for account ************@speckle-umbrella-2.iam.gserviceaccount.com (permission issue?)	
2017/08/22 10:27:05	インポート	 gs://**********/member.csv.gz: Access denied for account ************@speckle-umbrella-2.iam.gserviceaccount.com (permission issue?)

これはブラウザでCloud Storageの画面からログに表示されたユーザーに権限追加したら消えた。このユーザーはどのタイミングで変わるのかは分からない。

と、現時点でCloud SQLCSVインポートを自動で行うには、Storageの権限問題と、CSV使えない問題が出てしまうので、PythonかなんかでMySQLとしてつなげて、CSV読み込んで流し込むスクリプトを作る必要がありそう。めんどい。