🎃

LaravelからBigQueryのテーブルにインサート

2021/01/01に公開

LaravelからBigQueryのテーブルにインサートする方法です。

環境

Laravel6 LTS
PHP7.4
schulzefelix/laravel-bigquery (version1.2.0)

Laravelへのインストール手順

1. schulzefelix/laravel-bigquery (version1.2.0)のインストール
Laravel6は最新のパッケージでは非対応なので、version1.2.0を指定してインストールする。

//パッケージのインストール
composer require schulzefelix/laravel-bigquery:1.2

//設定ファイルの生成
php artisan vendor:publish --provider="SchulzeFelix\BigQuery\BigQueryServiceProvider"

2. .envにサービスアカウントのjsonのフルパス設定、プロジェクトIDの設定

#BigQuery
GOOGLE_CLOUD_APPLICATION_CREDENTIALS=/var/www/html/file.json
GOOGLE_CLOUD_PROJECT_ID=project_id

使用方法

        try {
            //queryのセット
	    //BigQueryで有効なインサート文を設定
            $rawQuery = ' INSERT INTO dataset.`table` (column1 ,column2)VALUES(data1,data2)';
	    //query設定
            $query = \BigQuery::query($rawQuery );
            //queryを実行
            $result = \BigQuery::runQuery($query);

            //データ挿入に成功ならtrue
            var_dump($result->isComplete());
	    
	    //結果情報を取得
            var_dump($result->info());
        } catch (\Exception $e) {
	    //インサートの失敗はエラーでスローされる。
	    //カラム間違い、データの型間違いでスローを確認
            var_dump($e->getMessage());
        }

エラーメッセージ例

{ "error": { "code": 400, "message": "Value has type STRING which cannot be inserted into column event_type, which has type INT64 at [1:99]", "errors": [ { "message": "Value has type STRING which cannot be inserted into column event_type, which has type INT64 at [1:99]", "domain": "global", "reason": "invalidQuery", "location": "q", "locationType": "parameter" } ], "status": "INVALID_ARGUMENT" } }

Discussion