Erstellen Sie einen Datensatz aus Ihren Feature-Gruppen - Amazon SageMaker

Die vorliegende Übersetzung wurde maschinell erstellt. Im Falle eines Konflikts oder eines Widerspruchs zwischen dieser übersetzten Fassung und der englischen Fassung (einschließlich infolge von Verzögerungen bei der Übersetzung) ist die englische Fassung maßgeblich.

Erstellen Sie einen Datensatz aus Ihren Feature-Gruppen

Nachdem eine Feature-Store-Feature-Gruppe in einem Offline-Speicher erstellt wurde, können Sie wählen, ob Sie die folgenden Methoden verwenden möchten, um Ihre Daten abzurufen:

  • Verwenden von Amazon SageMaker Python SDK

  • SQLAbfragen in Amazon Athena ausführen

Wichtig

Für Feature Store müssen Daten in einem AWS Glue Datenkatalog registriert sein. Standardmäßig erstellt Feature Store automatisch einen AWS Glue Datenkatalog, wenn Sie eine Feature-Gruppe erstellen.

Nachdem Sie Feature-Gruppen für Ihren Offline-Store erstellt und sie mit Daten gefüllt haben, können Sie ein Dataset erstellen, indem Sie Abfragen ausführen oder die verwenden, SDK um im Offline-Store gespeicherte Daten aus verschiedenen Feature-Gruppen zu verbinden. Sie können die Feature-Gruppen auch zu einem einzelnen Pandas-Datenframe verbinden. Sie können Amazon Athena verwenden, um SQL Abfragen zu schreiben und auszuführen.

Anmerkung

Um sicherzustellen, dass Ihre Daten auf dem neuesten Stand sind, können Sie einen AWS Glue Crawler einrichten, der nach einem Zeitplan ausgeführt wird.

Um einen AWS Glue Crawler einzurichten, geben Sie eine IAM Rolle an, die der Crawler für den Zugriff auf die Amazon S3 S3-Buckets des Offline-Shops verwendet. Weitere Informationen finden Sie unter Rolle erstellen. IAM

Weitere Informationen zur Verwendung von AWS Glue und Athena zum Erstellen eines Trainingsdatensatzes für Modelltraining und Inferenz finden Sie unter. Verwenden Sie Feature Store mit SDK für Python (Boto3)

Verwenden von Amazon SageMaker Python SDK zum Abrufen Ihrer Daten aus Ihren Feature-Gruppen

Sie können den Feature Store verwendenAPIs, um einen Datensatz aus Ihren Feature-Gruppen zu erstellen. Datenwissenschaftler erstellen ML-Datensätze für das Training, indem sie ML-Feature-Daten aus einer oder mehreren Feature-Gruppen im Offline-Speicher abrufen. Verwenden Sie die create_dataset()-Funktion, um den Datensatz zu erstellen. Sie können den verwendenSDK, um Folgendes zu tun:

  • Erstellen Sie einen Datensatz aus mehreren Feature-Gruppen.

  • Erstellen Sie einen Datensatz aus den Feature-Gruppen und einem Pandas-Datenrahmen.

Standardmäßig enthält Feature Store keine Datensätze, die Sie aus dem Datensatz gelöscht haben. Es enthält auch keine doppelten Datensätze. Ein doppelter Datensatz hat die Datensatz-ID und den Zeitstempelwert in der Spalte Ereigniszeit.

Bevor Sie den verwendenSDK, um einen Datensatz zu erstellen, müssen Sie eine SageMaker Sitzung starten. Verwenden Sie den folgenden Code, um die Sitzung zu starten.

import boto3 from sagemaker.session import Session from sagemaker.feature_store.feature_store import FeatureStore region = boto3.Session().region_name boto_session = boto3.Session(region_name=region) sagemaker_client = boto_session.client( service_name="sagemaker", region_name=region ) featurestore_runtime = boto_session.client( service_name="sagemaker-featurestore-runtime",region_name=region ) feature_store_session = Session( boto_session=boto_session, sagemaker_client=sagemaker_client, sagemaker_featurestore_runtime_client=featurestore_runtime, ) feature_store = FeatureStore(feature_store_session)

Der folgende Code zeigt ein Beispiel für die Erstellung eines Datensatzes aus mehreren Feature-Gruppen. Der folgende Codeausschnitt verwendet das Beispiel „Feature-Gruppen“base_fg_name", "first_fg_name„, und“second_fg_name„, die in Ihrem Feature Store möglicherweise nicht vorhanden sind oder dasselbe Schema haben. Es wird empfohlen, diese Feature-Gruppen durch Feature-Gruppen zu ersetzen, die in Ihrem Feature Store vorhanden sind. Informationen zum Erstellen einer benutzerdefinierten DB-Optionsgruppe finden Sie unter Schritt 3: Erstellen von Feature-Gruppen.

from sagemaker.feature_store.feature_group import FeatureGroup s3_bucket_name = "offline-store-sdk-test" base_fg_name = "base_fg_name" base_fg = FeatureGroup(name=base_fg_name, sagemaker_session=feature_store_session) first_fg_name = "first_fg_name" first_fg = FeatureGroup(name=first_fg_name, sagemaker_session=feature_store_session) second_fg_name = "second_fg_name" second_fg = FeatureGroup(name=second_fg_name, sagemaker_session=feature_store_session) feature_store = FeatureStore(feature_store_session) builder = feature_store.create_dataset( base=base_fg, output_path=f"s3://{amzn-s3-demo-bucket1}", ).with_feature_group(first_fg ).with_feature_group(second_fg, "base_id", ["base_feature_1"])

Der folgende Code zeigt ein Beispiel für die Erstellung eines Datensatzes aus mehreren Feature-Gruppen und einem Pandas-Datenrahmen.

base_data = [[1, 187512346.0, 123, 128], [2, 187512347.0, 168, 258], [3, 187512348.0, 125, 184], [1, 187512349.0, 195, 206]] base_data_df = pd.DataFrame( base_data, columns=["base_id", "base_time", "base_feature_1", "base_feature_2"] ) builder = feature_store.create_dataset( base=base_data_df, event_time_identifier_feature_name='base_time', record_identifier_feature_name='base_id', output_path=f"s3://{s3_bucket_name}" ).with_feature_group(first_fg ).with_feature_group(second_fg, "base_id", ["base_feature_1"])

Der Feature Store APIs stellt Ihnen Hilfsmethoden für die create_dataset Funktion zur Verfügung. Sie können den für Folgendes verwenden:

  • Erstellen Sie einen Datensatz aus mehreren Feature-Gruppen.

  • Erstellen Sie einen Datensatz aus mehreren Feature-Gruppen und einem Pandas-Datenrahmen.

  • Erstellen Sie einen Datensatz aus einer einzelnen Feature-Gruppe und einem Pandas-Datenframe.

  • Erstellen Sie einen Datensatz mithilfe einer punktgenauen Verknüpfung, bei der Datensätze in der verknüpften Feature-Gruppe sequenziell aufeinanderfolgen.

  • Erstellen Sie einen Datensatz mit den duplizierten Datensätzen, anstatt dem Standardverhalten der Funktion zu folgen.

  • Erstellen Sie einen Datensatz mit den gelöschten Datensätzen, anstatt dem Standardverhalten der Funktion zu folgen.

  • Erstellen Sie einen Datensatz für die von Ihnen angegebenen Zeiträume.

  • Speichern Sie den Datensatz als CSV Datei.

  • Speichern Sie den Datensatz als Pandas-Datenrahmen.

Die Basis-Feature-Gruppe ist ein wichtiges Konzept für Verknüpfungen. Die Basis-Feature-Gruppe ist die Feature-Gruppe, mit der andere Feature-Gruppen oder der Pandas-Datenrahmen verknüpft sind. Für jeden Datensatz

Sie können der create_dataset Funktion die folgenden optionalen Methoden hinzufügen, um zu konfigurieren, wie Sie den Datensatz erstellen:

  • with_feature_group – Führt unter Verwendung der Datensatz-ID und des Ziel-Feature-Namens in der Basis-Feature-Gruppe eine innere Verknüpfung zwischen der Basis-Feature-Gruppe und einer anderen Feature-Gruppe durch. Im Folgenden finden Sie Informationen zu den von Ihnen angegebenen Parametern:

    • feature_group – Die Feature-Gruppe, der Sie beitreten.

    • target_feature_name_in_base – Der Name des Features in der Basis-Feature-Gruppe, das Sie als Schlüssel für den Join verwenden. Die Datensatz-ID in den anderen Feature-Gruppen sind die anderen Schlüssel, die Feature Store bei der Verknüpfung verwendet.

    • included_feature_names – Eine Liste von Zeichenfolgen, die die Feature-Namen der Basis-Feature-Gruppe darstellen. Sie können das Feld verwenden, um die Features anzugeben, die Sie in den Datensatz aufnehmen möchten.

    • feature_name_in_target – Optionale Zeichenfolge, die das Feature in der Ziel-Feature-Gruppe darstellt, das mit dem Ziel-Feature in der Basis-Feature-Gruppe verglichen wird.

    • join_comparator – Optional, die den Komparator JoinComparatorEnum darstellt, der verwendet wird, wenn das Ziel-Feature in der Basis-Feature-Gruppe und das Feature in der Ziel-Feature-Gruppe zusammengeführt werden. Diese JoinComparatorEnum Werte können standardmäßig GREATER_THAN, GREATER_THAN_OR_EQUAL_TO, LESS_THAN, LESS_THAN_OR_EQUAL_TO, NOT_EQUAL_TO oder EQUALS sein.

    • join_type – Optional JoinTypeEnum, gibt die Art der Verbindung zwischen der Basis- und der Ziel-Feature-Gruppe an. Diese JoinTypeEnum Werte können standardmäßig LEFT_JOIN, RIGHT_JOIN, FULL_JOIN, CROSS_JOIN oder INNER_JOIN sein.

  • with_event_time_range – Erstellt einen Datensatz unter Verwendung des von Ihnen angegebenen Ereigniszeitbereichs.

  • as_of – Erstellt einen Datensatz bis zu einem von Ihnen angegebenen Zeitstempel. Wenn Sie beispielsweise datetime(2021, 11, 28, 23, 55, 59, 342380) als Wert angeben, wird ein Datensatz bis zum 28. November 2021 erstellt.

  • point_time_accurate_join – Erstellt einen Datensatz, bei dem alle Event-Zeitwerte der Basis-Feature-Gruppe kleiner sind als alle Event-Zeitwerte der Feature-Gruppe oder des Pandas-Datenframes, dem Sie beitreten.

  • include_duplicated_records – Behält doppelte Werte in den Feature-Gruppen bei.

  • include_deleted_records – Behält gelöschte Werte in den Feature-Gruppen bei.

  • with_number_of_recent_records_by_record_identifier – Eine Ganzzahl, die Sie angeben, um zu bestimmen, wie viele der neuesten Datensätze im Datensatz erscheinen.

  • with_number_of_records_by_record_identifier – Eine Ganzzahl, die angibt, wie viele Datensätze in der Datenmenge vorkommen.

Nachdem Sie den Datensatz konfiguriert haben, können Sie die Ausgabe mithilfe einer der folgenden Methoden angeben:

  • to_csv_file— Speichert den Datensatz als CSV Datei.

  • to_dataframe – Speichert den Datensatz als Pandas-Datenrahmen.

Sie können Daten abrufen, die nach einem bestimmten Zeitraum stammen. Der folgende Code ruft Daten nach einem Zeitstempel ab.

fg1 = FeatureGroup("example-feature-group-1") feature_store.create_dataset( base=fg1, output_path="s3://example-S3-path" ).with_number_of_records_from_query_results(5).to_csv_file()

Sie können auch Daten aus einem bestimmten Zeitraum abrufen. Sie können den folgenden Code verwenden, um Daten für einen bestimmten Zeitraum abzurufen:

fg1 = FeatureGroup("fg1") feature_store.create_dataset( base=fg1, output_path="example-S3-path" ).with_event_time_range( datetime(2021, 11, 28, 23, 55, 59, 342380), datetime(2020, 11, 28, 23, 55, 59, 342380) ).to_csv_file() #example time range specified in datetime functions

Möglicherweise möchten Sie mehrere Feature-Gruppen zu einem Pandas-Datenframe verbinden, wobei die Ereigniszeitwerte der Feature-Gruppe nicht später als die Ereigniszeit des Datenrahmens auftreten. Verwenden Sie den folgenden Code als Vorlage, um die Verknüpfung durchzuführen.

fg1 = FeatureGroup("fg1") fg2 = FeatureGroup("fg2") events = [['2020-02-01T08:30:00Z', 6, 1], ['2020-02-02T10:15:30Z', 5, 2], ['2020-02-03T13:20:59Z', 1, 3], ['2021-01-01T00:00:00Z', 1, 4]] df = pd.DataFrame(events, columns=['event_time', 'customer-id', 'title-id']) feature_store.create_dataset( base=df, event_time_identifier_feature_name='event_time', record_identifier_feature_name='customer_id', output_path="s3://example-S3-path" ).with_feature_group(fg1, "customer-id" ).with_feature_group(fg2, "title-id" ).point_in_time_accurate_join( ).to_csv_file()

Sie können auch Daten abrufen, die nach einem bestimmten Zeitraum stammen. Der folgende Code ruft Daten nach der durch den Zeitstempel in der as_of Methode angegebenen Zeit ab.

fg1 = FeatureGroup("fg1") feature_store.create_dataset( base=fg1, output_path="s3://example-s3-file-path" ).as_of(datetime(2021, 11, 28, 23, 55, 59, 342380) ).to_csv_file() # example datetime values

Beispiele für Amazon-Athena-Abfragen

Sie können Abfragen in Amazon Athena schreiben, um einen Datensatz aus Ihren Feature-Gruppen zu erstellen. Sie können auch Abfragen schreiben, die einen Datensatz aus Feature-Gruppen und einem einzelnen Pandas-Datenframe erstellen.

Interaktive Erkundung

Diese Abfrage wählt die ersten 1000 Datensätze aus. 

SELECT * FROM <FeatureGroup.DataCatalogConfig.DatabaseName>.<FeatureGroup.DataCatalogConfig.TableName> LIMIT 1000

Neuester Snapshot ohne Duplikate

Diese Abfrage wählt die neuesten nicht doppelten Datensätze aus.

SELECT * FROM     (SELECT *,          row_number()         OVER (PARTITION BY <RecordIdentiferFeatureName>     ORDER BY  <EventTimeFeatureName> desc, Api_Invocation_Time DESC, write_time DESC) AS row_num     FROM <FeatureGroup.DataCatalogConfig.DatabaseName>.<FeatureGroup.DataCatalogConfig.TableName>) WHERE row_num = 1;

Neuester Snapshot ohne Duplikate und gelöschte Datensätze im Offline-Speicher

Diese Abfrage filtert alle gelöschten Datensätze heraus und wählt nicht doppelte Datensätze aus dem Offline-Speicher aus. 

SELECT * FROM     (SELECT *,          row_number()         OVER (PARTITION BY <RecordIdentiferFeatureName>     ORDER BY  <EventTimeFeatureName> desc, Api_Invocation_Time DESC, write_time DESC) AS row_num     FROM <FeatureGroup.DataCatalogConfig.DatabaseName>.<FeatureGroup.DataCatalogConfig.TableName>) WHERE row_num = 1 and  NOT is_deleted;

Zeitreise ohne Duplikate und gelöschte Datensätze im Offline-Speicher

Diese Abfrage filtert alle gelöschten Datensätze heraus und wählt nicht doppelte Datensätze aus einem bestimmten Zeitpunkt aus.

SELECT * FROM     (SELECT *,          row_number()         OVER (PARTITION BY <RecordIdentiferFeatureName>     ORDER BY  <EventTimeFeatureName> desc, Api_Invocation_Time DESC, write_time DESC) AS row_num     FROM <FeatureGroup.DataCatalogConfig.DatabaseName>.<FeatureGroup.DataCatalogConfig.TableName>     where <EventTimeFeatureName> <= timestamp '<timestamp>')     -- replace timestamp '<timestamp>' with just <timestamp>  if EventTimeFeature is of type fractional WHERE row_num = 1 and NOT is_deleted