LoginSignup
0
1

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

Posted at

BigQuery API V2(Java)を使用して、
BigQueryデータセットの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. 実行

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

TableReference

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

TableSchema

メソッド 引数 説明
setFields List<TableFieldSchema> テーブル内のフィールド説明

TableFieldSchema

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

FieldElementType

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

TimePartitioning

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

RangePartitioning

メソッド 引数 説明
setField String 【必須】分割するフィールド
setRange RangePartitioning.Range 範囲分割の範囲情報

Clustering

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

ViewDefinition

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

UserDefinedFunctionResource

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

PrivacyPolicy

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

CsvOptions

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

JsonOptions

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

BigtableOptions

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

BigtableColumnFamily

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

BigtableColumn

メソッド 引数 説明
setQualifierEncoded String 【必須】列の修飾子
setQualifierString String 修飾子の文字列
setFieldName String 列フィールド名
setType String セルの値を変換する型
"BYTES"、"STRING"、"INTEGER"、"FLOAT"、"BOOLEAN"、"JSON"
setEncoding String エンコードの種類
"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 テーブルの列に対する主キー制約情報
setForeignKeys List<ForeignKey> 外部キー情報

PrimaryKey

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

ForeignKey

メソッド 引数 説明
setName String 外部キー制約の名前
setReferencedTable TableReference 【必須】主キーを保持し、この外部キーによって参照されるテーブル
setColumnReferences List<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

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

StandardSqlStructType

メソッド 引数 説明
setFields List<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)
を参照ください。

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.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. リクエストボディと同じです。

2.3. レスポンスの内容

Table

⧉[BigQuery API(V2)] JavaでBigQueryテーブルの情報を取得する(Table)
を参照ください。

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.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. リクエストボディと同じです。

3.3. レスポンスの内容

Table

⧉[BigQuery API(V2)] JavaでBigQueryテーブルの情報を取得する(Table)
を参照ください。

4. テーブルを削除

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

4.1. スコープ

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

BigqueryScopes.BIGQUERY
BigqueryScopes.CLOUD_PLATFORM

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

4.2. 実行

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. レスポンスの内容

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



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