Google Sheets API v4(Java)を使用して、
スプレットシートにBigqueryのデータを使用して表を作成する方法
についてご紹介します。
メニュー:「データ」 ⇨ 「データコネクタ」 ⇨ 「Bigquery に接続」
で実行できる内容と同じです。
APIを利用する環境の準備から始める場合や、コードを実行する際は、
⧉[Google Sheets API] Google Sheets API v4をJavaで操作する
を参照ください。
例:requests.add(moveDimension(sheetId)); //実行したいリクエストのMethodを指定
その他のGoogle Sheets APIは、下記の記事を参照ください。
⧉[Google Sheets API] JavaでスプレットシートのメニューとAPIを関連づけてみた
No | 目次 | |
---|---|---|
1 | 準備 | |
2 | 表を作成する | |
1 | テーブルをそのまま使用する | |
2 | 表にするカラムを指定する |
1. 準備
まず、
使用しているサービスアカウントでBigqueryへアクセスできるようにしてください。
ググればその方法が書いてある記事があると思いますので説明は割愛します。
次に、
⧉[Google Sheets API] Google Sheets API v4をJavaで操作する
の「Sheetsインスタンスの取得」の項目にある
getSpreadsheetsメソッド内のGoogleCredentialsインスタンス生成箇所で
スコープ「"https://www.googleapis.com/auth/bigquery"」を追加してください。
GoogleCredentials credential = ServiceAccountCredentials.fromStream(input)
.createScoped(Arrays.asList(SheetsScopes.SPREADSHEETS,"https://www.googleapis.com/auth/bigquery"));
以上で準備は完了です。
2. 表を作成する
Bigquery内の指定テーブルをまるまる使用する方法
と、
クエリを使用して必要なカラムだけを使用する方法
があります。
2.1. テーブルをそのまま使用する
Bigquery上のテーブルをそのままスプレットシートに表示させます。
サンプル コード
今回は、Bigqueryのpublicデータ(bigquery-public-data.america_health_rankings.ahr)
を使用します。
public Request addDataSource() {
Request request = new Request();
BigQueryDataSourceSpec bigQuery = new BigQueryDataSourceSpec();
//課金プロジェクトのID
bigQuery.setProjectId("*****");
BigQueryTableSpec tableSpec = new BigQueryTableSpec();
//テーブルが属するBigqueryプロジェクトID
tableSpec.setTableProjectId("bigquery-public-data");
//BigQuery データセットID
tableSpec.setDatasetId("america_health_rankings");
//BigQuery テーブルID
tableSpec.setTableId("ahr");
bigQuery.setTableSpec(tableSpec);
DataSourceSpec spec = new DataSourceSpec();
spec.setBigQuery(bigQuery);
DataSource source = new DataSource();
source.setSpec(spec);
//データソースのIDを指定。指定いない場合は自動採番
source.setDataSourceId("11111111");
AddDataSourceRequest r = new AddDataSourceRequest();
r.setDataSource(source);
request.setAddDataSource(r);
return request;
}
実行結果
新しいシートにBigqueryにあるテーブルの表が作成されました。
2.2. 表にするカラムを指定する
サンプル コード
先程と同じテーブルに
「SELECT edition,state_name,source FROM
bigquery-public-data.america_health_rankings.ahr
LIMIT 5」
を投げます。
public Request addDataSource() {
Request request = new Request();
BigQueryDataSourceSpec bigQuery = new BigQueryDataSourceSpec();
//課金プロジェクトのID
bigQuery.setProjectId("*****");
//クエリを設定
BigQueryQuerySpec querySpec = new BigQueryQuerySpec();
querySpec.setRawQuery("SELECT edition,state_name,source FROM `bigquery-public-data.america_health_rankings.ahr` LIMIT 5");//生のクエリ文字列。
bigQuery.setQuerySpec(querySpec);
DataSourceSpec spec = new DataSourceSpec();
spec.setBigQuery(bigQuery);
DataSource source = new DataSource();
source.setSpec(spec);
//データソースのIDを指定。指定いない場合は自動採番
source.setDataSourceId("222222");
AddDataSourceRequest r = new AddDataSourceRequest();
r.setDataSource(source);
request.setAddDataSource(r);
return request;
}
実行結果
指定したクエリ(カラム:edition,state_name,source、5行まで)の
表が作成されました。
おしまい。。