BigQuery API V2(Java)を使用して、
BigQueryのジョブを生成・削除する方法
についてご紹介します。
ジョブとは
データの読み込み、データのエクスポート、データのクエリ、データのコピーなど、
BigQueryがユーザーに代わって実行するアクションを指します。
ジョブ生成・削除には適切なIAM権限が付与されている必要があります。
権限付与に関しては
⧉[BigQuery API(V2)] JavaでBigQueryを使う(2.権限付与)
を参照ください。
1. ジョブを生成
指定したプロジェクトにジョブを生成します。
1.1. スコープ
このAPIを実行するには、以下のいずれかのスコープを指定してください。
BigqueryScopes.BIGQUERY
BigqueryScopes.CLOUD_PLATFORM
BigqueryScopes.DEVSTORAGE_FULL_CONTROL
BigqueryScopes.DEVSTORAGE_READ_ONLY
BigqueryScopes.DEVSTORAGE_READ_WRITE
⧉[BigQuery API(V2)] JavaでBigQueryを使う(3.2. BigQueryインスタンスを取得)
でスコープを指定してください。
1.2. 実行
public static void main(String[] args) throws Exception{
Bigquery bigquery = getBigquery();
Bigquery.Jobs jobs = bigquery.jobs();
JobConfigurationQuery query = new JobConfigurationQuery();
query.setQuery("SELECT * FROM `プロジェクトID.データセットID.テーブルID` LIMIT 10");
query.setUseLegacySql(false);
JobConfiguration configuration = new JobConfiguration();
configuration.setQuery(query);
Job content = new Job();
content.setConfiguration(configuration);
Bigquery.Jobs.Insert insert = jobs.insert("プロジェクトID",content);
Job res = insert.execute();
System.out.println(res);
}
1.2.1. HTTPリクエスト
POST: https://bigquery.googleapis.com/upload/bigquery/v2/projects/{プロジェクトID}/jobs
が実行されます。
1.2.2. クエリパラメータ
Jobのsetメソッドにより、クエリパラメータを追加できます。
JobConfiguration
JobConfigurationQuery
| メソッド |
引数 |
説明 |
| setQuery |
String |
【必須】実行するSQLクエリテキスト |
| setDestinationTable |
TableReference |
クエリ結果を保存するテーブルのプロパティ |
| setTableDefinitions |
Map<String,ExternalDataConfiguration> |
クエリ可能な一時テーブルとして動作する外部テーブル定義 |
| setUserDefinedFunctionResources |
List<UserDefinedFunctionResource> |
クエリで使用されるユーザー定義関数リソースについての説明 |
| setCreateDisposition |
String |
ジョブが新しいテーブルを作成できるか |
| setWriteDisposition |
String |
宛先テーブルがすでに存在する場合に実行されるアクション |
| setDefaultDataset |
DatasetReference |
クエリ内の非修飾テーブル名に使用するデフォルトのデータセット |
| setPriority |
String |
クエリの優先度 "INTERACTIVE"、"BATCH" |
| setAllowLargeResults |
Boolean |
パフォーマンスをわずかに犠牲にして、任意の大きな結果テーブルを生成できるか |
| setUseQueryCache |
Boolean |
クエリキャッシュで結果を検索するか |
| setFlattenResults |
Boolean |
クエリ結果内のすべてのネストされた繰り返しフィールドをフラット化するか |
| setMaximumBytesBilled |
Long |
ジョブに対して請求される最大バイト数 |
| setUseLegacySql |
Boolean |
BigQueryのレガシーSQL言語を使用するか |
| setParameterMode |
String |
パラメータモード(GoogleSQLのみ) |
| setQueryParameters |
List<QueryParameter> |
jobs.queryパラメータ(GoogleSQLのみ) |
| setSchemaUpdateOptions |
List<String> |
スキーマ更新オプション |
| setRangePartitioning |
RangePartitioning |
宛先テーブルの範囲パーティション化の仕様 |
| setClustering |
Clustering |
宛先テーブルのクラスタリング仕様 |
| setDestinationEncryptionConfiguration |
EncryptionConfiguration |
カスタム暗号化構成 |
| setScriptOptions |
ScriptOptions |
スクリプトの実行を制御 |
| setConnectionProperties |
List<ConnectionProperty> |
クエリの動作を変更できる接続プロパティ |
| setCreateSession |
Boolean |
ジョブはランダムに生成されたsessionIdを使用して新しいセッションを作成するか |
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) |
メタデータの種類 |
JobConfigurationLoad
| メソッド |
引数 |
説明 |
| setSourceUris |
List<String> |
GoogleCloud内のデータを指す完全修飾URI |
| setFileSetSpecType |
FileSetSpecType(enum) |
ソースURIを解釈する方法 |
| setSchema |
⧉ TableSchema |
宛先テーブルのスキーマ |
| setDestinationTable |
TableReference |
データをロードする宛先テーブル |
| setDestinationTableProperties |
DestinationTableProperties |
新しい場合に宛先テーブルを作成するためのプロパティ |
| setCreateDisposition |
String |
ジョブが新しいテーブルを作成できるか |
| setWriteDisposition |
String |
宛先テーブルがすでに存在する場合に実行されるアクション |
| setNullMarker |
String |
CSVファイル内のnull値を表す文字列 |
| setFieldDelimiter |
String |
CSVファイル内のフィールドの区切り文字 |
| setSkipLeadingRows |
Integer |
データの読み込み時にスキップするCSVファイルの先頭の行数 |
| setEncoding |
String |
データの文字エンコーディング |
| setQuote |
String |
CSVファイル内のデータセクションを引用するために使用される値 |
| setMaxBadRecords |
Integer |
ジョブの実行時に無視できる不良レコードの最大数 |
| setAllowQuotedNewlines |
Boolean |
CSVファイル内で改行文字を含む引用符で囲まれたデータセクションを許可するか |
| setSourceFormat |
String |
データファイルの形式 "CSV"(CSVファイル)、"DATASTORE_BACKUP"(指定データストアのバックアップ)、"NEWLINE_DELIMITED_JSON"(指定改行区切りのJSON)、"AVRO"(AVRO)、"PARQUET"(PARQUET)、"ORC"(ORC) |
| setAllowJaggedRows |
Boolean |
末尾のオプション列が欠落している行を受け入れるか |
| setIgnoreUnknownValues |
Boolean |
テーブルスキーマで表されていない追加の値を許可するか |
| setProjectionFields |
List<String> |
読み込むドキュメントフィールド |
| setAutodetect |
Boolean |
CSVおよびJSONソースのオプションとスキーマを自動的に推論するか |
| setSchemaUpdateOptions |
List<String> |
スキーマ更新オプション |
| setTimePartitioning |
TimePartitioning |
宛先テーブルの時間ベースのパーティショニング仕様 |
| setRangePartitioning |
RangePartitioning |
宛先テーブルの範囲パーティション化の仕様 |
| setClustering |
Clustering |
宛先テーブルのクラスタリング仕様 |
| setDestinationEncryptionConfiguration |
EncryptionConfiguration |
カスタム暗号化構成 |
| setUseAvroLogicalTypes |
Boolean |
論理型を対応するBigQueryデータ型(TIMESTAMPなど)として解釈するか(sourceFormatが"AVRO"の場合のみ) |
| setReferenceFileSchemaUri |
String |
ユーザーは、リーダースキーマを含む参照ファイルURI |
| setHivePartitioningOptions |
HivePartitioningOptions |
ハイブのパーティショニング構成 |
| setDecimalTargetTypes |
List<DecimalTargetType(enum)> |
ソース10進値の変換先となる可能なSQLデータ型 |
| setJsonExtension |
JsonExtension(enum) |
JSONのバリアントがロードされていることを示す情報 |
| setParquetOptions |
ParquetOptions |
追加のプロパティ(sourceFormatが"PARQUET"の場合のみ) |
| setPreserveAsciiControlCharacters |
Boolean |
埋め込まれたASCII制御文字が保持されるか(sourceFormatが"CSV"の場合のみ) |
| setCopyFilesOnly |
Boolean |
管理テーブルにファイルを直接コピーするようにロードジョブを構成するか |
JobConfigurationTableCopy
JobConfigurationExtract
| メソッド |
引数 |
説明 |
| setDestinationUris |
List<String> |
抽出されたテーブルが書き込まれる完全修飾(GoogleCloudStorage URIのリスト) |
| setPrintHeader |
Boolean |
結果にヘッダー行を出力するかどうか |
| setFieldDelimiter |
String |
エクスポートされたデータのフィールド間で使用する区切り文字(CSVのみ) |
| setDestinationFormat |
String |
エクスポートされたファイル形式 |
| setCompression |
String |
エクスポートされたファイルに使用する圧縮タイプ "DEFLATE"、"GZIP"、"NONE"、"SNAPPY"、"ZSTD" |
| setUseAvroLogicalTypes |
Boolean |
抽出するときに論理タイプを使用するかどうか(AVROのみ) |
| setModelExtractOptions |
ModelExtractOptions |
モデル抽出オプション |
| setSourceTable |
TableReference |
エクスポートされるテーブルへの参照 |
| setSourceModel |
ModelReference |
エクスポートされるモデルへの参照 |
JobReference
| メソッド |
引数 |
説明 |
| setProjectId |
String |
プロジェクトID |
| setJobId |
String |
ジョブID |
| setLocation |
String |
ロケーション |
TableReference
| メソッド |
引数 |
説明 |
| setProjectId |
String |
プロジェクトID |
| setDatasetId |
String |
データセットID |
| setTableId |
String |
テーブルID |
UserDefinedFunctionResource
| メソッド |
引数 |
説明 |
| setResourceUri |
String |
リソースのURI |
| setInlineCode |
String |
ユーザー定義関数(UDF)のコードを含むインラインリソース |
DatasetReference
| メソッド |
引数 |
説明 |
| setDatasetId |
String |
データセットID |
| setProjectId |
String |
プロジェクトID |
ConnectionProperty
| メソッド |
引数 |
説明 |
| setKey |
String |
プロパティのキー |
| setValue |
String |
プロパティの値 |
EncryptionConfiguration
| メソッド |
引数 |
説明 |
| setKmsKeyName |
String |
CloudKMS暗号化キーの説明 |
Clustering
| メソッド |
引数 |
説明 |
| setFields |
List<String> |
クラスタリングするフィールド |
RangePartitioning
RangePartitioning.Range
| メソッド |
引数 |
説明 |
| setStart |
String |
範囲分割の開始 |
| setEnd |
String |
範囲分割の終了 |
| setInterval |
String |
各間隔の幅 |
ScriptOptions
| メソッド |
引数 |
説明 |
| setStatementTimeoutMs |
Long |
スクリプト内の各ステートメントのタイムアウト期間 |
| setStatementByteBudget |
Long |
制限するステートメントごとに請求されるバイト数 |
| setKeyResultStatement |
KeyResultStatementKind(enum) |
スクリプトジョブのスキーマとクエリ結果の入力に使用されるキー |
TimePartitioning
| メソッド |
引数 |
説明 |
| setType |
String |
タイプ "DAY"、"HOUR"、"MONTH"、"YEAR" |
| setExpirationMs |
Long |
パーティションのストレージを保持する時間(ミリ秒) |
| setField |
String |
パーティション化するフィールド |
DestinationTableProperties
| メソッド |
引数 |
説明 |
| setFriendlyName |
String |
宛先テーブルのフレンドリ名 |
| setDescription |
String |
宛先テーブルの説明 |
| setLabels |
Map<String,String> |
テーブルに関連付けられたラベル |
ModelReference
| メソッド |
引数 |
説明 |
| setProjectId |
String |
プロジェクトID |
| setDatasetId |
String |
データセットID |
| setModelId |
String |
モデルID |
ModelExtractOptions
| メソッド |
引数 |
説明 |
| setTrialId |
Long |
ハイパーパラメータ調整モデルからエクスポートされるトライアルID |
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 |
パーティションの削除に使用できるパーティションフィルターを指定するか |
| setFields |
List<String> |
ハイブパーティションキー |
AvroOptions
| メソッド |
引数 |
説明 |
| setUseAvroLogicalTypes |
Boolean |
論理型を対応するBigQueryデータ型として解釈するか |
ParquetOptions
| メソッド |
引数 |
説明 |
| setEnumAsString |
Boolean |
デフォルトでParquetENUM論理型をBYTESではなくSTRINGとして推論するか |
| setEnableListInference |
Boolean |
ParquetLIST論理型に対してスキーマ推論を使用するか |
QueryParameterType
QueryParameterType.StructTypes
| メソッド |
引数 |
説明 |
| setName |
String |
フィールドの名前 |
| setType |
QueryParameterType |
フィールドのタイプ |
| setDescription |
String |
フィールドの説明 |
QueryParameter
QueryParameterValue
RangeValue
FileSetSpecType
| 定義値 |
内容 |
| FILE_SET_SPEC_TYPE_FILE_SYSTEM_MATCH |
オブジェクトストアからファイルをリストすることによってソースURIを展開 |
| FILE_SET_SPEC_TYPE_NEW_LINE_DELIMITED_MANIFEST |
提供されるURIが改行で区切られたマニフェストファイルであり、1行に1つのURIを展開 |
DecimalTargetType
| 定義値 |
内容 |
| DECIMAL_TARGET_TYPE_UNSPECIFIED |
無効なタイプ |
| NUMERIC |
10進数値はNUMERIC型に変換 |
| BIGNUMERIC |
10進数値はBIGNUMERIC型に変換 |
| STRING |
10進数値はSTRING型に変換 |
JsonExtension
| 定義値 |
内容 |
| JSON_EXTENSION_UNSPECIFIED |
ソース形式は何も変更せずに解析 |
| GEOJSON |
JSONのGeoJSONバリアントを使用 |
OperationType
| 定義値 |
内容 |
| OPERATION_TYPE_UNSPECIFIED |
未指定 |
| COPY |
ソーステーブルと宛先テーブルのテーブルタイプは同じ |
| SNAPSHOT |
ソーステーブルのタイプはTABLEで、宛先テーブルのタイプはSNAPSHOT |
| RESTORE |
ソーステーブルタイプはSNAPSHOTで、宛先テーブルタイプはTABLE |
| CLONE |
ソーステーブルと宛先テーブルのテーブルタイプは同じ、一意のデータに対してのみ課金される |
MetadataCacheMode
| 定義値 |
内容 |
| METADATA_CACHE_MODE_UNSPECIFIED |
未定義 |
| AUTOMATIC |
外部ソースからのメタデータキャッシュの自動バックグラウンド更新をトリガー |
| MANUAL |
外部ソースからのメタデータキャッシュの手動更新をトリガー |
ObjectMetadata
| 定義値 |
内容 |
| OBJECT_METADATA_UNSPECIFIED |
未定義 |
| SIMPLE |
オブジェクトのディレクトリリスト |
KeyResultStatementKind
| 定義値 |
内容 |
| KEY_RESULT_STATEMENT_KIND_UNSPECIFIED |
デフォルト値 |
| LAST |
最後の結果が重要な結果を決定 |
| FIRST_SELECT |
最初のSELECTステートメントによってキーの結果 |
create_disposition
| 定義値 |
内容 |
| CREATE_IF_NEEDED |
テーブルが存在しない場合、BigQueryはテーブルを作成 |
| CREATE_NEVER |
テーブルはすでに存在している必要がある |
write_disposition
| 定義値 |
内容 |
| WRITE_TRUNCATE |
テーブルがすでに存在する場合、BigQueryはデータを上書きし、制約を削除し、クエリ結果のスキーマを使用 |
| WRITE_APPEND |
テーブルがすでに存在する場合、BigQueryはデータをテーブルに追加 |
| WRITE_EMPTY |
テーブルがすでに存在し、データが含まれている場合、ジョブの結果で「重複」エラー |
スキーマ更新オプション
| 定義値 |
内容 |
| ALLOW_FIELD_ADDITION |
新しいフィールドの追加を許可 |
| ALLOW_FIELD_RELAXATION |
REQUIREDフィールドをNULLABLEに緩和することを許可 |
ハイブパーティショニングのモード
| 定義値 |
内容 |
| AUTO |
パーティションキーの名前とタイプを自動的に推測 |
| STRINGS |
パーティションキー名を自動的に推測 |
| CUSTOM |
パーティションキースキーマはソースURIプレフィックスでエンコードされる |
1.3. レスポンスの内容
Job
⧉[BigQuery API(V2)] JavaでBigQueryのジョブを取得する(Job)と同じです。
2. ジョブを削除
指定したジョブを削除します。
2.1. スコープ
このAPIを実行するには、以下のいずれかのスコープを指定してください。
BigqueryScopes.BIGQUERY
BigqueryScopes.CLOUD_PLATFORM
⧉[BigQuery API(V2)] JavaでBigQueryを使う(3.2. BigQueryインスタンスを取得)
でスコープを指定してください。
2.2. 実行
ジョブIDは、JobReferenceのgetJobId()で取得できる値を指定します。
public static void main(String[] args) throws Exception{
Bigquery bigquery = getBigquery();
Bigquery.Jobs jobs = bigquery.jobs();
Bigquery.Jobs.Delete delete = jobs.delete("プロジェクトID","ジョブID");
delete.setLocation("ロケーションID");
delete.execute();
}
2.2.1. HTTPリクエスト
DELETE: https://bigquery.googleapis.com/bigquery/v2/projects/{プロジェクトID}/jobs/{ジョブID}/delete
が実行されます。
2.2.2. クエリパラメータ
Bigquery.Jobs.Deleteのsetメソッドにより、クエリパラメータを追加できます。
| メソッド |
引数 |
説明 |
| setLocation |
String |
【必須】ロケーションID |
2.3. レスポンスの内容
レスポンスはありません。
削除に失敗すると例外が発生します。
おしまい。。