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. レスポンスの内容
レスポンスはありません。
削除に失敗した場合は例外が発生します。
おしまい。。