0
0

[BigQuery API(V2)] Javaでデータセットを生成・更新・削除する

Posted at

BigQuery API V2(Java)を使用して、
BigQueryのデータセットを生成・更新・削除する方法
についてご紹介します。

データセットの生成・更新・削除する場合、
生成ならプロジェクト、更新・削除ならデータセットに対し
IAM権限が付与されている必要があります。

権限付与に関しては
⧉[BigQuery API(V2)] JavaでBigQueryを使う(2.権限付与)
を参照ください。

APIを利用する環境の準備から始める場合や、コードを実行する際は、
⧉[BigQuery API(V2)] JavaでBigQueryを使う
を参照ください。

No 目次
1 データセットを生成
1 スコープ
2 実行
3 レスポンスの内容
2 データセットを上書き
1 スコープ
2 実行
3 レスポンスの内容
3 データセットを更新
1 スコープ
2 実行
3 レスポンスの内容
4 データセットを削除
1 スコープ
2 実行
3 レスポンスの内容

1. データセットを生成

指定したプロジェクトにデータセットを生成します。

1.1. スコープ

このAPIを実行するには、以下のいずれかのスコープを指定してください。

BigqueryScopes.BIGQUERY
BigqueryScopes.CLOUD_PLATFORM

⧉[BigQuery API(V2)] JavaでBigQueryを使う(3.2. BigQueryインスタンスを取得)
でスコープを指定してください。

1.2. 実行

作成するデータセットIDの設定は必須です。

public static void main(String[] args) throws Exception{
    Bigquery bigquery = getBigquery();
    Bigquery.Datasets datasets = bigquery.datasets();
    
    Dataset content = new Dataset();
    content.setDatasetReference(new DatasetReference().setDatasetId("データセットID"));
    Bigquery.Datasets.Insert insert = datasets.insert("プロジェクトID",content);
    
    Dataset res = insert.execute();
    System.out.println(res);
}

1.2.1. HTTPリクエスト

POST: https://bigquery.googleapis.com/bigquery/v2/projects/{プロジェクトID}/datasets
が実行されます。

1.2.2. クエリパラメータ

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

1.2.2. リクエストボディ

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

メソッド 引数 説明
setDatasetReference DatasetReference 【生成時のみ必須】データセット参照
setLocation String データセットのロケーション
setLabels Map<String,String> このデータセットに関連付けられたラベル
setFriendlyName String データセットの代替名
setDescription String データセットのわかりやすい説明
setDefaultTableExpirationMs Long データセット内のすべてのテーブルのデフォルトの存続期間(ミリ秒)
setDefaultPartitionExpirationMs Long デフォルトのパーティションの有効期限(ミリ秒)
setAccess List<Dataset.Access> エンティティのデータセット
setDefaultEncryptionConfiguration EncryptionConfiguration データセット内のすべてのテーブルのデフォルトの暗号化キー
setLinkedDatasetSource LinkedDatasetSource 【getType()がLINKEDの場合】
データセット参照
setExternalDatasetReference ExternalDatasetReference 【getType()がEXTERNALの場合】
データセット参照
setIsCaseInsensitive Boolean データセットとそのテーブル名が大文字と小文字を区別しないか
setDefaultCollation String データセット内に今後作成されるテーブルのデフォルトの照合仕様
"und:ci"(ロケールは不明、文字の大小区別なし)、""(空の文字列。文字の大小区別あり)
setDefaultRoundingMode RoundingMode(enum) このデータセット内で作成される新しいテーブルのデフォルトの丸めモード仕様
setMaxTimeTravelHours Long タイムトラベルウィンドウの定義(時間)
setStorageBillingModel StorageBillingModel(enum) 課金モデル

DatasetReference(Set)

メソッド 引数 説明
setDatasetId String データセットID
setProjectId String プロジェクトID

Dataset.Access(Set)

メソッド 引数 説明
setRole String IAMロールID
setUserByEmail String アクセス許可するメールアドレス(サービスアカウントメールアドレス or OAuth2.0認証を行うメールアドレス)
setGroupByEmail String アクセス許可するグループのメールアドレス
setDomain String アクセス許可するドメイン
setSpecialGroup String アクセス許可する特別なグループ
setIamMember String IAMポリシーに表示されるユーザー、グループ、ドメイン、または特別なグループではない他のタイプのメンバー
setView TableReference アクセスを許可する別のデータセットからのビュー
setRoutine RoutineReference アクセスを許可する別のデータセットのルーティン
setDataset DatasetAccessEntry データセットへの読み取りアクセス許可

TableReference(Set)

メソッド 引数 説明
setProjectId String プロジェクトID
setDatasetId String データセットID
setTableId String テーブルID

RoutineReference(Set)

メソッド 引数 説明
setProjectId String プロジェクトID
setDatasetId String データセットID
setRoutineId String ルーティンID

DatasetAccessEntry(Set)

メソッド 引数 説明
setDataset DatasetReference このエントリが適用されるデータセット
setTargetTypes List<TargetType(enum)> このエントリが適用されるデータセット内のリソース

EncryptionConfiguration(Set)

メソッド 引数 説明
setKmsKeyName String CloudKMS暗号化キー

LinkedDatasetSource(Set)

メソッド 引数 説明
setSourceDataset DatasetReference ソースデータセット参照

ExternalDatasetReference(Set)

メソッド 引数 説明
setExternalSource String このデータセットを裏付ける外部ソース
setConnection String externalSourceへのアクセスに使用される接続ID

1.3. レスポンスの内容

Dataset

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

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 アクセスを許可する別のデータセットからのビュー
getRoutine RoutineReference アクセスを許可する別のデータセットのルーティン
getDataset DatasetAccessEntry データセットへの読み取りアクセス許可

TableReference

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

RoutineReference

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

DatasetAccessEntry

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

Dataset.Tags

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

EncryptionConfiguration

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

LinkedDatasetSource

メソッド 戻り値 説明
getSourceDataset 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 外部メタデータカタログに定義されているデータセット

2. データセットを上書き

指定したデータセットを上書きします。

3. データセットを更新と違うところは、
指定した存在するデータセットを新しいデータセットに置き換えます。
置き換えなので値を設定していないメタデータも更新されます。

2.1. スコープ

このAPIを実行するには、以下のいずれかのスコープを指定してください。

BigqueryScopes.BIGQUERY
BigqueryScopes.CLOUD_PLATFORM

⧉[BigQuery API(V2)] JavaでBigQueryを使う(3.2. BigQueryインスタンスを取得)
でスコープを指定してください。

2.2. 実行

public static void main(String[] args) throws Exception{
    Bigquery bigquery = getBigquery();
    Bigquery.Datasets datasets = bigquery.datasets();
    
    Dataset content = new Dataset();
    //上書き内容を設定
    
    Bigquery.Datasets.Update update = datasets.update("プロジェクトID","データセットID",content);
    
    Dataset res = update.execute();
    System.out.println(res);
}

2.2.1. HTTPリクエスト

PUT: https://bigquery.googleapis.com/bigquery/v2/projects/{プロジェクトID}/datasets/{データセットID}
が実行されます。

2.2.2. クエリパラメータ

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

2.2.2. リクエストボディ

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

1.2.2. リクエストボディと同じです。

2.3. レスポンスの内容

Dataset

1.3. レスポンスの内容(Dataset)と同じです。

3. データセットを更新

指定したデータセットを更新します。

2. データセットを上書きと違うところは、
指定した存在するデータセットのメタデータを設定した内容に更新します。
上書きとは異なり設定したメタデータのみ更新されます。

3.1. スコープ

このAPIを実行するには、以下のいずれかのスコープを指定してください。

BigqueryScopes.BIGQUERY
BigqueryScopes.CLOUD_PLATFORM

⧉[BigQuery API(V2)] JavaでBigQueryを使う(3.2. BigQueryインスタンスを取得)
でスコープを指定してください。

3.2. 実行

public static void main(String[] args) throws Exception{
    Bigquery bigquery = getBigquery();
    Bigquery.Datasets datasets = bigquery.datasets();
    
    Dataset content = new Dataset();
    //更新内容を設定
    
    Bigquery.Datasets.Patch patch = datasets.patch("プロジェクトID","データセットID",content);
    
    Dataset res = patch.execute();
    System.out.println(res);
}

3.2.1. HTTPリクエスト

PATCH: https://bigquery.googleapis.com/bigquery/v2/projects/{プロジェクトID}/datasets/{データセットID}
が実行されます。

3.2.2. クエリパラメータ

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

3.2.2. リクエストボディ

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

1.2.2. リクエストボディと同じです。

3.3. レスポンスの内容

Dataset

1.3. レスポンスの内容(Dataset)と同じです。

4. データセットを削除

指定したデータセットを削除します。

4.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インスタンスを取得)
でスコープを指定してください。

4.2. 実行

public static void main(String[] args) throws Exception{
    Bigquery bigquery = getBigquery();
    Bigquery.Datasets datasets = bigquery.datasets();
    
    Bigquery.Datasets.Delete delete = datasets.delete("プロジェクトID","データセットID");
    delete.setDeleteContents(true);
    
    delete.execute();
}

4.2.1. HTTPリクエスト

DELETE: https://bigquery.googleapis.com/bigquery/v2/projects/{プロジェクトID}/datasets/{データセットID}
が実行されます。

4.2.2. クエリパラメータ

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

メソッド 引数 説明
setDeleteContents Boolean データセット内のテーブルも削除するか

falseの場合、データセット内にテーブルが存在すると例外が出力されます

4.2.3. リクエストボディ

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

4.3. レスポンスの内容

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



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