[BigQuery API(V2)] JavaでBigQuery ML モデルの情報を取得する

BigQuery API V2(Java)を使用して、
BigQueryMLモデルの情報を取得する方法
についてご紹介します。

**BigQuery ML**
BigQuery上で機械学習モデル(ML)を作成、評価、実行ができるサービスです。
専門知識がなくとも機械学習ができるようになっています。
<br>
MLモデル取得にはデータセットに対しIAM権限が付与されている必要があります。

権限付与に関しては
[⧉[BigQuery API(V2)] JavaでBigQueryを使う(2.権限付与)](https://qiita.com/doran/items/8b7ba29672527426e88d#2-権限付与)
を参照ください。

:::note info
APIを利用する環境の準備から始める場合や、コードを実行する際は、
[⧉[BigQuery API(V2)] JavaでBigQueryを使う](https://qiita.com/doran/items/8b7ba29672527426e88d)
を参照ください。
:::

|No||目次|
|---|---|---|
|1||[モデル一覧を取得](#1-モデル一覧を取得)|
||1|[スコープ](#11-スコープ)|
||2|[実行](#12-実行)|
||3|[レスポンスの内容](#13-レスポンスの内容)|
|2||[モデルを取得](#2-モデルを取得)|
||1|[スコープ](#21-スコープ)|
||2|[実行](#22-実行)|
||3|[レスポンスの内容](#23-レスポンスの内容)|

## 1. モデル一覧を取得
指定したデータセットのMLモデル一覧を取得します。

### 1.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インスタンスを取得)](https://qiita.com/doran/items/8b7ba29672527426e88d#32-bigqueryインスタンスを取得)
でスコープを指定してください。

### 1.2. 実行

```java
public static void main(String[] args) throws Exception{
    Bigquery bigquery = getBigquery();
    Bigquery.Models models = bigquery.models();
    
    Bigquery.Models.List list = models.list("プロジェクトID","データセットID");
    
    ListModelsResponse res = list.execute();
    System.out.println(res);
}
```
#### 1.2.1. HTTPリクエスト
GET:　https:\//bigquery.googleapis.com/bigquery/v2/projects/{プロジェクトID}/datasets/{データセットID}/models
が実行されます。

#### 1.2.2. クエリパラメータ
Bigquery.Models.Listのsetメソッドにより、クエリパラメータを追加できます。

|メソッド|引数|説明|
|---|---|---|
|setMaxResults|Integer|結果の最大数|
|setPageToken|String|取得するページトークン|

### 1.3. レスポンスの内容
#### ListModelsResponse
|メソッド|戻り値|説明|
|---|---|---|
|getNextPageToken|String|次のページトークン|
|getModels|List\<[Model](#model)\>|モデルリスト|

#### Model
|メソッド|戻り値|説明|
|---|---|---|
|getEtag|String|ハッシュ値|
|getModelReference|[ModelReference](#modelreference)|モデルの一意の識別子|
|getCreationTime|Long|モデルが作成された時刻(ミリ秒)|
|getLastModifiedTime|Long|モデルが最後に変更された時刻(ミリ秒)|
|getDescription|String|説明|
|getFriendlyName|String|説明する名前|
|getLabels|Map\<String,String\>|モデルに関連付けられたラベル|
|getExpirationTime|Long|モデルの有効期限が切れる時刻(ミリ秒)|
|getLocation|String|モデルが存在する地理的位置|
|getEncryptionConfiguration|[EncryptionConfiguration](#encryptionconfiguration)|カスタム暗号化構成の情報|
|getModelType|[ModelType(enum)](#modeltype)|モデルリソースのタイプ|
|getTrainingRuns|List\<[TrainingRun](#trainingrun)\>|トレーニング実行の情報|
|getFeatureColumns|List\<[StandardSqlField](#standardsqlfield)\>|モデル推論用の入力特徴列|
|getLabelColumns|List\<[StandardSqlField](#standardsqlfield)\>|モデルのトレーニングに使用された列のラベル|
|getTransformColumns|List\<[TransformColumn](#transformcolumn)\>|トレーニング情報|
|getHparamSearchSpaces|[HparamSearchSpaces](#hparamsearchspaces)|ハイパーパラメータ検索スペース|
|getDefaultTrialId|Long|デフォルトのTrialId|
|getHparamTrials|List\<[HparamTuningTrial](#hparamtuningtrial)\>|TrialIdでソートされたハイパーパラメータ調整モデル情報|
|getOptimalTrialIds|List\<Long\>|単一目的のハイパーパラメータ調整モデルの場合のTrialIdリスト|
|getRemoteModelInfo|[RemoteModelInfo](#remotemodelinfo)|リモートモデル情報|

#### ModelReference
|メソッド|戻り値|説明|
|---|---|---|
|getProjectId|String|プロジェクトID|
|getDatasetId|String|データセットID|
|getModelId|String|モデルID|

#### EncryptionConfiguration
|メソッド|戻り値|説明|
|---|---|---|
|getKmsKeyName|String|CloudKMS暗号化キーの説明|

#### TrainingRun
|メソッド|戻り値|説明|
|---|---|---|
|getTrainingOptions|[TrainingOptions](#trainingoptions)|トレーニングオプション情報|
|getStartTime|String|トレーニング実行の開始時刻|
|getResults|List\<[IterationResult](#iterationresult)\>|各反復実行の出力|
|getEvaluationMetrics|[EvaluationMetrics](#evaluationmetrics)|評価データに対する評価メトリクス|
|getDataSplitResult|[DataSplitResult](#datasplitresult)|トレーニング実行のデータ分割結果|
|getModelLevelGlobalExplanation|[GlobalExplanation](#globalexplanation)|モデルレベルの主要な機能の情報|
|getClassLevelGlobalExplanations|List\<[GlobalExplanation](#globalexplanation)\>|クラスレベルの主要な機能の情報|
|getVertexAiModelId|String|VertexAIモデルレジストリ内のモデルID|
|getVertexAiModelVersion|String|VertexAIモデルレジストリ内のモデルバージョン|

#### TrainingOptions
|メソッド|戻り値|説明|
|---|---|---|
|getMaxIterations|Long|トレーニングの最大反復数|
|getLossType|[LossType(enum)](#losstype)|トレーニングの実行中に使用される損失関数のタイプ|
|getLearnRate|Double|トレーニングでの学習率|
|getL1Regularization|Double|L1正則化係数|
|getL2Regularization|Double|L2正則化係数|
|getMinRelativeProgress|Double|トレーニング停止とする精度|
|getWarmStart|Boolean|最後のチェックポイントからモデルをトレーニングするか|
|getEarlyStop|Boolean|損失がこれ以上大幅に改善しない場合に早期に停止するか|
|getInputLabelColumns|List\<String\>|トレーニングデータの入力ラベル列の名前|
|getDataSplitMethod|[DataSplitMethod(enum)](#datasplitmethod)|トレーニングと評価のためのデータ分割タイプ|
|getDataSplitEvalFraction|Double|入力データ全体に対する評価データの割合|
|getDataSplitColumn|String|データを分割する列|
|getLearnRateStrategy|[LearnRateStrategy(enum)](#learnratestrategy)|現在の反復の学習率を決定する戦略|
|getInitialLearnRate|Double|ライン探索学習率戦略の初期学習率|
|getLabelClassWeights|Map\<String,Double\>|トレーニングデータのバランスを再調整するためのラベル|
|getUserColumn|String|行列分解モデルに指定されたユーザー列|
|getItemColumn|String|行列分解モデルに指定された項目列|
|getDistanceType|[DistanceType(enum)](#distancetype)|クラスタリングモデルの距離タイプ|
|getNumClusters|Long|クラスタリングモデルのクラスターの数|
|getModelUri|String|モデルURI|
|getOptimizationStrategy|[OptimizationStrategy(enum)](#optimizationstrategy)|線形回帰モデルをトレーニングするための最適化戦略|
|getHiddenUnits|List\<Long\>|dnnモデルの隠しユニット|
|getBatchSize|Long|dnnモデルのバッチサイズ|
|getDropout|Double|dnnモデルのドロップアウト確率|
|getMaxTreeDepth|Long|ブーストされたツリーモデルのツリーの最大深さ|
|getSubsample|Double|ブーストされたツリーモデルの過学習を防ぐために、トレーニングデータの一部をサブサンプリング|
|getMinSplitLoss|Double|ブーストされたツリーモデルの最小分割損失|
|getBoosterType|[BoosterType(enum)](#boostertype)|ブーストされたツリーモデルのブースタータイプ|
|getNumParallelTree|Long|ブーストされたツリーモデルの各反復中に構築された並列ツリーの数|
|getDartNormalizeType|[DartNormalizeType(enum)](#dartnormalizetype)|Dartboosterを使用したブーストされたツリーモデルの正規化アルゴリズムのタイプ|
|getTreeMethod|[TreeMethod(enum)](#treemethod)|ブーストされたツリーモデルのツリー構築アルゴリズム|
|getMinTreeChildWeight|Long|ブーストされたツリーモデルの子に必要なインスタンスの重みの最小合計|
|getColsampleBytree|Double|ブーストされたツリーモデルの各ツリーを構築するときの列のサブサンプル比|
|getColsampleBylevel|Double|ブーストされたツリーモデルの各レベルの列のサブサンプル比|
|getColsampleBynode|Double|ブーストされたツリーモデルの各ノードの列のサブサンプル比|
|getNumFactors|Long|行列分解モデルに指定された因数の数|
|getFeedbackType|[FeedbackType(enum)](#feedbacktype)|行列分解に実行するアルゴリズムを指定するフィードバックタイプ|
|getWalsAlpha|Double|暗黙的なフィードバックタイプが指定されている場合の行列因数分解のハイパーパラメーター|
|getKmeansInitializationMethod|[KmeansInitializationMethod(enum)](#kmeansinitializationmethod)|kmeansアルゴリズムの重心を初期化するために使用されるメソッド|
|getKmeansInitializationColumn|String|kmeansアルゴリズムの初期重心を提供するために使用される列|
|getTimeSeriesTimestampColumn|String|ARIMAモデルの時系列タイムスタンプとして指定される列|
|getTimeSeriesDataColumn|String|ARIMAモデルの時系列データとして指定する列|
|getAutoArima|Boolean|自動ARIMAを有効にするか|
|getNonSeasonalOrder|[ArimaOrder](#arimaorder)|ARIMAモデルの非季節部分の仕様|
|getDataFrequency|[DataFrequency(enum)](#datafrequency)|時系列のデータ頻度|
|getCalculatePValues|Boolean|モデルに対してp値検定を計算するか|
|getIncludeDrift|Boolean|ARIMAモデルをフィッティングするときにドリフトを含めるか|
|getHolidayRegion|[HolidayRegion(enum)](#holidayregion)|時系列モデリングで休日が考慮される地理的地域|
|getHolidayRegions|List\<[HolidayRegion(enum)](#holidayregion)\>|時系列モデリングに使用される地理的地域のリスト|
|getTimeSeriesIdColumn|String|ARIMAモデルのトレーニング中に使用された時系列ID列|
|getTimeSeriesIdColumns|List\<String\>|ARIMAモデルのトレーニング中に使用された時系列ID列|
|getHorizon|Long|予測する必要がある今後の期間の数|
|getAutoArimaMaxOrder|Long|非季節性のpとqの合計の最大値|
|getAutoArimaMinOrder|Long|非季節性のpとqの合計の最小値|
|getNumTrials|Long|このハイパーパラメータ調整ジョブを実行するための試行回数|
|getMaxParallelTrials|Long|並行して実行する試行の最大数|
|getHparamTuningObjectives|List\<[HparamTuningObjective(enum)](#hparamtuningobjective)\>|ハイパーパラメータを最適化するターゲット評価メトリクス|
|getDecomposeTimeSeries|Boolean|時系列の分解を実行して結果を保存するか|
|getCleanSpikesAndDips|Boolean|入力時系列のスパイクとディップをクリーンアップするか|
|getAdjustStepChanges|Boolean|ステップ変化を検出して入力時系列でデータ調整をするか|
|getEnableGlobalExplain|Boolean|トレーニング中にグローバル説明を有効にするか|
|getSampledShapleyNumPaths|Long|サンプリングされたShapleyExplainメソッドのパスの数|
|getIntegratedGradientsNumSteps|Long|統合勾配Explain法の積分ステップの数|
|getCategoryEncodingMethod|[EncodingMethod(enum)](#encodingmethod)|カテゴリ特徴エンコード方式|
|getTfVersion|String|Dockerイメージを使用して外部モデルをトレーニングするTFバージョン|
|getInstanceWeightColumn|String|トレーニングデータのインスタンスの重み列の名前|
|getTrendSmoothingWindowSize|Long|トレンドコンポーネントのスムージングウィンドウサイズ|
|getTimeSeriesLengthFraction|Double|時系列トレンドコンポーネントのモデル化に使用される時系列の内挿された長さの割合|
|getMinTimeSeriesLength|Long|時系列の傾向コンポーネントのモデル化に使用される時系列内の時点の最小数|
|getMaxTimeSeriesLength|Long|時系列の傾向コンポーネントのモデル化に使用できる時系列内の時点の最大数|
|getXgboostVersion|String|XGBoostモデルのトレーニング用にユーザーが選択したXGBoostバージョン|
|getApproxGlobalFeatureContrib|Boolean|グローバルExplainのXGBoostモデル説明で近似特徴寄与法を使用するか|
|getFitIntercept|Boolean|モデルのトレーニング中にモデルに切片を含める必要があるか|
|getNumPrincipalComponents|Long|PCAモデルに保持する主成分の数|
|getPcaExplainedVarianceRatio|Double|PCAモデルによって指定される必要がある累積説明分散の最小比率|
|getScaleFeatures|Boolean|特徴の標準偏差を除算して特徴の値をスケーリングするか|
|getPcaSolver|[PcaSolver(enum)](#pcasolver)|PCAのソルバー|
|getAutoClassWeights|Boolean|各ラベルの人気に基づいてクラスの重みを自動的に計算するか|
|getActivationFn|String|ニューラルネットの活性化機能|
|getOptimizer|String|ニューラルネットのトレーニングに使用されるオプティマイザー|
|getBudgetHours|Double|AutoMLトレーニングの予算の時間単位|
|getStandardizeFeatures|Boolean|数値特徴を標準化するか|
|getL1RegActivation|Double|活性化に対するL1正則化係数|
|getModelRegistry|[ModelRegistry(enum)](#modelregistry)|モデルレジストリ|
|getVertexAiModelVersionAliases|List\<String\>|VertexAIモデルレジストリに適用するバージョンエイリアス|

#### ArimaOrder
|メソッド|戻り値|説明|
|---|---|---|
|getP|Long|自己回帰部分の順序|
|getD|Long|差分部分の順序|
|getQ|Long|移動平均部分の順序|

#### IterationResult
|メソッド|戻り値|説明|
|---|---|---|
|getIndex|Integer|反復のインデックス(0開始)|
|getDurationMs|Long|反復の実行にかかった時間(ミリ秒単位)|
|getTrainingLoss|Double|反復の終了時にトレーニングデータに基づいて計算された損失|
|getEvalLoss|Double|反復の終了時に評価データに基づいて計算された損失|
|getLearnRate|Double|この反復に使用される学習率|
|getClusterInfos|List\<[ClusterInfo](#clusterinfo)\>|クラスタリングモデルの上位クラスターに関する情報|
|getArimaResult|[ArimaResult](#arimaresult)|arimaの結果|
|getPrincipalComponentInfos|List\<[PrincipalComponentInfo](#principalcomponentinfo)\>|主成分の情報|

#### ClusterInfo
|メソッド|戻り値|説明|
|---|---|---|
|getCentroidId|Long|重心ID|
|getClusterRadius|Double|クラスター半径|
|getClusterSize|Long|クラスターに割り当てられたポイントの総数|

#### ArimaResult
|メソッド|戻り値|説明|
|---|---|---|
|getArimaModelInfo|List\<[ArimaModelInfo](#arimamodelinfo)\>|arimaモデルの情報|
|getSeasonalPeriods|List\<[SeasonalPeriodType(enum)](#seasonalperiodtype)\>|季節限定の情報|

#### ArimaModelInfo
|メソッド|戻り値|説明|
|---|---|---|
|getNonSeasonalOrder|[ArimaOrder](#arimaorder)|季節外の注文|
|getArimaCoefficients|[ArimaCoefficients](#arimacoefficients)|arima係数|
|getArimaFittingMetrics|[ArimaFittingMetrics](#arimafittingmetrics)|arimaフィッティングメトリクス|
|getHasDrift|Boolean|arimaモデルがドリフトに装着されているか|
|getTimeSeriesId|String|timeSeriesId|
|getTimeSeriesIds|List\<String\>|timeSeriesIdsのタプル|
|getSeasonalPeriods|List\<[SeasonalPeriodType(enum)](#seasonalperiodtype)\>|季節限定の情報|
|getHasHolidayEffect|Boolean|holiday_effectは時系列分解結果の一部か|
|getHasSpikesAndDips|Boolean|spikes_and_dipsは時系列分解結果の一部か|
|getHasStepChanges|Boolean|step_changesは時系列分解結果の一部か|

#### ArimaCoefficients
|メソッド|戻り値|説明|
|---|---|---|
|getAutoRegressiveCoefficients|List\<Double\>|自己回帰係数|
|getMovingAverageCoefficients|List\<Double\>|移動平均係数|
|getInterceptCoefficient|Double|インターセプト係数|

#### ArimaFittingMetrics
|メソッド|戻り値|説明|
|---|---|---|
|getLogLikelihood|Double|対数尤度|
|getAic|Double|AIC|
|getVariance|Double|分散|

#### PrincipalComponentInfo
|メソッド|戻り値|説明|
|---|---|---|
|getPrincipalComponentId|Long|主コンポーネントID|
|getExplainedVariance|Double|分散の主成分|
|getExplainedVarianceRatio|Double|合計説明分散|
|getCumulativeExplainedVarianceRatio|Double|累積説明分散比|

#### EvaluationMetrics
|メソッド|戻り値|説明|
|---|---|---|
|getRegressionMetrics|[RegressionMetrics](#regressionmetrics)|回帰モデルおよび明示的フィードバックタイプの行列因数分解モデルの情報|
|getBinaryClassificationMetrics|[BinaryClassificationMetrics](#binaryclassificationmetrics)|バイナリ分類/分類子モデルの情報|
|getMultiClassClassificationMetrics|[MultiClassClassificationMetrics](#multiclassclassificationmetrics)|マルチクラス分類/分類子モデルの情報|
|getClusteringMetrics|[ClusteringMetrics](#clusteringmetrics)|クラスタリングモデルの情報|
|getRankingMetrics|[RankingMetrics](#rankingmetrics)|暗黙的フィードバックタイプの行列分解モデルの情報|
|getArimaForecastingMetrics|[ArimaForecastingMetrics](#arimaforecastingmetrics)|ARIMAモデルの情報|
|getDimensionalityReductionMetrics|[DimensionalityReductionMetrics](#dimensionalityreductionmetrics)|評価メトリクスの情報|

#### RegressionMetrics
|メソッド|戻り値|説明|
|---|---|---|
|getMeanAbsoluteError|Double|平均絶対誤差|
|getMeanSquaredError|Double|平均二乗誤差|
|getMeanSquaredLogError|Double|平均二乗対数誤差|
|getMedianAbsoluteError|Double|中央値絶対誤差|
|getRSquared|Double|R^2スコア|

#### BinaryClassificationMetrics
|メソッド|戻り値|説明|
|---|---|---|
|getAggregateClassificationMetrics|[AggregateClassificationMetrics](#aggregateclassificationmetrics)|分類メトリック集約情報|
|getBinaryConfusionMatrixList|List\<[BinaryConfusionMatrix](#binaryconfusionmatrix)\>|複数のしきい値での二値混同行列|
|getPositiveLabel|String|陽性クラスを表すラベル|
|getNegativeLabel|String|ネガティブクラスを表すラベル|

#### AggregateClassificationMetrics
|メソッド|戻り値|説明|
|---|---|---|
|getPrecision|Double|実際の精度|
|getRecall|Double|再現率|
|getAccuracy|Double|精度|
|getThreshold|Double|メトリクスが計算されるしきい値|
|getF1Score|Double|再現率と適合率の平均|
|getLogLoss|Double|対数損失|
|getRocAuc|Double|ROC曲線の下の領域|

#### BinaryConfusionMatrix
|メソッド|戻り値|説明|
|---|---|---|
|getPositiveClassThreshold|Double|次の各メトリックを計算するときに使用されるしきい値|
|getTruePositives|Long|真として予測された真のサンプルの数|
|getFalsePositives|Long|真として予測された偽サンプルの数|
|getTrueNegatives|Long|偽として予測された真のサンプルの数|
|getFalseNegatives|Long|偽として予測された偽サンプルの数|
|getPrecision|Double|正の実際のラベルを持つ実際の正の予測の割合|
|getRecall|Double|陽性予測が与えられた実際の陽性ラベルの割合|
|getF1Score|Double|再現率と適合率の均等加重平均|
|getAccuracy|Double|正しいラベルが与えられた予測の割合|

#### MultiClassClassificationMetrics
|メソッド|戻り値|説明|
|---|---|---|
|getAggregateClassificationMetrics|[AggregateClassificationMetrics](#aggregateclassificationmetrics)|分類メトリックを集約情報|
|getConfusionMatrixList|List\<[ConfusionMatrix](#confusionmatrix)\>|さまざまな閾値での混同行列|

#### ConfusionMatrix
|メソッド|戻り値|説明|
|---|---|---|
|getConfidenceThreshold|Double|混同行列のエントリを計算するときに使用される信頼しきい値|
|getRows|List\<[Row](#row)\>|行情報|

#### Row
|メソッド|戻り値|説明|
|---|---|---|
|getActualLabel|String|この行の元のラベル|
|getEntries|List\<[BigqueryEntry](#bigqueryentry)\>|予測されたラベル分布を説明する情報|

#### BigqueryEntry
|メソッド|戻り値|説明|
|---|---|---|
|getPredictedLabel|String|予測されたラベル|
|getItemCount|Long|このラベルとして予測されるアイテムの数|

#### ClusteringMetrics
|メソッド|戻り値|説明|
|---|---|---|
|getDaviesBouldinIndex|Double|デイビス・ボールディン指数|
|getMeanSquaredDistance|Double|各サンプル間のクラスター重心までの二乗距離の平均|
|getClusters|List\<[Cluster](#cluster)\>|すべてのクラスター情報|

#### Cluster
|メソッド|戻り値|説明|
|---|---|---|
|getCentroidId|Long|重心ID|
|getFeatureValues|List\<[FeatureValue](#featurevalue)\>|このクラスターの非常に多様な特徴の値|
|getCount|Long|割り当てられたトレーニングデータ行の数|

#### FeatureValue
|メソッド|戻り値|説明|
|---|---|---|
|getFeatureColumn|String|特徴列の名前|
|getNumericalValue|Double|数値的な特徴値|
|getCategoricalValue|[CategoricalValue](#categoricalvalue)|カテゴリ特徴量|

#### CategoricalValue
|メソッド|戻り値|説明|
|---|---|---|
|getCategoryCounts|List\<[CategoryCount](#categorycount)\>|カテゴリ特徴のすべてのカテゴリの数|

#### CategoryCount
|メソッド|戻り値|説明|
|---|---|---|
|getCategory|String|カテゴリの名前|
|getCount|Long|クラスター内のカテゴリーに一致するトレーニングサンプルの数|

#### RankingMetrics
|メソッド|戻り値|説明|
|---|---|---|
|getMeanAveragePrecision|Double|すべてのユーザーの精度平均|
|getMeanSquaredError|Double|評価からの出力|
|getNormalizedDiscountedCumulativeGain|Double|予測された信頼度から計算されたランキングの良さを判断するための指標|
|getAverageRank|Double|ランキングの良さの指標平均|

#### ArimaForecastingMetrics
|メソッド|戻り値|説明|
|---|---|---|
|getArimaSingleModelForecastingMetrics|List\<[ArimaSingleModelForecastingMetrics](#arimasinglemodelforecastingmetrics)\>|メトリックセットの情報|

#### ArimaSingleModelForecastingMetrics
|メソッド|戻り値|説明|
|---|---|---|
|getNonSeasonalOrder|[ArimaOrder](#arimaorder)|季節外のご注文|
|getArimaFittingMetrics|[ArimaFittingMetrics](#arimafittingmetrics)|arimaフィッティングメトリクス|
|getHasDrift|Boolean|arimaモデルにドリフトが装着されているか|
|getTimeSeriesId|String|timeSeriesId|
|getTimeSeriesIds|List\<String\>|timeSeriesIdsのタプル|
|getSeasonalPeriods|List\<[SeasonalPeriodType(enum)](#seasonalperiodtype)\>|季節限定の情報|
|getHasHolidayEffect|Boolean|holiday_effectは時系列分解結果の一部か|
|getHasSpikesAndDips|Boolean|spikes_and_dipsは時系列分解結果の一部か|
|getHasStepChanges|Boolean|step_changesは時系列分解結果の一部か|

#### DimensionalityReductionMetrics
|メソッド|戻り値|説明|
|---|---|---|
|getTotalExplainedVarianceRatio|Double|選択した主成分によって説明される分散の合計パーセンテージ|

#### DataSplitResult
|メソッド|戻り値|説明|
|---|---|---|
|getTrainingTable|[TableReference](#tablereference)|分割後の学習データのテーブル参照|
|getEvaluationTable|[TableReference](#tablereference)|分割後の評価データの表参照|
|getTestTable|[TableReference](#tablereference)|分割後のテストデータのテーブル参照|

#### GlobalExplanation
|メソッド|戻り値|説明|
|---|---|---|
|getExplanations|List\<[Explanation](#explanation)\>|トップのグローバル説明のリスト|
|getClassLabel|String|このグローバル説明セットのクラスラベル|

#### Explanation
|メソッド|戻り値|説明|
|---|---|---|
|getFeatureName|String|完全な機能名|
|getAttribution|Double|機能の帰属|

#### TransformColumn
|メソッド|戻り値|説明|
|---|---|---|
|getName|String|列の名前|
|getType|[StandardSqlDataType](#standardsqldatatype)|変換後の列のデータ型|
|getTransformSql|String|列変換で使用されるSQL式|

#### HparamSearchSpaces
|メソッド|戻り値|説明|
|---|---|---|
|getLearnRate|[DoubleHparamSearchSpace](#doublehparamsearchspace)|トレーニングジョブの学習率|
|getL1Reg|[DoubleHparamSearchSpace](#doublehparamsearchspace)|L1正則化係数|
|getL2Reg|[DoubleHparamSearchSpace](#doublehparamsearchspace)|L2正則化係数|
|getNumClusters|[IntHparamSearchSpace](#inthparamsearchspace)|K平均法のクラスターの数|
|getNumFactors|[IntHparamSearchSpace](#inthparamsearchspace)|トレーニングする潜在的な要素の数|
|getHiddenUnits|[IntArrayHparamSearchSpace](#intarrayhparamsearchspace)|ニューラルネットワークモデルの隠れユニット|
|getBatchSize|[IntHparamSearchSpace](#inthparamsearchspace)|ミニバッチのサンプルサイズ|
|getDropout|[DoubleHparamSearchSpace](#doublehparamsearchspace)|dnnモデルのトレーニングとdartboosterを使用したブーストされたツリーモデルのドロップアウト確率|
|getMaxTreeDepth|[IntHparamSearchSpace](#inthparamsearchspace)|ブーストされたツリーモデルのツリーの最大深さ|
|getSubsample|[DoubleHparamSearchSpace](#doublehparamsearchspace)|トレーニングデータをサブサンプリングしてツリー情報|
|getMinSplitLoss|[DoubleHparamSearchSpace](#doublehparamsearchspace)|ブーストされたツリーモデルの最小分割損失|
|getWalsAlpha|[DoubleHparamSearchSpace](#doublehparamsearchspace)|暗黙的なフィードバックタイプが指定されている場合の行列因数分解のハイパーパラメーター|
|getBoosterType|[StringHparamSearchSpace](#stringhparamsearchspace)|ブーストされたツリーモデルのブースタータイプ|
|getNumParallelTree|[IntHparamSearchSpace](#inthparamsearchspace)|ブーストされたツリーモデルの並列ツリーの数|
|getDartNormalizeType|[StringHparamSearchSpace](#stringhparamsearchspace)|ブーストされたツリーモデルのDart正規化タイプ|
|getTreeMethod|[StringHparamSearchSpace](#stringhparamsearchspace)|ブーストされたツリーモデルのツリー構築アルゴリズム|
|getMinTreeChildWeight|[IntHparamSearchSpace](#inthparamsearchspace)|ブーストされたツリーモデルの子に必要なインスタンスの重みの最小合計|
|getColsampleBytree|[DoubleHparamSearchSpace](#doublehparamsearchspace)|ブーストツリーモデルの各ツリーを構築するときの列のサブサンプル比|
|getColsampleBylevel|[DoubleHparamSearchSpace](#doublehparamsearchspace)|ブーストされたツリーモデルの各レベルの列のサブサンプル比|
|getColsampleBynode|[DoubleHparamSearchSpace](#doublehparamsearchspace)|ブーストされたツリーモデルの各ノード(分割)の列のサブサンプル比|
|getActivationFn|[StringHparamSearchSpace](#stringhparamsearchspace)|ニューラルネットワークモデルの活性化関数|
|getOptimizer|[StringHparamSearchSpace](#stringhparamsearchspace)|TFモデルのオプティマイザー|

#### DoubleHparamSearchSpace
|メソッド|戻り値|説明|
|---|---|---|
|getRange|[DoubleRange](#doublerange)|Doubleハイパーパラメータの範囲|
|getCandidates|[DoubleCandidates](#doublecandidates)|Doubleハイパーパラメータの候補|

#### DoubleRange
|メソッド|戻り値|説明|
|---|---|---|
|getMin|Double|Doubleパラメータの最小値|
|getMax|Double|Doubleパラメータの最大値|

#### DoubleCandidates
|メソッド|戻り値|説明|
|---|---|---|
|getCandidates|List\<Double\>|Doubleパラメーターの候補|

#### IntHparamSearchSpace
|メソッド|戻り値|説明|
|---|---|---|
|getRange|[IntRange](#intrange)|Intハイパーパラメータの範囲|
|getCandidates|[IntCandidates](#intcandidates)|Intハイパーパラメータの候補|

#### IntRange
|メソッド|戻り値|説明|
|---|---|---|
|getMin|Long|Intパラメータの最小値|
|getMax|Long|Intパラメータの最大値|

#### IntCandidates
|メソッド|戻り値|説明|
|---|---|---|
|getCandidates|List\<Long\>|Intパラメータの候補|

#### IntArrayHparamSearchSpace
|メソッド|戻り値|説明|
|---|---|---|
|getCandidates|List\<[IntArray](#intarray)\>|Int配列パラメータの候補|

#### IntArray
|メソッド|戻り値|説明|
|---|---|---|
|getElements|List\<Long\>|Int配列内の要素|

#### StringHparamSearchSpace
|メソッド|戻り値|説明|
|---|---|---|
|getCandidates|List\<String\>|小文字の文字列または列挙パラメータの候補|

#### HparamTuningTrial
|メソッド|戻り値|説明|
|---|---|---|
|getTrialId|Long|トライアルID|
|getStartTimeMs|Long|裁判の開始時刻|
|getEndTimeMs|Long|裁判の終了時刻|
|getHparams|[TrainingOptions](#trainingoptions)|トライアル用に選択されたハイパーパラメーター|
|getEvaluationMetrics|[EvaluationMetrics](#evaluationmetrics)|トライアルの評価指標の情報|
|getStatus|[TrialStatus(enum)](#trialstatus)|裁判の状況|
|getErrorMessage|String|FAILEDおよびINFEASIBLEトライアルのエラーメッセージ|
|getTrainingLoss|Double|トライアル終了時にトレーニングデータに基づいて計算された損失|
|getEvalLoss|Double|​トライアル終了時の評価データに基づいて計算された損失|
|getHparamTuningEvaluationMetrics|[EvaluationMetrics](#evaluationmetrics)|評価データに基づいて計算された情報|

#### RemoteModelInfo
|メソッド|戻り値|説明|
|---|---|---|
|getConnection|String|リモートモデルのユーザー指定の接続オブジェクトの完全修飾名|
|getMaxBatchingRows|Long|リモートサービスに送信される各バッチの最大行数|
|getRemoteModelVersion|String|LLMのモデルバージョン|
|getEndpoint|String|リモートモデルのエンドポイント|
|getRemoteServiceType|[RemoteServiceType(enum)](#remoteservicetype)|リモートモデルのリモートサービスタイプ|

#### StandardSqlField
|メソッド|戻り値|説明|
|---|---|---|
|getName|String|名前|
|getType|[StandardSqlDataType](#standardsqldatatype)|パラメータのタイプ|

#### StandardSqlDataType
|メソッド|戻り値|説明|
|---|---|---|
|getTypeKind|[TypeKind(enum)](#typekind)|トップレベルのタイプ|
|getArrayElementType|[StandardSqlDataType](#standardsqldatatype)|【getTypeKind()が"ARRAY"の場合】<br>配列の要素の型|
|getStructType|[StandardSqlStructType](#standardsqlstructtype)|【getTypeKind()が"STRUCT"の場合】<br>構造体のフィールド|

#### StandardSqlStructType
|メソッド|戻り値|説明|
|---|---|---|
|getFields|List\<[StandardSqlField](#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が使用)|

#### ModelType
|定義値|内容|
|---|---|
|MODEL_TYPE_UNSPECIFIED|デフォルト値|
|LINEAR_REGRESSION|線形回帰モデル|
|LOGISTIC_REGRESSION|ロジスティック回帰ベースの分類モデル|
|KMEANS|K平均法クラスタリングモデル|
|MATRIX_FACTORIZATION|行列分解モデル|
|DNN_CLASSIFIER|DNN分類子モデル|
|TENSORFLOW|インポートされたTensorFlowモデル|
|DNN_REGRESSOR|DNNリグレッサーモデル|
|XGBOOST|インポートされたXGBoostモデル|
|BOOSTED_TREE_REGRESSOR|ブーストされたツリーリグレッサーモデル|
|BOOSTED_TREE_CLASSIFIER|ブーストされたツリー分類子モデル|
|ARIMA|アリマモデル|
|AUTOML_REGRESSOR|AutoMLTables回帰モデル|
|AUTOML_CLASSIFIER|AutoMLTables分類モデル|
|PCA|主成分分析モデル|
|DNN_LINEAR_COMBINED_CLASSIFIER|広くて深い分類器モデル|
|DNN_LINEAR_COMBINED_REGRESSOR|広くて深い回帰モデル|
|AUTOENCODER|オートエンコーダーのモデル|
|ARIMA_PLUS|ARIMAモデルの新しい名前|
|ARIMA_PLUS_XREG|外部リグレッサーを使用したARIMA|
|RANDOM_FOREST_REGRESSOR|ランダムフォレスト回帰モデル|
|RANDOM_FOREST_CLASSIFIER|ランダムフォレスト分類子モデル|
|TENSORFLOW_LITE|インポートされたTensorFlowLiteモデル|
|ONNX|インポートされたONNXモデル|

#### LossType
|定義値|内容|
|---|---|
|LOSS_TYPE_UNSPECIFIED|デフォルト値|
|MEAN_SQUARED_LOSS|平均二乗損失|
|MEAN_LOG_LOSS|ロジスティック回帰に使用される平均対数損失|

#### DataSplitMethod
|定義値|内容|
|---|---|
|DATA_SPLIT_METHOD_UNSPECIFIED|デフォルト値|
|RANDOM|データをランダムに分割|
|CUSTOM|ユーザーが指定したタグを使用してデータを分割|
|SEQUENTIAL|データを順番に分割|
|NO_SPLIT|データ分割はスキップ|
|AUTO_SPLIT|データを自動的に分割|

#### LearnRateStrategy
|定義値|内容|
|---|---|
|LEARN_RATE_STRATEGY_UNSPECIFIED|デフォルト値|
|LINE_SEARCH|直線探索を使用|
|CONSTANT|一定の学習率を使用|

#### DistanceType
|定義値|内容|
|---|---|
|DISTANCE_TYPE_UNSPECIFIED|デフォルト値|
|EUCLIDEAN|エクリッド距離|
|COSINE|コサイン距離|

#### OptimizationStrategy
|定義値|内容|
|---|---|
|OPTIMIZATION_STRATEGY_UNSPECIFIED|デフォルト値|
|BATCH_GRADIENT_DESCENT|反復バッチ勾配降下法アルゴリズムを使用|
|NORMAL_EQUATION|正規方程式を使用して線形回帰問題を解決|

#### BoosterType
|定義値|内容|
|---|---|
|BOOSTER_TYPE_UNSPECIFIED|未使用|
|GBTREE|GBツリーブースター|
|DART|ダーツブースター|

#### DartNormalizeType
|定義値|内容|
|---|---|
|DART_NORMALIZE_TYPE_UNSPECIFIED|未指定のダーツ正規化タイプ|
|TREE|新しい木は落ちた木と同じ重さになる|
|FOREST|新しい木の重さは落ちた木の合計と同じになる|

#### TreeMethod
|定義値|内容|
|---|---|
|TREE_METHOD_UNSPECIFIED|未指定のツリーメソッド|
|AUTO|ヒューリスティックを使用して最速の方法を選択|
|EXACT|まさに貪欲なアルゴリズム|
|APPROX|分位点スケッチと勾配ヒストグラムを使用した近似貪欲アルゴリズム|
|HIST|高速ヒストグラム最適化近似貪欲アルゴリズム|

#### FeedbackType
|定義値|内容|
|---|---|
|FEEDBACK_TYPE_UNSPECIFIED|デフォルト値|
|IMPLICIT|暗黙的なフィードバック問題にはweighted-alsを使用|
|EXPLICIT|明示的なフィードバック問題には非重み付けalsを使用|

#### KmeansInitializationMethod
|定義値|内容|
|---|---|
|KMEANS_INITIALIZATION_METHOD_UNSPECIFIED|未使用|
|RANDOM|重心をランダムに初期化|
|CUSTOM|kmeansInitializationColumn|で指定されたデータを使用して重心を初期化|
|KMEANS_PLUS_PLUS|kmeans++で初期化|

#### DataFrequency
|定義値|内容|
|---|---|
|DATA_FREQUENCY_UNSPECIFIED|デフォルト値|
|AUTO_FREQUENCY|タイムスタンプから自動的に推測|
|YEARLY|年次データ|
|QUARTERLY|四半期データ|
|MONTHLY|月次データ|
|WEEKLY|週次データ|
|DAILY|毎日のデータ|
|HOURLY|時間ごとのデータ|
|PER_MINUTE|分ごとの日付|

#### HolidayRegion
|定義値|内容|
|---|---|
|HOLIDAY_REGION_UNSPECIFIED|未使用|
|GLOBAL|グローバル|
|NA|北米|
|JAPAC|日本およびアジア太平洋地域:|韓国、中華圏、インド、オーストラリア、ニュージーランド|
|EMEA|ヨーロッパ、中東、アフリカ|
|LAC|ラテンアメリカとカリブ海|
|AE|アラブ首長国連邦|
|AR|アルゼンチン|
|AT|オーストリア|
|AU|オーストラリア|
|BE|ベルギー|
|BR|ブラジル|
|CA|カナダ|
|CH|スイス|
|CL|チリ|
|CN|中国|
|CO|コロンビア|
|CS|チェコスロバキア|
|CZ|チェコ共和国|
|DE|ドイツ|
|DK|デンマーク|
|DZ|アルジェリア|
|EC|エクアドル|
|EE|エストニア|
|EG|エジプト|
|ES|スペイン|
|FI|フィンランド|
|FR|フランス|
|GB|イギリス|
|GR|ギリシャ|
|HK|香港|
|HU|ハンガリー|
|ID|インドネシア|
|IE|アイルランド|
|IL|イスラエル|
|IN|インド|
|IR|イラン|
|IT|イタリア|
|JP|日本|
|KR|韓国|
|LV|ラトビア|
|MA|モロッコ|
|MX|メキシコ|
|MY|マレーシア|
|NG|ナイジェリア|
|NL|オランダ|
|NO|ノルウェー|
|NZ|ニュージーランド|
|PE|ペルー|
|PH|フィリピン|
|PK|パキスタン|
|PL|ポーランド|
|PT|ポルトガル|
|RO|ルーマニア|
|RS|セルビア|
|RU|ロシア連邦|
|SA|サウジアラビア|
|SE|スウェーデン|
|SG|シンガポール|
|SI|スロベニア|
|SK|スロバキア|
|TH|タイ|
|TR|トルコ|
|TW|台湾|
|UA|ウクライナ|
|US|アメリカ|
|VE|ベネズエラ|
|VN|ベトナム|
|ZA|南アフリカ|

#### HparamTuningObjective
|定義値|内容|
|---|---|
|HPARAM_TUNING_OBJECTIVE_UNSPECIFIED|未指定の評価指標|
|MEAN_ABSOLUTE_ERROR|平均絶対誤差|
|MEAN_SQUARED_ERROR|平均二乗誤差|
|MEAN_SQUARED_LOG_ERROR|平均二乗対数誤差|
|MEDIAN_ABSOLUTE_ERROR|平均絶対誤差|
|R_SQUARED|R^2スコア|
|EXPLAINED_VARIANCE|差異|
|PRECISION|実際のラベルが正である実際の正の予測の割合の精度|
|RECALL|陽性予測が与えられた実際の陽性ラベルの割合の再現率|
|ACCURACY|正しいラベルが与えられた場合の予測の割合の精度|
|F1_SCORE|F1スコアは再現率と適合率の平|
|LOG_LOSS|対数損失|
|ROC_AUC|ROC曲線の下の領域|
|DAVIES_BOULDIN_INDEX|デイビス・ボールディン指数|
|MEAN_AVERAGE_PRECISION|平均平均精度|
|NORMALIZED_DISCOUNTED_CUMULATIVE_GAIN|正規化された割引累積ゲイン|
|AVERAGE_RANK|平均ランク|

#### EncodingMethod
|定義値|内容|
|---|---|
|ENCODING_METHOD_UNSPECIFIED|未使用|
|ONE_HOT_ENCODING|ワンホットエンコーディング|
|LABEL_ENCODING|ラベルエンコーディング|
|DUMMY_ENCODING|ダミーエンコーディング|

#### PcaSolver
|定義値|内容|
|---|---|
|UNSPECIFIED|デフォルト値|
|FULL|完全自己分解|
|RANDOMIZED|ランダム化されたSVD|
|AUTO|自動|

#### ModelRegistry
|定義値|内容|
|---|---|
|MODEL_REGISTRY_UNSPECIFIED|デフォルト値|
|VERTEX_AI|頂点AI|

#### SeasonalPeriodType
|定義値|内容|
|---|---|
|SEASONAL_PERIOD_TYPE_UNSPECIFIED|季節限定|
|NO_SEASONALITY|季節性なし|
|DAILY|毎日、24|時間|
|WEEKLY|毎週の期間、7|日間|
|MONTHLY|毎月、30日または不定期|
|QUARTERLY|四半期、90日、または不定期|
|YEARLY|年間、365日、または不定期|

#### TrialStatus
|定義値|内容|
|---|---|
|TRIAL_STATUS_UNSPECIFIED|デフォルト値|
|NOT_STARTED|予定されていますが、開始されていない|
|RUNNING|走行状態|
|SUCCEEDED|裁判は成功した|
|FAILED|裁判は失敗した|
|INFEASIBLE|パラメータが無効なため、トライアルは実行できない|
|STOPPED_EARLY|有望ではないため、治験は早期に中止|

#### RemoteServiceType
|定義値|内容|
|---|---|
|REMOTE_SERVICE_TYPE_UNSPECIFIED|未使用|
|CLOUD_AI_TRANSLATE_V3|V3クラウドAI翻訳API|
|CLOUD_AI_VISION_V1|V1CloudAIVisionAPI|
|CLOUD_AI_NATURAL_LANGUAGE_V1|V1クラウドAI自然言語API|

## 2. モデルを取得
指定したMLモデルのメタデータを取得します。

### 2.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インスタンスを取得)](https://qiita.com/doran/items/8b7ba29672527426e88d#32-bigqueryインスタンスを取得)
でスコープを指定してください。

### 2.2. 実行
モデルIDは、[ModelReferenceのgetModelId()](#modelreference)で取得できる値を使用します。

```java
public static void main(String[] args) throws Exception{
    Bigquery bigquery = getBigquery();
    Bigquery.Models models = bigquery.models();
    
    Bigquery.Models.Get get = models.get("プロジェクトID","データセットID","モデルID");
    
    Model res = get.execute();
    System.out.println(res);
}
```
#### 2.2.1. HTTPリクエスト
GET:　https:\//bigquery.googleapis.com/bigquery/v2/projects/{プロジェクトID}/datasets/{データセットID}/models/{モデルID}
が実行されます。

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

### 2.3. レスポンスの内容
#### Model
[1.3. レスポンスの内容(Model)](#model)と同じです。

<br>
<br>
おしまい。。