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 Storecreate_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 APIscreate_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 KomparatorJoinComparatorEnum
darstellt, der verwendet wird, wenn das Ziel-Feature in der Basis-Feature-Gruppe und das Feature in der Ziel-Feature-Gruppe zusammengeführt werden. DieseJoinComparatorEnum
Werte können standardmäßigGREATER_THAN
,GREATER_THAN_OR_EQUAL_TO
,LESS_THAN
,LESS_THAN_OR_EQUAL_TO
,NOT_EQUAL_TO
oderEQUALS
sein. -
join_type
– OptionalJoinTypeEnum
, gibt die Art der Verbindung zwischen der Basis- und der Ziel-Feature-Gruppe an. DieseJoinTypeEnum
Werte können standardmäßigLEFT_JOIN
,RIGHT_JOIN
,FULL_JOIN
,CROSS_JOIN
oderINNER_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 beispielsweisedatetime(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