[BigQuery API(V2)] Javaでデータセットを取得する

BigQuery API V2(Java)を使用して、
BigQueryのデータセットを取得する方法
についてご紹介します。

取得可能なデータセットはAPIで使用するメールアドレス
(サービスアカウントメールアドレス or OAuth2.0認証を行うメールアドレス)
からのアクセス権限が付与されているものだけです。

権限付与に関しては
[⧉[BigQuery API(V2)] JavaでBigQueryを使う(2.権限付与)](https://qiita.com/doran/items/8b7ba29672527426e88d#2-権限付与)
を参照ください。

:::note info
APIを利用する環境の準備から始める場合や、コードを実行する際は、
[⧉[BigQuery API(V2)] JavaでBigQueryを使う](https://qiita.com/doran/items/8b7ba29672527426e88d)
を参照ください。
:::

|No||目次|
|---|---|---|
|1||[データセット一覧を取得](#1-データセット一覧を取得)|
||1|[スコープ](#11-スコープ)|
||2|[実行](#12-実行)|
||3|[レスポンスの内容](#13-レスポンスの内容)|
|2||[データセットを取得](#2-データセットを取得)|
||1|[スコープ](#21-スコープ)|
||2|[実行](#22-実行)|
||3|[レスポンスの内容](#23-レスポンスの内容)|

## 1. データセット一覧を取得
指定したプロジェクトのデータセット一覧を取得します。

### 1.1. スコープ
このAPIを実行するには、以下のいずれかのスコープを指定してください。
```
BigqueryScopes.BIGQUERY
BigqueryScopes.CLOUD_PLATFORM
BigqueryScopes.CLOUD_PLATFORM_READ_ONLY
https://www.googleapis.com/auth/bigquery.readonly
```
[⧉[BigQuery API(V2)] JavaでBigQueryを使う(3.2. BigQueryインスタンスを取得)](https://qiita.com/doran/items/8b7ba29672527426e88d#32-bigqueryインスタンスを取得)
でスコープを指定してください。

### 1.2. 実行

```java
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);
}
```
#### 1.2.1. HTTPリクエスト
GET:　https:\//bigquery.googleapis.com/bigquery/v2/projects/{プロジェクトID}/datasets
が実行されます。

#### 1.2.2. クエリパラメータ
Bigquery.Datasets.Listのsetメソッドにより、クエリパラメータを追加できます。

|メソッド|引数|説明|
|---|---|---|
|setMaxResults|Integer|結果の最大数|
|setPageToken|String|取得するページトークン|
|setAll|Boolean|非表示のデータセットを含むか|
|setFilter|String|結果をラベルでフィルタリングするための式<br>形式："labels.<名前>[:<値>]"|

### 1.3. レスポンスの内容
#### DatasetList
|メソッド|戻り値|説明|
|---|---|---|
|getKind|String|リソースの種類<br>固定文字列："bigquery#datasetList"|
|getNextPageToken|String|次のページトークン|
|getEtag|String|結果ページのハッシュ値|
|getDatasets|List\<[DatasetList.Datasets](#datasetlistdatasets)\>|プロジェクト内のデータセット|

#### DatasetList.Datasets
|メソッド|戻り値|説明|
|---|---|---|
|getId|String|プロジェクト名を含むデータセットID<br>形式：「プロジェクト名:データセットID」|
|getKind|String|リソースの種類<br>固定文字列："bigquery#dataset"|
|getDatasetReference|[DatasetReference](#datasetreference)|データセット参照|
|getLabels|Map\<String,String\>|このデータセットに関連付けられたラベル|
|getFriendlyName|String|データセットの代替名|
|getLocation|String|データセットのロケーション|

#### DatasetReference
|メソッド|戻り値|説明|
|---|---|---|
|getDatasetId|String|データセットID|
|getProjectId|String|プロジェクトID|

## 2. データセットを取得
指定したデータセットのメタデータを取得します。

### 2.1. スコープ
このAPIを実行するには、以下のいずれかのスコープを指定してください。
```
BigqueryScopes.BIGQUERY
BigqueryScopes.CLOUD_PLATFORM
BigqueryScopes.CLOUD_PLATFORM_READ_ONLY
https://www.googleapis.com/auth/bigquery.readonly
```
[⧉[BigQuery API(V2)] JavaでBigQueryを使う(3.2. BigQueryインスタンスを取得)](https://qiita.com/doran/items/8b7ba29672527426e88d#32-bigqueryインスタンスを取得)
でスコープを指定してください。

### 2.2. 実行
データセットIDは、[DatasetReferenceのgetDatasetId()](#datasetreference)で取得できる値を使用します。

```java
public static void main(String[] args) throws Exception{
    Bigquery bigquery = getBigquery();
    Bigquery.Datasets datasets = bigquery.datasets();
    
    Bigquery.Datasets.Get list = datasets.get("プロジェクトID","データセットID");
    
    Dataset res = list.execute();
    System.out.println(res);
}
```
#### 2.2.1. HTTPリクエスト
GET:　https:\//bigquery.googleapis.com/bigquery/v2/projects/{プロジェクトID}/datasets/{データセットID}
が実行されます。

#### 2.2.2. クエリパラメータ
クエリパラメータはありません。

### 2.3. レスポンスの内容
#### Dataset
|メソッド|戻り値|説明|
|---|---|---|
|getId|String|プロジェクト名を含むデータセットID<br>形式：「プロジェクト名:データセットID」|
|getEtag|String|結果ページのハッシュ値|
|getKind|String|リソースの種類<br>固定文字列："bigquery#dataset"|
|getLocation|String|データセットのロケーション|
|getSelfLink|String|リソースにアクセスするために使用できるURL|
|getLabels|Map\<String,String\>|このデータセットに関連付けられたラベル|
|getDatasetReference|[DatasetReference](#datasetreference)|データセット参照|
|getFriendlyName|String|データセットの代替名|
|getDescription|String|データセットのわかりやすい説明|
|getType|String|[データセットのタイプ](#データセットのタイプ)|
|getDefaultTableExpirationMs|Long|データセット内のすべてのテーブルのデフォルトの存続期間(ミリ秒)|
|getDefaultPartitionExpirationMs|Long|デフォルトのパーティションの有効期限(ミリ秒)|
|getAccess|List\<[Dataset.Access](#datasetaccess)\>|エンティティのデータセット|
|getCreationTime|Long|データセットが作成された時刻(ミリ秒)|
|getLastModifiedTime|Long|データセットが最後に変更された日付(ミリ秒)|
|getDefaultEncryptionConfiguration|[EncryptionConfiguration](#encryptionconfiguration)|データセット内のすべてのテーブルのデフォルトの暗号化キー|
|getLinkedDatasetSource|[LinkedDatasetSource](#linkeddatasetsource)|【getType()がLINKEDの場合】<br>データセット参照|
|getExternalDatasetReference|[ExternalDatasetReference](#externaldatasetreference)|【getType()がEXTERNALの場合】<br>データセット参照|
|getIsCaseInsensitive|Boolean|データセットとそのテーブル名が大文字と小文字を区別しないか|
|getDefaultCollation|String|データセット内に今後作成されるテーブルのデフォルトの照合仕様<br>"und:ci"(ロケールは不明、文字の大小区別なし)、""(空の文字列。文字の大小区別あり)|
|getDefaultRoundingMode|[RoundingMode(enum)](#roundingmode)|このデータセット内で作成される新しいテーブルのデフォルトの丸めモード仕様|
|getMaxTimeTravelHours|Long|タイムトラベルウィンドウの定義(時間)|
|getTags|List\<[Dataset.Tags](#datasettags)\>|データセットのタグ|
|getStorageBillingModel|[StorageBillingModel(enum)](#storagebillingmodel)|課金モデル|

#### Dataset.Access
|メソッド|戻り値|説明|
|---|---|---|
|getRole|String|IAMロールID|
|getUserByEmail|String|アクセス許可するメールアドレス(サービスアカウントメールアドレス or OAuth2.0認証を行うメールアドレス)|
|getGroupByEmail|String|アクセス許可するグループのメールアドレス|
|getDomain|String|アクセス許可するドメイン|
|getSpecialGroup|String|アクセス許可する特別なグループ|
|getIamMember|String|IAMポリシーに表示されるユーザー、グループ、ドメイン、または特別なグループではない他のタイプのメンバー|
|getView|[TableReference](#tablereference)|アクセスを許可する別のデータセットからのビュー|
|getRoutine|[RoutineReference](#routinereference)|アクセスを許可する別のデータセットのルーティン|
|getDataset|[DatasetAccessEntry](#datasetaccessentry)|データセットへの読み取りアクセス許可|

#### TableReference
|メソッド|戻り値|説明|
|---|---|---|
|getProjectId|String|プロジェクトID|
|getDatasetId|String|データセットID|
|getTableId|String|テーブルID|

#### RoutineReference
|メソッド|戻り値|説明|
|---|---|---|
|getProjectId|String|プロジェクトID|
|getDatasetId|String|データセットID|
|getRoutineId|String|ルーティンID|

#### DatasetAccessEntry
|メソッド|戻り値|説明|
|---|---|---|
|getDataset|[DatasetReference](#datasetreference)|このエントリが適用されるデータセット
|getTargetTypes|List\<[TargetType(enum)](#targettype)\>|このエントリが適用されるデータセット内のリソース|

#### Dataset.Tags
|メソッド|戻り値|説明|
|---|---|---|
|getTagKey|String|タグキーの名前空間付きフレンドリ名|
|getTagValue|String|タグ値の短縮名|

#### EncryptionConfiguration
|メソッド|戻り値|説明|
|---|---|---|
|getKmsKeyName|String|CloudKMS暗号化キー|

#### LinkedDatasetSource
|メソッド|戻り値|説明|
|---|---|---|
|getSourceDataset|[DatasetReference](#datasetreference)|ソースデータセット参照|

#### ExternalDatasetReference
|メソッド|戻り値|説明|
|---|---|---|
|getExternalSource|String|このデータセットを裏付ける外部ソース|
|getConnection|String|externalSourceへのアクセスに使用される接続ID|

#### RoundingMode
|定義値|内容|
|---|---|
|ROUNDING_MODE_UNSPECIFIED|設定なし|
|ROUND_HALF_AWAY_FROM_ZERO|NUMERIC値とBIGNUMERIC値の書き込み時に精度と位取りを適用するときに、半分の値をゼロから四捨五入する|
|ROUND_HALF_EVEN|NUMERIC値とBIGNUMERIC値の書き込み時に精度と位取りを適用するときに、半分の値を最も近い偶数値に丸める|

#### StorageBillingModel
|定義値|内容|
|---|---|
|STORAGE_BILLING_MODEL_UNSPECIFIED|設定なし|
|LOGICAL|論理バイトに対する課金|
|PHYSICAL|物理バイトに対する課金|

#### TargetType
|定義値|内容|
|---|---|
|TARGET_TYPE_UNSPECIFIED|未使用(使用不可)|
|VIEWS|このエントリはデータセット内のビューに適用|

#### データセットのタイプ
|定義値|内容|
|---|---|
|DEFAULT|所有者と承認されたアカウントのみがアクセス可能なデータセット|
|PUBLIC|誰でもアクセス可能なデータセット|
|LINKED|リンクされたデータセット|
|EXTERNAL|外部メタデータカタログに定義されているデータセット|

<br>
<br>
おしまい。。