LoginSignup
0
0

[BigQuery API(V2)] JavaでBigQueryを使う

Last updated at Posted at 2024-05-05

BigQuery API(V2)をJavaで使ってみました。
今回の記事はAPIの利用を開始するのに必要なことを記事にしました。

BigQuery APIとは
BigQueryとは、Googleが提供するデータウェアハウスです。
大容量のデータを高速で安価に解析できることが特徴です。

BigQueryを操作するAPIはいくつも用意されています。
今回はその中のメインとなる「BigQuery API」を利用します。

API 内容
BigQuery API データセット、テーブル、ジョブ、ルーティンなどのコアリソースを作成、変更、削除するためのリソースを提供するメインのAPI
BigQuery Data Policy API 列レベルのセキュリティとデータ マスキングに関する BigQuery データポリシーを管理
BigQuery Connection API BigQuery で Cloud SQL などのリモート データソースを操作できるように、リモート接続を確立するためのコントロール プレーンを提供するAPI
BigQuery Migration API ユーザーが既存のデータ ウェアハウスを BigQueryに移行できるようにするメカニズムを提供するAPI
BigQuery Storage API 独自のアプリケーションやツールから大量のマネージド データをスキャンする必要があるユーザー向けに、高スループットのデータ読み取りを提供するAPI
BigQuery Reservation API 企業ユーザーがスロットや BigQuery BI Engine のメモリ割り当てなどの専用リソースをプロビジョニングし管理するためのメカニズムを提供するAPI
Analytics Hub 組織内および組織間でのデータ共有が容易にするためのAPI
BigQuery Data Transfer Service API マネージド取り込みワークフローで利用するAPI

BigQueryの利用料金は公式の⧉BigQuery の料金を参照ください。

No 目次
1 BigQuery APIを使用するための準備
1 プロジェクトの作成
2 BigQuery APIの設定
3 APIを使用するためのキー取得
1 サービス アカウント
2 OAuth2.0 クライアントID
2 権限付与
1 プロジェクト単位で権限付与
2 データセット単位で権限付与
3 テーブル単位で権限付与
4 レコード(行レベル)単位で権限付与
3 BigQuery APIを使ってみる
1 googleライブラリの読み込み
2 Bigqueryインスタンスを取得
1 サービスアカウントを利用する場合
2 OAuth 2.0 クライアントIDを利用する場合
3 プログラムの実行
4 いろいろとAPIを叩いてみる
1 v2.datasets
2 v2.jobs
3 v2.models
4 v2.projects
5 v2.routines
6 v2.rowAccessPolicies
7 v2.tabledata
8 v2.tables

1. BigQuery APIを使用するための準備

設定は下記から行います。
⧉Google クラウド プラットフォーム

やることは下記の4つです。
1. GCPプロジェクトの作成
2. BigQuery APIの有効化
3. プログラムで使用するキーの取得

3.は、サービスアカウントかOAuth2.0を利用する2つの方法があります。
BigQuery APIはAPIキーの利用はサポートしていません。

1.1. プロジェクトの作成

まずはGCPでプロジェクトを作成します。
詳細はこちらの記事を参照ください
⧉[Google Sheets API] Google Sheets API v4をJavaで操作する(1.1. プロジェクトの作成)

1.2. BigQuery APIの設定

BigQuery APIを使えるようにします。

No 手順
1 メニューの 「APIとサービス」 -> 「ライブラリ」 を選択します。
2 Bigquery api と入力して「BigQuery API」を検索します。
3 「有効にする」ボタンを押して「BigQuery API」を使用可能にします。

1.3. APIを使用するためのキー取得

プログラムからAPIを実行するための準備を行います。

1.3.1. サービス アカウント

同じ内容を下記の記事に掲載してますので、下記の記事を参照ください。
⧉[Google Sheets API] Google Sheets API v4をJavaで操作する(1.3. Googleサービスアカウントの作成)

1.3.2. OAuth2.0 クライアントID

同じ内容を下記の記事に掲載してますので、下記の記事を参照ください。
⧉[Google Drive API v3] JavaでDrive APIを使う(1.3.2. OAuth2.0 クライアントID)

2. 権限付与

APIを使用してアクセスするには権限の付与が必須です。
プロジェクト単位、データセット単位、テーブル単位、
さらにはレコード(行レベル)単位で権限を付与できます。

APIをいろいろと叩く予定なので、ロールに「BigQuery管理者」を指定していますが、
状況に応じて適切に設定してください。

2.1. プロジェクト単位で権限付与

プロジェクト単位で権限を付与します。

No 手順
1 メニュー「IAMと管理」 -> 「IAM」を選択します。
2 「アクセス権を付与」を選択します。
3 下記を入力・設定して「保存」ボタンを押します。

新しいプリンシパル:サービスアカウントメールアドレスか、OAuth2.0認証を行うメールアドレス
ロールを選択:BigQuery管理者

2.2. データセット単位で権限付与

データセットの単位で権限を付与します。

No 手順
1 対象のデータセットを選択し、上部メニューの「共有」->「権限」を選択します。
2 権限の共有画面が表示されるので「プリンシパルを追加」を押します。
3 下記を入力・設定して「保存」ボタンを押します。

新しいプリンシパル:サービスアカウントメールアドレスか、OAuth2.0認証を行うメールアドレス
ロールを選択:BigQuery管理者

2.3. テーブル単位で権限付与

データセットの単位で権限を付与します。

No 手順
1 対象のテーブルを選択し、上部メニューの「共有」を選択します。
2 権限の共有画面が表示されるので「プリンシパルを追加」を押します。
3 下記を入力・設定して「保存」ボタンを押します。

新しいプリンシパル:サービスアカウントメールアドレスか、OAuth2.0認証を行うメールアドレス
ロールを選択:BigQuery管理者

2.4. レコード(行レベル)単位で権限付与

レコード(行レベル)の単位で権限を付与します。

詳細は、公式の⧉ BigQuery の行レベルのセキュリティの概要を参照ください。

3. BigQuery APIを使ってみる

3.1. googleライブラリの読み込み

BigQuery APIを使用するためにライブラリのパスを設定します。
私の環境はpom.xmlで下記を指定しています。
Javaのバージョンは21を使用しています。

<dependencies>
    <dependency>
        <groupId>com.google.api-client</groupId>
        <artifactId>google-api-client</artifactId>
    </dependency>
    <dependency>
        <groupId>com.google.cloud</groupId>
        <artifactId>google-cloud-bigquery</artifactId>
    </dependency>
    <!-- OAuth2.0でAPIを使う場合は下記を追加してください。 -->
    <dependency>
        <groupId>com.google.oauth-client</groupId>
        <artifactId>google-oauth-client-jetty</artifactId>
    </dependency>
</dependencies>

<dependencyManagement>
    <dependencies>
        <dependency>
            <groupId>com.google.cloud</groupId>
            <artifactId>libraries-bom</artifactId>
            <version>26.34.0</version>
            <type>pom</type>
            <scope>import</scope>
        </dependency>
    </dependencies>
</dependencyManagement>

3.2. BigQueryインスタンスを取得

3.2.1. サービスアカウントを利用する場合

コード中の「JSONファイルのパス」は、
⧉[Google Sheets API] Google Sheets API v4をJavaで操作する(1.3. Googleサービスアカウントの作成)
で取得したJSONファイルのパスを指定してください。

コード中の「スコープ」は、
実行するAPIによって異なるので適時に変更してください。

private static Bigquery getBigquery() throws Exception {
    HttpTransport transport = GoogleNetHttpTransport.newTrustedTransport();
    GsonFactory jsonFactory = GsonFactory.getDefaultInstance();
    
    try(InputStream input = new FileInputStream("JSONファイルのパス")){
        GoogleCredentials credentials = GoogleCredentials
                .fromStream(input)
                .createScoped(Arrays.asList("スコープ"));
        
        return new Bigquery(transport, jsonFactory, new HttpCredentialsAdapter(credentials));
    }
}

3.2.2. OAuth 2.0 クライアントIDを利用する場合

コード中の「JSONファイルのパス」は、
⧉[Google Drive API v3] JavaでDrive APIを使う(1.3.2.1 認証情報の作成)
で取得したJSONファイルのパスを指定してください。

コード中の「認証情報を保存するフォルダパス」は、
認証情報が保存されるフォルダのパスを指定してください。
このコードを実行するとOAuth同意画面が表示されます。
ユーザーが同意をすると認証情報を保存するフォルダにファイルが生成されます。
このファイルが存在した場合は、再度実行してもOAuth同意画面は表示されません。

コード中の「スコープ」は、
実行するAPIによって異なるので適時に変更してください。
途中でスコープを変更した場合は再度のOAuth同意が必要になるので
「認証情報を保存するフォルダパス」にあるファイルを削除するか、パスを変えてください。

private static Bigquery getBigquery() throws Exception {
    HttpTransport transport = GoogleNetHttpTransport.newTrustedTransport();
    GsonFactory jsonFactory = GsonFactory.getDefaultInstance();
    
    try(Reader reader = new InputStreamReader(new FileInputStream("JSONファイルのパス"))){
        GoogleClientSecrets clientSecrets = GoogleClientSecrets.load(jsonFactory,reader);

        GoogleAuthorizationCodeFlow flow = new GoogleAuthorizationCodeFlow.Builder(
                transport, jsonFactory, clientSecrets, 
                Arrays.asList("スコープ"))
            .setDataStoreFactory(new FileDataStoreFactory(new java.io.File("認証情報を保存するフォルダパス")))
            .build();
        
        LocalServerReceiver receiver = new LocalServerReceiver.Builder().build();
        Credential credential = new AuthorizationCodeInstalledApp(flow, receiver).authorize("user");
        
        return new Bigquery.Builder(transport, GsonFactory.getDefaultInstance(), credential).build();
    }
}

3.3. プログラムの実行

プログラムを動かします。

サンプルではプロジェクト内のデータセットの一覧を取得しています。
なお、データセットにアクセス可能な権限がないと取得することはできません。
必要に応じてデータセットに権限を付与してください。

public static void main(String[] args) throws Exception{
    Bigquery bigquery = getBigquery();
    Bigquery.Datasets datasets = bigquery.datasets();
    
    Bigquery.Datasets.List list = datasets.list("プロジェクトID");
    
    DatasetList res = list.execute();
    System.out.println(res);
}

4. いろいろとAPIを叩いてみる

いろいろなAPIを叩いてみます。
順次記事にしていきます。

4.1. v2.datasets

データセットに関する操作

メソッド 概要 記事
delete データセットを削除 ⧉[BigQuery API(V2)] Javaでデータセットを生成・更新・削除する
get 指定したデータセットの情報を取得 ⧉[BigQuery API(V2)] Javaでデータセットを取得する
insert データセットを作成 ⧉[BigQuery API(V2)] Javaでデータセットを生成・更新・削除する
list データセットの一覧を取得 ⧉[BigQuery API(V2)] Javaでデータセットを取得する
patch データセットの情報を更新 ⧉[BigQuery API(V2)] Javaでデータセットを生成・更新・削除する
undelete データセットの削除を取り消す ⧉[BigQuery API(V2)] Javaでゴミ箱に移動されたデータセットを復元する
update データセットの情報を上書き ⧉[BigQuery API(V2)] Javaでデータセットを生成・更新・削除する

4.2. v2.jobs

ジョブに関する操作

メソッド 概要 記事
cancel ジョブの実行をキャンセル comming soon
delete ジョブを削除 comming soon
get 指定したジョブの情報を取得 ⧉[BigQuery API(V2)] JavaでBigQueryのジョブを取得する
getQueryResults ジョブの実行結果を取得 comming soon
insert ジョブを生成&実行 comming soon
list ジョブのリストを取得 ⧉[BigQuery API(V2)] JavaでBigQueryのジョブを取得する
query クエリを実行 comming soon

4.3. v2.models

BigQuery ML モデルに関する操作

メソッド 概要 記事
delete モデルを削除 ⧉[BigQuery API(V2)] JavaでBigQuery ML モデルの情報を更新・削除する
get 指定したモデルの情報を取得 ⧉[BigQuery API(V2)] JavaでBigQuery ML モデルの情報を取得する
list モデルのリストを取得 ⧉[BigQuery API(V2)] JavaでBigQuery ML モデルの情報を取得する
patch モデルの情報を更新 ⧉[BigQuery API(V2)] JavaでBigQuery ML モデルの情報を更新・削除する

4.4. v2.projects

プロジェクトに関する操作

メソッド 概要 記事
getServiceAccount 指定したプロジェクトのサービスアカウントのメールアドレスを取得 ⧉[BigQuery API(V2)] Javaでサービスアカウントのメールアドレスを取得する
list プロジェクトの一覧を取得 ⧉[BigQuery API(V2)] Javaでアクセス可能なプロジェクト一覧を取得する

4.5. v2.routines

ルーティンに関する操作

メソッド 概要 記事
delete ルーティンを削除 ⧉[BigQuery API(V2)] Javaでデータセットのルーティンを生成・更新・削除する
get 指定したルーティンの情報を取得 ⧉[BigQuery API(V2)] Javaでデータセットのルーティン情報を取得する
insert ルーティンを作成 ⧉[BigQuery API(V2)] Javaでデータセットのルーティンを生成・更新・削除する
list ルーティンのリストを取得 ⧉[BigQuery API(V2)] Javaでデータセットのルーティン情報を取得する
update ルーティンの情報を更新 ⧉[BigQuery API(V2)] Javaでデータセットのルーティンを生成・更新・削除する

4.6. v2.rowAccessPolicies

行レベルのアクセス制御に関する操作

メソッド 概要 記事
getIamPolicy 行レベルのアクセス制御ポリシーを取得 ⧉[BigQuery API(V2)] JavaでBigQueryテーブルの行レベルのアクセス制御ポリシーのリストを取得する
list 行レベルのアクセス制御ポリシーのリストを取得 ⧉[BigQuery API(V2)] JavaでBigQueryテーブルの行レベルのアクセス制御ポリシーのリストを取得する
testIamPermissions 行レベルのアクセス許可をテスト ⧉[BigQuery API(V2)] JavaでBigQueryテーブルの行レベルのアクセス許可をテストする

4.7. v2.tabledata

レコードに関する操作

メソッド 概要 記事
insertAll BigQueryにレコードを挿入 ⧉[BigQuery API(V2)] JavaでBigQueryテーブルの行(レコード)を挿入する
list テーブルの内容を行(レコード)単位のリストで取得 ⧉[BigQuery API(V2)] JavaでBigQueryテーブルの行(レコード)を取得する

4.8. v2.tables

テーブルに関する操作

メソッド 概要 記事
delete テーブルを削除 ⧉[BigQuery API(V2)] JavaでBigQueryテーブルを生成・更新・削除する
get 指定したテーブルの情報を取得 ⧉[BigQuery API(V2)] JavaでBigQueryテーブルの情報を取得する
getIamPolicy テーブルのアクセス制御ポリシーを取得 ⧉[BigQuery API(V2)] Javaでテーブルのアクセス制御ポリシーを取得する
insert テーブルを作成 ⧉[BigQuery API(V2)] JavaでBigQueryテーブルを生成・更新・削除する
list テーブル情報のリストを取得 ⧉[BigQuery API(V2)] JavaでBigQueryテーブルの情報を取得する
patch テーブルの情報を更新 ⧉[BigQuery API(V2)] JavaでBigQueryテーブルを生成・更新・削除する
setIamPolicy テーブルにアクセス制御ポリシーを設定 ⧉[BigQuery API(V2)] JavaでBigQueryテーブルにアクセス制御ポリシーを設定する
testIamPermissions テーブルのアクセス許可をテスト ⧉[BigQuery API(V2)] JavaでBigQueryテーブルのアクセス許可をテストする
update テーブルの情報を上書き更新 ⧉[BigQuery API(V2)] JavaでBigQueryテーブルを生成・更新・削除する


おしまい。。
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0