FuelPHPからBigqueryに対してクエリーを実行するときのメモ。
GoogleCloudPlatformのサービスにアクセスするための認証設定はGoogleCloudStrageにファイルをアップロードを参考に。
簡潔にソースコードは以下になります。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 |
private static $gdata = null; const json_path = APPPATH . 'json/xxxx.json'; const accessTokenPath = APPPATH . 'cache/accessToken.txt'; /** * Bigquery からデータを取得してくる * @param string $query 実行したいクエリー 例)SELECT * FROM [プロジェクトID:データセット名.テーブル名] LIMIT 1000 */ public static function bq_query($query) { Package::load('gdata'); if (is_null(static::$gdata)) { static::$gdata = Gdata::forge( 'Bigquery', $instance_name = 'default', $config = array() ); } if (is_file(static::accessTokenPath)) { static::$gdata->client->setAccessToken(file_get_contents(static::accessTokenPath)); } // JSONキーからクレデンシャルをロードする $credential = static::$gdata->client->loadServiceAccountJson( static::json_path, [Google_Service_Bigquery::BIGQUERY] ); // クレデンシャルをクライアントに設定する static::$gdata->client->setAssertionCredentials($credential); /* @var $auth Google_Auth_OAuth2 */ $auth = static::$gdata->client->getAuth(); // アクセストークンの有効期限を確認する // 有効期限切れなら再取得して保存する if ($auth->isAccessTokenExpired()) { $auth->refreshTokenWithAssertion($credential); file_put_contents(static::accessTokenPath, static::$gdata->client->getAccessToken()); } $bigquery = new Google_Service_Bigquery(static::$gdata->client); $projectId = 'プロジェクトIDを指定'; // Pack a BigQuery request. $request = new Google_Service_Bigquery_QueryRequest(); $request->setQuery($query); $response = $bigquery->jobs->query($projectId, $request); try { $rows = $response->getRows(); $result = []; foreach ($rows as $row) { $data = []; foreach ($row['f'] as $field) { $data[] = $field['v']; } $result[] = $data; } } catch (\Exception $e) { return []; } return $result; } |
簡単にBigqueryからデータを取得することができます。
One comment to this article
Gerrie
on 2016年11月16日 at 9:01 PM -
That saves me. Thanks for being so selebins!