CREATE MODEL-Anweisung für reine Transformationsmodelle

In diesem Dokument wird die CREATE MODEL-Anweisung zum Erstellen von reinen Transformationsmodellen in BigQuery beschrieben. Reine Transformationsmodelle verwenden die TRANSFORM-Klausel, um Vorverarbeitungsfunktionen auf Eingabedaten anzuwenden und die vorverarbeiteten Daten zurückzugeben. Bei reinen Transformationsmodellen wird die Datenvorverarbeitung vom Modelltraining entkoppelt, sodass Sie eine Reihe von Datenvorverarbeitungsregeln einfacher erfassen und wiederverwenden können.

Sie können ein reines Transformationsmodell in Verbindung mit der Funktion ML.TRANSFORM verwenden, um anderen Modellen vorverarbeitete Daten bereitzustellen:

  • Sie können sie in der Abfrageanweisung verwenden, wenn Sie ein anderes Modell erstellen, um die transformierten Daten als Trainingsdaten für dieses Modell zu verwenden.
  • Sie können sie im Argument query statement der Funktion ML.PREDICT verwenden, um Daten für die Vorhersage bereitzustellen, die so verarbeitet werden, wie es das Zielmodell erwartet.

Für Batch-Feature-Transformationen ist die Verwendung von reinen Transformationsmodellen besser, da sie eine große Datenmenge in kurzer Zeit verarbeiten können. Für Onlinefeature-Transformationen ist es besser, den Vertex AI Feature Store zu verwenden, da er Antworten mit niedriger Latenz bietet.

Sie können auch ein reines Transformationsmodell mit der Funktion ML.FEATURE_INFO verwenden, um Informationen zu Featuretransformationen im Modell zurückzugeben.

Informationen zu den unterstützten SQL-Anweisungen und -Funktionen für die einzelnen Modelltypen finden Sie unter End-to-End-Nutzerpfad für jedes Modell.

CREATE MODEL-Syntax

{CREATE MODEL | CREATE MODEL IF NOT EXISTS | CREATE OR REPLACE MODEL} model_name
TRANSFORM (select_list)
OPTIONS(MODEL_TYPE = 'TRANSFORM_ONLY')
AS query_statement

CREATE MODEL

Erstellt und trainiert ein neues Modell im angegebenen Dataset. Wenn der Modellname vorhanden ist, gibt CREATE MODEL einen Fehler zurück.

CREATE MODEL IF NOT EXISTS

Erstellt und trainiert ein neues Modell nur, wenn das Modell nicht im angegebenen Dataset vorhanden ist.

CREATE OR REPLACE MODEL

Erstellt und trainiert ein Modell und ersetzt ein vorhandenes Modell mit demselben Namen im angegebenen Dataset.

model_name

Der Name des Modells, das Sie erstellen oder ersetzen. Der Modellname muss im Dataset eindeutig sein: Kein anderes Modell und keine andere Tabelle darf denselben Namen haben. Der Modellname muss denselben Benennungsregeln wie eine BigQuery-Tabelle folgen. Ein Modellname kann:

  • bis zu 1.024 Zeichen enthalten.
  • Buchstaben (groß- oder kleingeschrieben), Ziffern und Unterstriche enthalten.

model_name unterscheidet nicht zwischen Groß- und Kleinschreibung.

Wenn Sie kein Standardprojekt konfiguriert haben, müssen Sie die Projekt-ID dem Modellnamen im folgenden Format voranstellen, einschließlich der Graviszeichen:

`[PROJECT_ID].[DATASET].[MODEL]`

Beispielsweise `myproject.mydataset.mymodel`.

select_list

Sie können Spalten von query_statement bis zum Modelltraining ohne Transformation übergeben. Dazu können Sie entweder * oder * EXCEPT() verwenden oder die Spaltennamen direkt auflisten.

Nicht alle Spalten von query_statement müssen in der TRANSFORM-Klausel enthalten sein. Sie können in query_statement enthaltene Spalten löschen, indem Sie sie in der TRANSFORM-Klausel auslassen.

Sie können Eingaben von query_statement mithilfe von Ausdrücken in select_list umwandeln. select_list ist einer normalen SELECT-Anweisung ähnlich. select_list unterstützt die folgende Syntax:

  • *
  • * EXCEPT()
  • * REPLACE()
  • expression
  • expression.*

Folgende Elemente dürfen nicht in select_list vorkommen:

  • Aggregationsfunktionen.
  • Nicht-BigQuery-ML-Analysefunktionen. Weitere Informationen zu unterstützten Funktionen finden Sie unter Manuelle Vorverarbeitung von Features.
  • UDFs
  • Unterabfragen.
  • Anonyme Spalten. Beispiel: a + b as c ist zulässig, a + b jedoch nicht.

Die Ausgabespalten von select_list können einen beliebigen von BigQuery unterstützten Datentyp haben.

Falls vorhanden, müssen die folgenden Spalten in select_list ohne Transformation angezeigt werden:

  • label
  • data_split_col
  • kmeans_init_col
  • instance_weight_col

Wenn diese Spalten von query_statement zurückgegeben werden, müssen Sie sie in select_list nach dem Spaltennamen außerhalb eines Ausdrucks oder mit * referenzieren. Mit diesen Spalten können keine Aliasse verwendet werden.

MODEL_TYPE

Syntax

MODEL_TYPE = 'TRANSFORM_ONLY'

Beschreibung

Gibt den Modelltyp an. Diese Option ist erforderlich.

query_statement

Die GoogleSQL-Abfrage, die die vorzuverarbeitenden Daten enthält. Die Statistiken, die bei der Transformation dieser Daten berechnet werden, werden auf die Eingabedaten aller Funktionen angewendet, mit denen Sie das Modell verwenden.

Beispiele

Die folgenden Beispiele zeigen, wie reine Transformationsmodelle erstellt und verwendet werden.

Beispiel 1

Im folgenden Beispiel wird ein Modell namens mymodel in mydataset in Ihrem Standardprojekt erstellt. Das Modell wandelt mehrere Spalten aus der öffentlichen BigQuery-Tabelle bigquery-public-data.ml_datasets.penguins um:

CREATE MODEL `mydataset.transform_model`
  TRANSFORM(
    species,
    island,
    ML.MAX_ABS_SCALER(culmen_length_mm) OVER () AS culmen_length_mm,
    ML.MAX_ABS_SCALER(culmen_depth_mm) OVER () AS culmen_depth_mm,
    ML.MAX_ABS_SCALER(flipper_length_mm) OVER () AS flipper_length_mm,
    sex,
    body_mass_g)
  OPTIONS (
    model_type = 'transform_only')
AS (
  SELECT *
  FROM `bigquery-public-data.ml_datasets.penguins`
);

Beispiel 2

Im folgenden Beispiel wird ein Modell namens mymodel in mydataset in Ihrem Standardprojekt erstellt. Das Modell wird mit Daten trainiert, die mithilfe eines reinen Transformationsmodells vorverarbeitet werden:

CREATE MODEL `mydataset.mymodel`
OPTIONS
  ( MODEL_TYPE = 'LINEAR_REG',
    MAX_ITERATIONS = 5,
    INPUT_LABEL_COLS = ['body_mass_g'] ) AS
SELECT
  *
FROM
  ML.TRANSFORM(
    MODEL `mydataset.transform_model`,
    TABLE `bigquery-public-data.ml_datasets.penguins`)
WHERE body_mass_g IS NOT NULL;