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