[BigQuery API(V2)] JavaでBigQueryテーブルを生成・更新・削除する

BigQuery API V2(Java)を使用して、
BigQueryデータセットの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-レスポンスの内容)|
|2||[テーブルを上書き](#2-テーブルを上書き)|
||1|[スコープ](#21-スコープ)|
||2|[実行](#22-実行)|
||3|[レスポンスの内容](#23-レスポンスの内容)|
|3||[テーブルを更新](#3-テーブルを更新)|
||1|[スコープ](#31-スコープ)|
||2|[実行](#32-実行)|
||3|[レスポンスの内容](#33-レスポンスの内容)|
|4||[テーブルを削除](#4-テーブルを削除)|
||1|[スコープ](#41-スコープ)|
||2|[実行](#42-実行)|
||3|[レスポンスの内容](#43-レスポンスの内容)|

## 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. 実行

```java
public static void main(String[] args) throws Exception{
    Bigquery bigquery = getBigquery();
    Bigquery.Tables tables = bigquery.tables();
    
    TableReference reference = new TableReference();
    reference.setTableId("テーブルID");
    
    Table content = new Table();
    content.setTableReference(reference);
     
    Bigquery.Tables.Insert insert = tables.insert("プロジェクトID","データセットID",content);
    
    Table res = insert.execute();
    System.out.println(res);
}
```
#### 1.2.1. HTTPリクエスト
POST:　https:\//bigquery.googleapis.com/bigquery/v2/projects/{プロジェクトID}/datasets/{データセットID}/tables
が実行されます。

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

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

|メソッド|引数|説明|
|---|---|---|
|setTableReference|[TableReference](#tablereference)|【生成時 必須】テーブルのリファレンス|
|setFriendlyName|String|テーブルの名前|
|setDescription|String|テーブルの説明|
|setLabels|Map\<String,String\>|テーブルに関連付けられたラベル|
|setSchema|[TableSchema](#tableschema)|テーブルのスキーマ情報|
|setTimePartitioning|[TimePartitioning](#timepartitioning)|テーブルの時間ベースのパーティショニング情報|
|setRangePartitioning|[RangePartitioning](#rangepartitioning)|テーブルの範囲パーティション化情報|
|setClustering|[Clustering](#clustering)|テーブルのクラスタリング情報|
|setRequirePartitionFilter|Boolean|パーティションの削除に使用できるパーティションフィルターを指定する必要があるか|
|setView|[ViewDefinition](#viewdefinition)|テーブルのビュー情報|
|setMaterializedView|[MaterializedViewDefinition](#materializedviewdefinition)|マテリアライズドビュー情報|
|setExternalDataConfiguration|[ExternalDataConfiguration](#externaldataconfiguration)|テーブルのデータ形式|
|setEncryptionConfiguration|[EncryptionConfiguration](#encryptionconfiguration)|カスタム暗号化構成の情報|
|setDefaultCollation|String|STRINGフィールドのデフォルトの照合仕様<br>"und:ci"(ロケールは不明、大文字と小文字は区別されない)、""(空の文字列。大文字と小文字を区別する)|
|setDefaultRoundingMode|[RoundingMode(enum)](#roundingmode)|NUMERIC、BIGNUMERICのデフォルトの丸めモード仕様|
|setMaxStaleness|String|テーブルがクエリされたときに返される可能性のあるデータの最大の古さ|
|setTableConstraints|[TableConstraints](#tableconstraints)|テーブルの主キーと外部キーの情報|
|setResourceTags|Map\<String,String\>|テーブルに付けられたタグ|

#### TableReference
|メソッド|引数|説明|
|---|---|---|
|setProjectId|String|プロジェクトID|
|setDatasetId|String|データセットID|
|setTableId|String|【生成時 必須】テーブルID|

#### TableSchema
|メソッド|引数|説明|
|---|---|---|
|setFields|List\<[TableFieldSchema](#tablefieldschema)\>|テーブル内のフィールド説明|

#### TableFieldSchema
|メソッド|引数|説明|
|---|---|---|
|setName|String|【必須】フィールド名|
|setType|String|【必須】[フィールドのデータ型](#フィールドのデータ型)|
|setMode|String|フィールドモード<br>"NULLABLE"、"REQUIRED"、"REPEATED"|
|setFields|List\<[TableFieldSchema](#tablefieldschema)\>|ネストされたスキーマフィールドリスト|
|setDescription|String|フィールドの説明<br>MAX:1,024文字|
|setPolicyTags|[TableFieldSchema.PolicyTags](#tablefieldschemapolicytags)|このフィールドに付加されるポリシー|
|setMaxLength|Long|STRINGSまたはBYTESのフィールドの値の最大長|
|setPrecision|Long|NUMERICまたはBIGNUMERICのフィールドの値に対する精度および位取り|
|setScale|Long|精度|
|setRoundingMode|[RoundingMode(enum)](#roundingmode)|NUMERICおよびBIGNUMERI型の値を格納するときに使用する丸めモード指定|
|setCollation|String|フィールドの照合順序<br>"und:ci"(ロケールは不明、大文字と小文字は区別されない)、""(デフォルトでは大文字と小文字を区別する|
|setDefaultValueExpression|String|このフィールドのデフォルト値を指定するSQL式|
|setRangeElementType|[FieldElementType](#fieldelementtype)|【type="RANG"の場合は必須】<br>範囲のサブタイプ|

#### FieldElementType
|メソッド|引数|説明|
|---|---|---|
|setType|String|【必須】フィールド要素のタイプ|

#### TimePartitioning
|メソッド|引数|説明|
|---|---|---|
|setType|String|【必須】タイプ<br>"DAY"、"HOUR"、"MONTH"、"YEAR"|
|setExpirationMs|Long|パーティションのストレージを保持する時間(ミリ秒)|
|setField|String|パーティション化するフィールド|

#### RangePartitioning
|メソッド|引数|説明|
|---|---|---|
|setField|String|【必須】分割するフィールド|
|setRange|[RangePartitioning.Range](#rangepartitioningrange)|範囲分割の範囲情報|

#### Clustering
|メソッド|引数|説明|
|---|---|---|
|setFields|List\<String\>|クラスタリングするフィールド|

#### ViewDefinition
|メソッド|引数|説明|
|---|---|---|
|setQuery|String|【必須】BigQueryが実行するクエリ|
|setUserDefinedFunctionResources|List\<[UserDefinedFunctionResource](#userdefinedfunctionresource)\>|クエリで使用されるユーザー定義関数リソース情報|
|setUseLegacySql|Boolean|ビューにBigQueryのレガシーSQLを使用するか|
|setPrivacyPolicy|[PrivacyPolicy](#privacypolicy)|ビューのプライバシーポリシー|

#### UserDefinedFunctionResource
|メソッド|引数|説明|
|---|---|---|
|setResourceUri|String|リソースのURI|
|setInlineCode|String|ユーザー定義関数(UDF)のコードを含むインラインリソース|

#### PrivacyPolicy
|メソッド|引数|説明|
|---|---|---|
|setAggregationThresholdPolicy|[AggregationThresholdPolicy](#aggregationthresholdpolicy)|集計しきい値に使用されるポリシー|

#### AggregationThresholdPolicy
|メソッド|引数|説明|
|---|---|---|
|setPrivacyUnitColumns|List\<String\>|ポリシーに関連付けられたプライバシーユニット列|
|setThreshold|Long|「集約しきい値」ポリシーのしきい値|

#### MaterializedViewDefinition
|メソッド|引数|説明|
|---|---|---|
|setQuery|String|【必須】永続化されるクエリ|
|setEnableRefresh|Boolean|ベーステーブルが更新されたときにマテリアライズドビューの自動リフレッシュを有効にするか|
|setRefreshIntervalMs|Long|マテリアライズドビューが更新される最大頻度|
|setAllowNonIncrementalDefinition|Boolean|段階的に更新されないマテリアライズドビューを構築するか|

#### ExternalDataConfiguration
|メソッド|引数|説明|
|---|---|---|
|setSourceUris|List\<String\>|【必須】GoogleCloud内のデータを指す完全修飾URI|
|setFileSetSpecType|[FileSetSpecType(enum)](#filesetspectype)|ロードするファイルセットを構築するためにソースURIを解釈する情報|
|setSchema|[TableSchema](#tableschema)|データのスキーマ|
|setSourceFormat|String|データ形式|
|setMaxBadRecords|Integer|データの読み取り時にBigQueryが無視できる不良レコードの最大数|
|setAutodetect|Boolean|スキーマとフォーマットのオプションを自動的に検出するか|
|setIgnoreUnknownValues|Boolean|BigQuery がテーブル スキーマで表されていない追加の値を許可するか|
|setCompression|String|データソースの圧縮タイプ|
|setCsvOptions|[CsvOptions](#csvoptions)|sourceFormatがCSVに設定されている場合に設定する追加のプロパティ|
|setJsonOptions|[JsonOptions](#jsonoptions)|sourceFormatがJSONに設定されている場合に設定する追加のプロパティ|
|setBigtableOptions|[BigtableOptions](#bigtableoptions)|sourceFormatがBIGTABLEに設定されている場合の追加オプション|
|setGoogleSheetsOptions|[GoogleSheetsOptions](#googlesheetsoptions)|sourceFormatがGOOGLE_SHEETSに設定されている場合の追加オプション|
|setHivePartitioningOptions|[HivePartitioningOptions](#hivepartitioningoptions)|ハイブのパーティショニングのサポート構成|
|setConnectionId|String|Azure Blob、Cloud Storage、S3 などの外部ストレージの読み取りに使用される資格情報|
|setDecimalTargetTypes|List\<[DecimalTargetType(enum)](#decimaltargettype)\>|SQLデータ型のリスト|
|setAvroOptions|[AvroOptions](#avrooptions)|sourceFormatがAVROに設定されている場合に設定する追加のプロパティ|
|setJsonExtension|[JsonExtension(enum)](#jsonextension)|JSONのバリアントがロードされているかを示す|
|setParquetOptions|[ParquetOptions](#parquetoptions)|sourceFormatがPARQUETに設定されている場合に設定する追加のプロパティ|
|setReferenceFileSchemaUri|String|テーブルスキーマを含む参照ファイル|
|setMetadataCacheMode|[MetadataCacheMode(enum)](#metadatacachemode)|テーブルのメタデータキャッシュモード|
|setObjectMetadata|[ObjectMetadata(enum)](#objectmetadata)|メタデータの種類|

#### CsvOptions
|メソッド|引数|説明|
|---|---|---|
|setFieldDelimiter|String|CSVファイル内のフィールドの区切り文字|
|setSkipLeadingRows|Long|スキップするCSVファイルの先頭の行数|
|setQuote|String|CSVファイル内のデータセクションを引用するために使用される値|
|setAllowQuotedNewlines|Boolean|CSVファイル内で改行文字を含む引用符で囲まれたデータセクションを許可するか|
|setAllowJaggedRows|Boolean|末尾のオプション列が欠落している行を受け入れるか|
|setEncoding|String|データの文字エンコーディング<br>"UTF-8"、"ISO-8859-1"、"UTF-16BE"、"UTF-16LE"、"UTF-32BE"、"UTF-32LE"|
|setPreserveAsciiControlCharacters|Boolean|埋め込みASCII制御文字が保持されるか|
|setNullMarker|String|CSVファイル内のnull値を表す文字列|

#### JsonOptions
|メソッド|引数|説明|
|---|---|---|
|setEncoding|String|データの文字エンコーディング<br>"UTF-8"、"UTF-16BE"、"UTF-16LE"、"UTF-32BE"、"UTF-32LE"|

#### BigtableOptions
|メソッド|引数|説明|
|---|---|---|
|setColumnFamilies|List\<[BigtableColumnFamily](#bigtablecolumnfamily)\>|列ファミリーのリスト|
|setIgnoreUnspecifiedColumnFamilies|Boolean|列ファミリーはテーブルスキーマで公開しないか|
|setReadRowkeyAsString|Boolean|行キー列ファミリーを文字列に変換するか|
|setOutputColumnFamiliesAsJson|Boolean|各列ファミリーは単一のJSON列として読み取るか|

#### BigtableColumnFamily
|メソッド|引数|説明|
|---|---|---|
|setFamilyId|String|列ファミリーの識別子|
|setType|String|セルの値を変換する型<br>"BYTES"、"STRING"、"INTEGER"、"FLOAT"、"BOOLEAN"、"JSON"|
|setEncoding|String|エンコードの種類<br>"TEXT"(テキスト文字列)、"BINARY"(バイナリ)|
|setColumns|List\<[BigtableColumn](#bigtablecolumn)\>|列フィールド|
|setOnlyReadLatest|Boolean|この列の値の最新バージョンのみを公開するか|

#### BigtableColumn
|メソッド|引数|説明|
|---|---|---|
|setQualifierEncoded|String|【必須】列の修飾子|
|setQualifierString|String|修飾子の文字列|
|setFieldName|String|列フィールド名|
|setType|String|セルの値を変換する型<br>"BYTES"、"STRING"、"INTEGER"、"FLOAT"、"BOOLEAN"、"JSON"|
|setEncoding|String|エンコードの種類<br>"TEXT"(テキスト文字列)、"BINARY"(バイナリ)|
|setOnlyReadLatest|Boolean|この列の値の最新バージョンのみを公開するか|

#### GoogleSheetsOptions
|メソッド|引数|説明|
|---|---|---|
|setSkipLeadingRows|Long|読み取り時にスキップするシート上部の行数|
|setRange|String|クエリの対象となるシートの範囲|

#### HivePartitioningOptions
|メソッド|引数|説明|
|---|---|---|
|setMode|String|データの読み取り時に使用する[ハイブパーティショニングのモード](#ハイブパーティショニングのモード)|
|setSourceUriPrefix|String|ソースURIのプレフィックス(接頭語)|
|setRequirePartitionFilter|Boolean|パーティションの削除に使用できるパーティションフィルターを指定するか|

#### AvroOptions
|メソッド|引数|説明|
|---|---|---|
|setUseAvroLogicalTypes|Boolean|論理型を対応するBigQueryデータ型として解釈するか|

#### ParquetOptions
|メソッド|引数|説明|
|---|---|---|
|setEnumAsString|Boolean|デフォルトでParquetENUM論理型をBYTESではなくSTRINGとして推論するか|
|setEnableListInference|Boolean|ParquetLIST論理型に対してスキーマ推論を使用するか|

#### TableConstraints
|メソッド|引数|説明|
|---|---|---|
|setPrimaryKey|[PrimaryKey](#primarykey)|テーブルの列に対する主キー制約情報|
|setForeignKeys|List\<[ForeignKey](#foreignkey)\>|外部キー情報|

#### PrimaryKey
|メソッド|引数|説明|
|---|---|---|
|setColumns|List\<String\>|【必須】主キー制約で構成される列|

#### ForeignKey
|メソッド|引数|説明|
|---|---|---|
|setName|String|外部キー制約の名前|
|setReferencedTable|[TableReference](#tablereference)|【必須】主キーを保持し、この外部キーによって参照されるテーブル|
|setColumnReferences|List\<[ColumnReference](#columnreference)\>|【必須】外部キーを構成する列|

#### ColumnReference
|メソッド|引数|説明|
|---|---|---|
|setReferencingColumn|String|【必須】外部キーを構成する列|
|setReferencedColumn|String|【必須】ReferencingColumnによって参照される主キー内の列|

#### TableFieldSchema.PolicyTags
|メソッド|引数|説明|
|---|---|---|
|setNames|List\<String\>|ポリシータグリソース名のリスト|

#### RangePartitioning.Range
|メソッド|引数|説明|
|---|---|---|
|setStart|String|【必須】範囲分割の開始|
|setEnd|String|【必須】範囲分割の終了|
|setInterval|String|【必須】各間隔の幅|

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

#### JsonExtension
|定義値|内容|
|---|---|
|JSON_EXTENSION_UNSPECIFIED|ソース形式は何も変更せずに解析|
|GEOJSON|JSONのGeoJSONバリアントを使用|

#### DecimalTargetType
|定義値|内容|
|---|---|
|DECIMAL_TARGET_TYPE_UNSPECIFIED|無効なタイプ|
|NUMERIC|10進数値はNUMERIC型に変換|
|BIGNUMERIC|10進数値はBIGNUMERIC型に変換|
|STRING|10進数値はSTRING型に変換|

#### ObjectMetadata
|定義値|内容|
|---|---|
|OBJECT_METADATA_UNSPECIFIED|未定義|
|SIMPLE|オブジェクトのディレクトリリスト|

#### MetadataCacheMode
|定義値|内容|
|---|---|
|METADATA_CACHE_MODE_UNSPECIFIED|未定義|
|AUTOMATIC|外部ソースからのメタデータキャッシュの自動バックグラウンド更新をトリガー|
|MANUAL|外部ソースからのメタデータキャッシュの手動更新をトリガー|

#### FileSetSpecType
|定義値|内容|
|---|---|
|FILE_SET_SPEC_TYPE_FILE_SYSTEM_MATCH|オブジェクトストアからファイルをリストすることによってソースURIを展開|
|FILE_SET_SPEC_TYPE_NEW_LINE_DELIMITED_MANIFEST|提供されるURIが改行で区切られたマニフェストファイルであり、1行に1つのURIを展開|

#### ハイブパーティショニングのモード
|定義値|内容|
|---|---|
|AUTO|パーティションキーの名前とタイプを自動的に推測|
|STRINGS|パーティションキー名を自動的に推測|
|CUSTOM|パーティションキースキーマはソースURIプレフィックスでエンコード|

#### フィールドのデータ型
|定義値|内容|
|---|---|
|STRING|文字列|
|BYTES|バイト|
|INTEGER (or INT64)|整数(8byte)|
|FLOAT (or FLOAT64)|浮動小数点数(8byte)|
|BOOLEAN (or BOOL)|真偽値|
|TIMESTAMP|タイムスタンプ|
|DATE|日付|
|TIME|時間|
|DATETIME|日付時刻|
|GEOGRAPHY|地理空間データ|
|NUMERIC|整数(16byte)|
|BIGNUMERIC|整数(32byte)|
|JSON|JSON型|
|RECORD (or STRUCT)|構造体型|
|RANGE (Preview)|RANGE型|

#### EncryptionConfiguration
|メソッド|引数|説明|
|---|---|---|
|setKmsKeyName|String|CloudKMS暗号化キーの説明|

#### StandardSqlField
|メソッド|引数|説明|
|---|---|---|
|setName|String|名前|
|setType|[StandardSqlDataType](#standardsqldatatype)|パラメータのタイプ|

#### StandardSqlDataType
|メソッド|引数|説明|
|---|---|---|
|setTypeKind|[TypeKind(enum)](#typekind)|トップレベルのタイプ|
|setArrayElementType|[StandardSqlDataType](#standardsqldatatype)|【getTypeKind()が"ARRAY"の場合】<br>配列の要素の型|
|setStructType|[StandardSqlStructType](#standardsqlstructtype)|【getTypeKind()が"STRUCT"の場合】<br>構造体のフィールド|

#### StandardSqlStructType
|メソッド|引数|説明|
|---|---|---|
|setFields|List\<[StandardSqlField](#standardsqlfield)\>|構造体のフィールド|

#### TypeKind
|定義値|内容|
|---|---|
|TYPE_KIND_UNSPECIFIED|無効なタイプ|
|STRING|文字列|
|BYTES|バイト(base64文字列としてエンコード)|
|INT64|8byte整数(10進数の文字列としてエンコード)|
|NUMERIC|16byte整数(10進数の文字列としてエンコード)|
|BIGNUMERIC|32byte整数(10進数の文字列としてエンコード)|
|BOOL|真偽値|
|FLOAT64|浮動小数点数(数値または文字列「NaN」、「Infinity」、「-Infinity」としてエンコード|
|TIMESTAMP|タイムスタンプ|
|DATE|日付|
|TIME|時間|
|DATETIME|日付時刻|
|GEOGRAPHY|地理空間データ(WKTとしてエンコード)|
|ARRAY|配列型(Type.array_typeと一致するタイプのリストとしてエンコード)|
|STRUCT|構造体型(Type.struct_type[i]型のフィールドを持つリストとしてエンコード)|
|JSON|JSON文字列(tabledata.listが使用)|

### 1.3. レスポンスの内容
#### Table
[⧉[BigQuery API(V2)] JavaでBigQueryテーブルの情報を取得する(Table)](https://qiita.com/doran/items/57468203da657921fa2d#table)
を参照ください。

## 2. テーブルを上書き
指定したテーブルを上書きします。

[3. テーブルを更新](#3-テーブルを更新)と違うところは、
指定した存在するテーブルをテーブルに置き換えます。
置き換えなので値を設定していないメタデータも更新されます。

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

### 2.2. 実行

```java
public static void main(String[] args) throws Exception{
    Bigquery bigquery = getBigquery();
    Bigquery.Tables tables = bigquery.tables();
    
    Table content = new Table();
    //上書き内容を設定
    
    Bigquery.Tables.Update update = tables.update("プロジェクトID","データセットID","テーブルID",content);
    
    Table res = update.execute();
    System.out.println(res);
}
```
#### 2.2.1. HTTPリクエスト
PUT:　https:\//bigquery.googleapis.com/bigquery/v2/projects/{プロジェクトID}/datasets/{データセットID}/tables/{テーブルID}
が実行されます。

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

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

[1.2.3. リクエストボディ](#123-リクエストボディ)と同じです。

### 2.3. レスポンスの内容
#### Table
[⧉[BigQuery API(V2)] JavaでBigQueryテーブルの情報を取得する(Table)](https://qiita.com/doran/items/57468203da657921fa2d#table)
を参照ください。

## 3. テーブルを更新
指定したテーブルを更新します。

[2. テーブルを上書き](#2-テーブルを上書き)と違うところは、
指定した存在するテーブルのメタデータを設定した内容に更新します。
上書きとは異なり設定したメタデータのみ更新されます。

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

### 3.2. 実行

```java
public static void main(String[] args) throws Exception{
    Bigquery bigquery = getBigquery();
    Bigquery.Tables tables = bigquery.tables();
    
    Table content = new Table();
    //更新内容を設定
    
    Bigquery.Tables.Patch patch = tables.patch("プロジェクトID","データセットID","テーブルID",content);
    
    Table res = patch.execute();
    System.out.println(res);
}
```
#### 3.2.1. HTTPリクエスト
PATCH:　https:\//bigquery.googleapis.com/bigquery/v2/projects/{プロジェクトID}/datasets/{データセットID}/tables/{テーブルID}
が実行されます。

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

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

[1.2.3. リクエストボディ](#123-リクエストボディ)と同じです。

### 3.3. レスポンスの内容
#### Table
[⧉[BigQuery API(V2)] JavaでBigQueryテーブルの情報を取得する(Table)](https://qiita.com/doran/items/57468203da657921fa2d#table)
を参照ください。

## 4. テーブルを削除
指定したテーブルを削除します。

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

### 4.2. 実行

```java
public static void main(String[] args) throws Exception{
    Bigquery bigquery = getBigquery();
    Bigquery.Tables tables = bigquery.tables();
    
    Bigquery.Tables.Delete delete = tables.delete("プロジェクトID","データセットID","テーブルID");
    
    delete.execute();
}
```
#### 4.2.1. HTTPリクエスト
DELETE:　https:\//bigquery.googleapis.com/bigquery/v2/projects/{プロジェクトID}/datasets/{データセットID}/tables/{テーブルID}
が実行されます。

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

#### 4.2.3. リクエストボディ
リクエストボディはありません。

### 4.3. レスポンスの内容
レスポンスはありません。
削除に失敗した場合は例外が発生します。

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