Delen via


Een gegevensprofiel maken met behulp van de API

Op deze pagina wordt beschreven hoe u een gegevensprofiel maakt in Databricks met behulp van de Databricks SDK en de parameters beschrijft die worden gebruikt in API-aanroepen. U kunt ook een gegevensprofiel maken en beheren met behulp van de REST API.

Zie de naslaginformatie over de SDK voor gegevensprofilering en de REST API-verwijzing.

U kunt een profiel maken op elke beheerde of externe Delta-tabel die is geregistreerd in Unity Catalog. Er kan slechts één profiel worden gemaakt in een Unity Catalog-metastore voor elke tabel.

Opmerking

Zie quality_monitorsafgeschafte quality_monitors API.

Requirements

Als u de meest recente versie van de API wilt gebruiken, gebruikt u de volgende opdracht aan het begin van uw notebook om de Python-client te installeren:

%pip install "databricks-sdk>=0.68.0"

Zie Verificatie om te verifiëren voor het gebruik van de Databricks SDK in uw omgeving.

Profieltypen

Wanneer u een profiel maakt, selecteert u een van de volgende profieltypen: TimeSeries, InferenceLogof Snapshot. In deze sectie wordt elke optie kort beschreven. Zie de naslaginformatie over de SDK voor gegevensprofilering of de REST API-verwijzing voor meer informatie.

Opmerking

  • Wanneer u voor het eerst een tijdreeks- of deductieprofiel maakt, analyseert Databricks alleen gegevens van de 30 dagen voorafgaand aan het maken ervan. Nadat het profiel is gemaakt, worden alle nieuwe gegevens verwerkt.
  • Profielen die zijn gedefinieerd voor gerealiseerde weergaven bieden geen ondersteuning voor incrementele verwerking.

Aanbeveling

Voor TimeSeries en Inference profielen is het een best practice om change data feed (CDF) in te schakelen in uw tabel. Wanneer CDF is ingeschakeld, worden alleen nieuw toegevoegde gegevens verwerkt, in plaats van dat de hele tabel elke vernieuwing opnieuw wordt verwerkt. Dit maakt de uitvoering efficiënter en verlaagt de kosten wanneer u schaalt in veel tabellen.

TimeSeries profiel

Een TimeSeries profiel vergelijkt gegevensdistributies in tijdvensters. Voor een TimeSeries profiel moet u het volgende opgeven:

  • Een tijdstempelkolom (timestamp_column). Het gegevenstype van de tijdstempelkolom moet ofwel TIMESTAMP een type zijn dat kan worden geconverteerd naar tijdstempels met behulp van de to_timestampfunctie PySpark.
  • De verzameling granularities waarover de metrische gegevens berekend moeten worden. De volgende granulariteiten zijn beschikbaar:
    • AGGREGATIE_GROOTHEID_5_MINUTEN
    • AGGREGATION_GRANULARITY_30_MINUTES
    • AGGREGATION_GRANULARITY_1_HOUR
    • AGGREGATIE_GEURAFINITEIT_1_DAG
    • AGGREGATIE_GRANULARITEIT_1_WEEK
    • AGGREGATIE_GRENSSPECIFICATIE_2_WEKEN
    • AGGREGATIE_GRANULARITEIT_3_WEKEN
    • AGGREGATIE_GRANULARITEIT_4_WEKEN
    • AGGREGATIE_GRANULARITEIT_1_MAAND
    • AGGREGATION_GRANULARITY_1_YEAR
from databricks.sdk import WorkspaceClient
from databricks.sdk.service.dataquality import Monitor, DataProfilingConfig, TimeSeriesConfig, AggregationGranularity, DataProfilingStatus, RefreshState, Refresh

w = WorkspaceClient()

schema = w.schemas.get(full_name=f"{catalog}.{schema}")
table = w.tables.get(full_name=f"{catalog}.{schema}.{table_name}")

config = DataProfilingConfig(
 output_schema_id=schema.schema_id,
 assets_dir=f"/Workspace/Users/{username}/databricks_quality_monitoring/{TABLE_NAME}",
 time_series=TimeSeriesConfig(
    timestamp_column="ts",
    granularities=[AggregationGranularity.AGGREGATION_GRANULARITY_1_DAY]),
 slicing_exprs=["type='Red'"]
)

info = w.data_quality.create_monitor(
   monitor=Monitor(
     object_type="table",     # object_type is always "table" for data profiling
     object_id=table.table_id,
     data_profiling_config=config,
   ),
)

InferenceLog profiel

Een InferenceLog profiel is vergelijkbaar met een TimeSeries profiel, maar bevat ook metrische gegevens over modelkwaliteit. InferenceLog profielen gebruiken de volgende parameters:

Kenmerk Beschrijving
problem_type MonitorInferenceLogProblemType.PROBLEM_TYPE_CLASSIFICATION of MonitorInferenceLogProblemType.PROBLEM_TYPE_REGRESSION
prediction_column Kolom met de voorspelde waarden van het model.
timestamp_column Kolom met de tijdstempel van de deductieaanvraag.
model_id_column Kolom met de id van het model dat wordt gebruikt voor voorspelling.
granularities Bepaalt hoe de gegevens in vensters in de tijd moeten worden gepartitioneren. Zie TimeSeries het profiel voor beschikbare waarden.
label_column (Optioneel) Kolom met de grondwaar voor modelvoorspellingen.
from databricks.sdk import WorkspaceClient
from databricks.sdk.service.dataquality import Monitor, DataProfilingConfig, InferenceLogConfig, InferenceProblemType, AggregationGranularity, DataProfilingStatus, RefreshState, Refresh

w = WorkspaceClient()

schema = w.schemas.get(full_name=f"{catalog}.{schema}")
table = w.tables.get(full_name=f"{catalog}.{schema}.{table_name}")

config = DataProfilingConfig(
 output_schema_id=schema.schema_id,
 assets_dir=f"/Workspace/Users/{username}/databricks_quality_monitoring/{TABLE_NAME}",
 inference_log=InferenceLogConfig(
    problem_type=InferenceProblemType.INFERENCE_PROBLEM_TYPE_CLASSIFICATION,
    prediction_column="preds",
    model_id_column="model_ver",
    label_column="label", # optional
    timestamp_column="ts",
    granularities=[AggregationGranularity.AGGREGATION_GRANULARITY_1_DAY])
)

info = w.data_quality.create_monitor(
   monitor=Monitor(
     object_type="table",
     object_id=table.table_id,
     data_profiling_config=config,
   ),
)

Voor InferenceLog profielen worden segmenten automatisch gemaakt op basis van de afzonderlijke waarden van model_id_col.

Snapshot profiel

In tegenstelling tot TimeSeries heeft een Snapshot profiel hoe de volledige inhoud van de tabel in de loop van de tijd verandert. Metrische gegevens worden berekend over alle gegevens in de tabel en geven de tabelstatus weer wanneer het profiel wordt vernieuwd.

Opmerking

De maximale tabelgrootte voor een momentopnameprofiel is 4 TB. Gebruik in plaats daarvan tijdreeksprofielen voor grotere tabellen.

from databricks.sdk import WorkspaceClient
from databricks.sdk.service.dataquality import Monitor, DataProfilingConfig, SnapshotConfig, DataProfilingStatus, RefreshState, Refresh

w = WorkspaceClient()

schema = w.schemas.get(full_name=f"{catalog}.{schema}")
table = w.tables.get(full_name=f"{catalog}.{schema}.{table_name}")
table_id = table.table_id
table_object_type = "table"

config = DataProfilingConfig(
 output_schema_id=schema.schema_id,
 assets_dir=f"/Workspace/Users/{username}/databricks_quality_monitoring/{TABLE_NAME}",
 snapshot=SnapshotConfig(),
 slicing_exprs=["type='Red'"]
)

Resultaten vernieuwen en weergeven

Als u de vernieuwingsgeschiedenis wilt bekijken, moet u de Databricks-werkruimte gebruiken waaruit gegevensprofilering is ingeschakeld.

Als u tabellen met metrische gegevens wilt vernieuwen, gebruikt u create_refresh. Voorbeeld:

from databricks.sdk import WorkspaceClient

w = WorkspaceClient()
run_info = w.data_quality.create_refresh(
  object_type=table_object_type, object_id=table_id, refresh=Refresh(
   object_type=table_object_type,
   object_id=table_id,
 )
)

Wanneer u create_refresh oproept vanuit een notebook, worden de metrische tabellen gemaakt of bijgewerkt. Deze berekening wordt uitgevoerd op serverloze berekeningen, niet op het cluster waaraan het notebook is gekoppeld. U kunt opdrachten blijven uitvoeren in het notebook terwijl de statistieken worden bijgewerkt.

Zie voor informatie over de statistieken die zijn opgeslagen in metrische tabellen Metrische tabellen bewaken. Metrische tabellen zijn Unity Catalog-tabellen. U kunt query's uitvoeren in notitieblokken of in de SQL-queryverkenner en deze weergeven in Catalog Explorer.

Als u de geschiedenis wilt weergeven van alle vernieuwingen die zijn gekoppeld aan een profiel, gebruikt u list_refreshes.

from databricks.sdk import WorkspaceClient

w = WorkspaceClient()
it = w.data_quality.list_refresh(object_type=table_object_type, object_id=table_id)

Als u de status van een specifieke taak wilt ophalen die in de wachtrij staat, wordt uitgevoerd of is voltooid, gebruikt u get_refresh.

from databricks.sdk import WorkspaceClient

w = WorkspaceClient()
it = w.data_quality.list_refresh(object_type=table_object_type, object_id=table_id)

run_info = next(it, None)
while run_info.state in (RefreshState.MONITOR_REFRESH_STATE_PENDING, RefreshState.MONITOR_REFRESH_STATE_RUNNING):
  run_info = w.data_quality.get_refresh(object_type=table_object_type, object_id=table_id, refresh_id=run_info.refresh_id)
  time.sleep(30)

Profielinstellingen weergeven

U kunt profielinstellingen controleren met behulp van de API get_monitor.

from databricks.sdk import WorkspaceClient

w = WorkspaceClient()
table = w.tables.get(full_name=f"{catalog}.{schema}.{table_name}")
w.data_quality.get_monitor(object_type="table", object_id=table.table_id)

Schema

Als u een profiel wilt instellen dat op een geplande basis moet worden uitgevoerd, gebruikt u de schedule parameter van create_monitor:

from databricks.sdk import WorkspaceClient
from databricks.sdk.service.catalog import MonitorTimeSeries, MonitorCronSchedule

w = WorkspaceClient()
schema = w.schemas.get(full_name=f"{catalog}.{schema}")
table = w.tables.get(full_name=f"{catalog}.{schema}.{table_name}")

config = DataProfilingConfig(
 output_schema_id=schema.schema_id,
 snapshot=SnapshotConfig(),
 schedule=CronSchedule(
        quartz_cron_expression="0 0 12 * * ?", # schedules a refresh every day at 12 noon
        timezone_id="PST",
 )
)

info = w.data_quality.create_monitor(
   monitor=Monitor(
     object_type="table",
     object_id=table.table_id,
     data_profiling_config=config,
   ),
)

Zie cron-expressies voor meer informatie.

Meldingen

Als u meldingen voor een profiel wilt instellen, gebruikt u de notifications parameter van create_monitor:

from databricks.sdk import WorkspaceClient
from databricks.sdk.service.dataquality import Monitor, DataProfilingConfig, SnapshotConfig, NotificationSettings, NotificationDestination

w = WorkspaceClient()
schema = w.schemas.get(full_name=f"{catalog}.{schema}")
table = w.tables.get(full_name=f"{catalog}.{schema}.{table_name}")

config = DataProfilingConfig(
 output_schema_id=schema.schema_id,
 snapshot=SnapshotConfig(),
 notification_settings=NotificationSettings(
        # Notify the given email when a monitoring refresh fails or times out.
        on_failure=NotificationDestination(
            email_addresses=["your_email@domain.com"]
        )
 )
)

info = w.data_quality.create_monitor(
   monitor=Monitor(
     object_type="table",
     object_id=table.table_id,
     data_profiling_config=config,
   ),
)

Er worden maximaal 5 e-mailadressen ondersteund per gebeurtenistype (bijvoorbeeld 'on_failure').

Toegang tot metrische tabellen beheren

De metrische tabellen en het dashboard die door een profiel zijn gemaakt, zijn eigendom van de gebruiker die het profiel heeft gemaakt. U kunt Unity Catalog-bevoegdheden gebruiken om de toegang tot metrische tabellen te beheren. Als u dashboards in een werkruimte wilt delen, gebruikt u de knop Delen in de rechterbovenhoek van het dashboard.

Een profiel verwijderen

Een profiel verwijderen:

from databricks.sdk import WorkspaceClient

w = WorkspaceClient()
table = w.tables.get(full_name=f"{catalog}.{schema}.{table_name}")
w.data_quality.delete_monitor(object_type="table", object_id=table.table_id)

Met deze opdracht worden de profieltabellen en het dashboard dat door het profiel is gemaakt, niet verwijderd. U moet deze assets in een afzonderlijke stap verwijderen of u kunt ze opslaan op een andere locatie.

Voorbeeldnotitieblokken

In de volgende voorbeeldnotitieblokken ziet u hoe u een profiel maakt, het profiel vernieuwt en de metrische tabellen bekijkt die worden gemaakt.

Notebook-voorbeeld: Tijdserie-profiel

In dit notebook ziet u hoe u een TimeSeries typeprofiel maakt.

Voorbeeldnotitieboek voor TimeSeries-profiel

Notebook krijgen

Notebook-voorbeeld: Inferentieprofiel (regressie)

In dit notebook ziet u hoe u een InferenceLog typeprofiel maakt voor een regressieprobleem.

Voorbeelddocument voor regressie van inferentieprofiel

Notebook krijgen

Noteboekvoorbeeld: Inferenceprofiel (classificatie)

In dit notebook ziet u hoe u een InferenceLog typeprofiel maakt voor een classificatieprobleem.

Voorbeeldnotebook voor classificatie van afleidingsprofiel

Notebook krijgen

Voorbeeld van notitieblok: Momentopnameprofiel

In dit notebook ziet u hoe u een Snapshot typeprofiel maakt.

Voorbeeldnotitieblok van een momentopnameprofiel

Notebook krijgen