[BigQuery API(V2)] Javaでゴミ箱に移動されたデータセットを復元する

BigQuery API V2(Java)を使用して、
BigQueryでゴミ箱に移動されたデータセットを復元する方法
についてご紹介します。

ゴミ箱に移動されたデータセットを復元する場合、
そのデータセットに対しIAM権限が付与されている必要があります。

権限付与に関しては
[⧉[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-レスポンスの内容)|

## 1. データセットを復元
ゴミ箱に移動されたデータセットを復元します。
削除されたデータセットは、タイムトラベル期間内であれば復元できます。

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

### 1.2. 実行
作成するデータセットIDの設定は必須です。

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

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

#### 1.2.2. リクエストボディ
Bigquery.Datasets.Undeleteのsetメソッドにより、リクエストボディを追加できます。

|メソッド|引数|説明|
|---|---|---|
|setDeletionTime|String|データセットが削除された時刻<br>指定しない場合は、最後に削除されたバージョンを復元|

### 1.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)|課金モデル|

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

#### 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>
おしまい。。