Onlinetabellen gebruiken voor functies in realtime
Belangrijk
Onlinetabellen bevinden zich in openbare preview in de volgende regio's: westus
, eastus
, eastus2
, , northeurope
. westeurope
Zie Prijzen voor onlinetabellen voor informatie over prijzen.
Een onlinetabel is een alleen-lezen kopie van een Delta-tabel die is opgeslagen in rijgeoriënteerde indeling die is geoptimaliseerd voor onlinetoegang. Onlinetabellen zijn volledig serverloze tabellen die de doorvoercapaciteit automatisch schalen met de aanvraagbelasting en lage latentie en hoge doorvoertoegang bieden tot gegevens van elke schaal. Onlinetabellen zijn ontworpen om te werken met Mosaic AI Model Serving, Feature Serving en rag-toepassingen (retrieval-augmented generation) waar ze worden gebruikt voor snelle gegevenszoekacties.
U kunt ook onlinetabellen in query's gebruiken met Lakehouse Federation. Wanneer u Lakehouse Federation gebruikt, moet u een serverloze SQL-warehouse gebruiken voor toegang tot onlinetabellen. Alleen leesbewerkingen (SELECT
) worden ondersteund. Deze mogelijkheid is alleen bedoeld voor interactieve of foutopsporingsdoeleinden en mag niet worden gebruikt voor productie- of bedrijfskritieke workloads.
Het maken van een onlinetabel met behulp van de Databricks-gebruikersinterface is een proces in één stap. Selecteer de Delta-tabel in Catalog Explorer en selecteer Onlinetabel maken. U kunt ook de REST API of de Databricks SDK gebruiken om onlinetabellen te maken en te beheren. Zie Werken met onlinetabellen met behulp van API's.
Vereisten
- De werkruimte moet zijn ingeschakeld voor Unity Catalog. Volg de documentatie om een Unity Catalog-metastore te maken, deze in te schakelen in een werkruimte en een catalogus te maken.
- Een model moet zijn geregistreerd in Unity Catalog om toegang te krijgen tot onlinetabellen.
Werken met onlinetabellen met behulp van de gebruikersinterface
In deze sectie wordt beschreven hoe u onlinetabellen maakt en verwijdert en hoe u de status controleert en updates van onlinetabellen activeert.
Een onlinetabel maken met behulp van de gebruikersinterface
U maakt een onlinetabel met Behulp van Catalog Explorer. Zie Gebruikersmachtigingen voor meer informatie over vereiste machtigingen.
Als u een onlinetabel wilt maken, moet de delta-brontabel een primaire sleutel hebben. Als de Delta-tabel die u wilt gebruiken geen primaire sleutel heeft, maakt u er een door deze instructies te volgen: Gebruik een bestaande Delta-tabel in Unity Catalog als een functietabel.
Navigeer in Catalog Explorer naar de brontabel die u wilt synchroniseren met een onlinetabel. Selecteer onlinetabel in het menu Maken.
Gebruik de selectors in het dialoogvenster om de onlinetabel te configureren.
Naam: De naam die moet worden gebruikt voor de onlinetabel in Unity Catalog.
Primaire sleutel: kolommen in de brontabel die moeten worden gebruikt als primaire sleutel(en) in de onlinetabel.
Tijdreekssleutel: (optioneel). Kolom in de brontabel die moet worden gebruikt als tijdreekssleutel. Wanneer deze is opgegeven, bevat de onlinetabel alleen de rij met de meest recente tijdreekssleutelwaarde voor elke primaire sleutel.
Synchronisatiemodus: Hiermee geeft u op hoe de synchronisatiepijplijn de onlinetabel bijwerkt. Selecteer een momentopname, geactiveerd of doorlopend.
Beleid Beschrijving Snapshot De pijplijn wordt eenmaal uitgevoerd om een momentopname van de brontabel te maken en deze naar de onlinetabel te kopiëren. Volgende wijzigingen in de brontabel worden automatisch doorgevoerd in de onlinetabel door een nieuwe momentopname van de bron te maken en een nieuwe kopie te maken. De inhoud van de onlinetabel wordt atomisch bijgewerkt. Geactiveerd De pijplijn wordt eenmaal uitgevoerd om een eerste momentopname van de brontabel in de onlinetabel te maken. In tegenstelling tot de synchronisatiemodus voor momentopnamen, worden, wanneer de onlinetabel wordt vernieuwd, alleen wijzigingen doorgevoerd sinds de laatste pijplijnuitvoering wordt opgehaald en toegepast op de onlinetabel. De incrementele vernieuwing kan handmatig worden geactiveerd of automatisch worden geactiveerd volgens een schema. Continu De pijplijn wordt continu uitgevoerd. Volgende wijzigingen in de brontabel worden incrementeel toegepast op de onlinetabel in realtime streamingmodus. Handmatig vernieuwen is niet nodig.
Notitie
Als u de modus Geactiveerde of Continue synchronisatie wilt ondersteunen, moet voor de brontabel De gegevensfeed Wijzigen zijn ingeschakeld.
- Wanneer u klaar bent, klikt u op Bevestigen. De onlinetabelpagina wordt weergegeven.
- De nieuwe onlinetabel wordt gemaakt onder de catalogus, het schema en de naam die is opgegeven in het dialoogvenster voor maken. In Catalog Explorer wordt de onlinetabel aangegeven door .
Status ophalen en updates activeren met behulp van de gebruikersinterface
Als u de status van de onlinetabel wilt controleren, klikt u op de naam van de tabel in de catalogus om deze te openen. De onlinetabelpagina wordt weergegeven met het tabblad Overzicht geopend. In de sectie Gegevensopname ziet u de status van de meest recente update. Als u een update wilt activeren, klikt u op Nu synchroniseren. De sectie Gegevensopname bevat ook een koppeling naar de Delta Live Tables-pijplijn waarmee de tabel wordt bijgewerkt.
Periodieke updates plannen
Voor onlinetabellen met de synchronisatiemodus Momentopname of Geactiveerde synchronisatiemodus kunt u automatische periodieke updates plannen. Het updateschema wordt beheerd door de Delta Live Tables-pijplijn waarmee de tabel wordt bijgewerkt.
- Navigeer in Catalog Explorer naar de onlinetabel.
- Klik in de sectie Gegevensopname op de koppeling naar de pijplijn.
- Klik in de rechterbovenhoek op Planning en voeg een nieuw schema toe of werk bestaande schema's bij.
Een onlinetabel verwijderen met behulp van de gebruikersinterface
Selecteer Verwijderen in het menu van de onlinetabel.
Werken met onlinetabellen met behulp van API's
U kunt ook de Databricks SDK of de REST API gebruiken om onlinetabellen te maken en te beheren.
Raadpleeg de referentiedocumentatie voor de Databricks SDK voor Python of de REST API voor naslaginformatie.
Vereisten
Databricks SDK versie 0.20 of hoger.
Een onlinetabel maken met behulp van API's
Databricks SDK - Python
from pprint import pprint
from databricks.sdk import WorkspaceClient
from databricks.sdk.service.catalog import *
w = WorkspaceClient(host='https://xxx.databricks.com', token='xxx')
# Create an online table
spec = OnlineTableSpec(
primary_key_columns=["pk_col"],
source_table_full_name="main.default.source_table",
run_triggered=OnlineTableSpecTriggeredSchedulingPolicy.from_dict({'triggered': 'true'})
)
w.online_tables.create(name='main.default.my_online_table', spec=spec)
REST-API
curl --request POST "https://xxx.databricks.com/api/2.0/online-tables" \
--header "Authorization: Bearer xxx" \
--data '{
"name": "main.default.my_online_table",
"spec": {
"run_triggered": {},
"source_table_full_name": "main.default.source_table",
"primary_key_columns": ["a"]
}
}'
De onlinetabel wordt automatisch gesynchroniseerd nadat deze is gemaakt.
Status ophalen en vernieuwen activeren met behulp van API's
U kunt de status en de specificatie van de onlinetabel bekijken volgens het onderstaande voorbeeld. Als uw onlinetabel niet doorlopend is en u een handmatige vernieuwing van de gegevens wilt activeren, kunt u hiervoor de pijplijn-API gebruiken.
Gebruik de pijplijn-id die is gekoppeld aan de onlinetabel in de onlinetabelspecificatie en start een nieuwe update voor de pijplijn om de vernieuwing te activeren. Dit komt overeen met klikken op Synchroniseren in de gebruikersinterface van de onlinetabel in Catalog Explorer.
Databricks SDK - Python
pprint(w.online_tables.get('main.default.my_online_table'))
# Sample response
OnlineTable(name='main.default.my_online_table',
spec=OnlineTableSpec(perform_full_copy=None,
pipeline_id='some-pipeline-id',
primary_key_columns=['pk_col'],
run_continuously=None,
run_triggered={},
source_table_full_name='main.default.source_table',
timeseries_key=None),
status=OnlineTableStatus(continuous_update_status=None,
detailed_state=OnlineTableState.PROVISIONING,
failed_status=None,
message='Online Table creation is '
'pending. Check latest status in '
'Delta Live Tables: '
'https://xxx.databricks.com/pipelines/some-pipeline-id',
provisioning_status=None,
triggered_update_status=None))
# Trigger an online table refresh by calling the pipeline API. To discard all existing data
# in the online table before refreshing, set "full_refresh" to "True". This is useful if your
# online table sync is stuck due to, for example, the source table being deleted and recreated
# with the same name while the sync was running.
w.pipelines.start_update(pipeline_id='some-pipeline-id', full_refresh=True)
REST-API
curl --request GET \
"https://xxx.databricks.com/api/2.0/online-tables/main.default.my_online_table" \
--header "Authorization: Bearer xxx"
# Sample response
{
"name": "main.default.my_online_table",
"spec": {
"run_triggered": {},
"source_table_full_name": "main.default.source_table",
"primary_key_columns": ["pk_col"],
"pipeline_id": "some-pipeline-id"
},
"status": {
"detailed_state": "PROVISIONING",
"message": "Online Table creation is pending. Check latest status in Delta Live Tables: https://xxx.databricks.com#joblist/pipelines/some-pipeline-id"
}
}
# Trigger an online table refresh by calling the pipeline API. To discard all existing data
# in the online table before refreshing, set "full_refresh" to "True". This is useful if your
# online table sync is stuck due to, for example, the source table being deleted and recreated
# with the same name while the sync was running.
curl --request POST "https://xxx.databricks.com/api/2.0/pipelines/some-pipeline-id/updates" \
--header "Authorization: Bearer xxx" \
--data '{
"full_refresh": true
}'
Een onlinetabel verwijderen met behulp van API's
Databricks SDK - Python
w.online_tables.delete('main.default.my_online_table')
REST-API
curl --request DELETE \
"https://xxx.databricks.com/api/2.0/online-tables/main.default.my_online_table" \
--header "Authorization: Bearer xxx"
Als u de onlinetabel verwijdert, worden alle lopende gegevenssynchronisatie gestopt en worden alle bijbehorende resources vrijgegeven.
Onlinetabelgegevens leveren met behulp van een functie voor eindpunt
Voor modellen en toepassingen die buiten Databricks worden gehost, kunt u een functie maken die het eindpunt biedt voor het leveren van functies uit onlinetabellen. Het eindpunt maakt functies beschikbaar met lage latentie met behulp van een REST API.
Een functiespecificatie maken.
Wanneer u een functiespecificatie maakt, geeft u de delta-brontabel op. Hierdoor kan de functiespecificatie worden gebruikt in zowel offline- als onlinescenario's. Voor onlinezoekacties gebruikt het servereindpunt automatisch de onlinetabel om functiezoekacties met lage latentie uit te voeren.
De delta-brontabel en de onlinetabel moeten dezelfde primaire sleutel gebruiken.
De functiespecificatie kan worden weergegeven op het tabblad Functie in Catalogusverkenner.
from databricks.feature_engineering import FeatureEngineeringClient, FeatureLookup fe = FeatureEngineeringClient() fe.create_feature_spec( name="catalog.default.user_preferences_spec", features=[ FeatureLookup( table_name="user_preferences", lookup_key="user_id" ) ] )
Maak een functie die het eindpunt bedient.
In deze stap wordt ervan uitgegaan dat u een onlinetabel hebt gemaakt met de naam
user_preferences_online_table
waarmee gegevens uit de Delta-tabeluser_preferences
worden gesynchroniseerd. Gebruik de functiespecificatie om een functie voor eindpunt te maken. Het eindpunt maakt gegevens beschikbaar via een REST API met behulp van de bijbehorende onlinetabel.Notitie
De gebruiker die deze bewerking uitvoert, moet de eigenaar zijn van zowel de offlinetabel als de onlinetabel.
Databricks SDK - Python
from databricks.sdk import WorkspaceClient from databricks.sdk.service.serving import EndpointCoreConfigInput, ServedEntityInput workspace = WorkspaceClient() # Create endpoint endpoint_name = "fse-location" workspace.serving_endpoints.create_and_wait( name=endpoint_name, config=EndpointCoreConfigInput( served_entities=[ ServedEntityInput( entity_name=feature_spec_name, scale_to_zero_enabled=True, workload_size="Small" ) ] ) )
Python-API
from databricks.feature_engineering.entities.feature_serving_endpoint import ( ServedEntity, EndpointCoreConfig, ) fe.create_feature_serving_endpoint( name="user-preferences", config=EndpointCoreConfig( served_entities=ServedEntity( feature_spec_name="catalog.default.user_preferences_spec", workload_size="Small", scale_to_zero_enabled=True ) ) )
Haal gegevens op uit het functie-eindpunt.
Als u toegang wilt krijgen tot het API-eindpunt, verzendt u een HTTP GET-aanvraag naar de eindpunt-URL. In het voorbeeld ziet u hoe u dit doet met behulp van Python-API's. Zie Functie bieden voor andere talen en hulpprogramma's.
# Set up credentials export DATABRICKS_TOKEN=...
url = "https://{workspace_url}/serving-endpoints/user-preferences/invocations" headers = {'Authorization': f'Bearer {DATABRICKS_TOKEN}', 'Content-Type': 'application/json'} data = { "dataframe_records": [{"user_id": user_id}] } data_json = json.dumps(data, allow_nan=True) response = requests.request(method='POST', headers=headers, url=url, data=data_json) if response.status_code != 200: raise Exception(f'Request failed with status {response.status_code}, {response.text}') print(response.json()['outputs'][0]['hotel_preference'])
Onlinetabellen gebruiken met RAG-toepassingen
RAG-toepassingen zijn een veelvoorkomend gebruiksvoorbeeld voor onlinetabellen. U maakt een onlinetabel voor de gestructureerde gegevens die de RAG-toepassing nodig heeft en host deze op een functie die het eindpunt dient. De RAG-toepassing gebruikt het functie-eindpunt om relevante gegevens uit de onlinetabel op te zoeken.
De gebruikelijke stappen zijn als volgt:
- Maak een functie die het eindpunt bedient.
- Maak een hulpprogramma met Behulp van LangChain of een vergelijkbaar pakket dat gebruikmaakt van het eindpunt om relevante gegevens op te zoeken.
- Gebruik het hulpprogramma in een LangChain-agent of een vergelijkbare agent om relevante gegevens op te halen.
- Maak een model dat het eindpunt van de dienst biedt om de toepassing te hosten.
Zie voor stapsgewijze instructies en een voorbeeldnotitieblok het voorbeeld van functie-engineering: gestructureerde RAG-toepassing.
Notebook-voorbeelden
In het volgende notebook ziet u hoe u functies publiceert naar onlinetabellen voor realtime serveren en automatisch zoeken naar functies.
Demonotitieblok voor onlinetabellen
Onlinetabellen gebruiken met Mozaïek AI Model Serving
U kunt onlinetabellen gebruiken om functies voor Mosaic AI Model Serving op te zoeken. Wanneer u een functietabel synchroniseert met een onlinetabel, worden modellen die zijn getraind met behulp van functies uit die functietabel, automatisch functiewaarden uit de onlinetabel opgezoekt tijdens deductie. Er is geen aanvullende configuratie vereist.
Gebruik een
FeatureLookup
om het model te trainen.Voor modeltraining gebruikt u functies uit de offlinefunctietabel in de modeltrainingsset, zoals wordt weergegeven in het volgende voorbeeld:
training_set = fe.create_training_set( df=id_rt_feature_labels, label='quality', feature_lookups=[ FeatureLookup( table_name="user_preferences", lookup_key="user_id" ) ], exclude_columns=['user_id'], )
Serveer het model met Mosaic AI Model Serving. Het model zoekt automatisch functies uit de onlinetabel op. Zie Automatische functiezoekfunctie met Databricks Model Serving voor meer informatie.
Gebruikersmachtigingen
U moet over de volgende machtigingen beschikken om een onlinetabel te maken:
SELECT
bevoegdheid voor de brontabel.USE_CATALOG
bevoegdheid voor de doelcatalogus.USE_SCHEMA
enCREATE_TABLE
bevoegdheden voor het doelschema.
Als u de pijplijn voor gegevenssynchronisatie van een onlinetabel wilt beheren, moet u de eigenaar van de onlinetabel zijn of de bevoegdheid REFRESH voor de onlinetabel krijgen. Gebruikers die geen USE_CATALOG en USE_SCHEMA bevoegdheden voor de catalogus hebben, zien de onlinetabel niet in Catalog Explorer.
De Unity Catalog-metastore moet Privilege Model versie 1.0 hebben.
Eindpuntmachtigingsmodel
Er wordt automatisch een unieke service-principal gemaakt voor een functieservice- of modelservice-eindpunt met beperkte machtigingen die zijn vereist voor het opvragen van gegevens uit onlinetabellen. Deze service-principal biedt eindpunten toegang tot gegevens onafhankelijk van de gebruiker die de resource heeft gemaakt en zorgt ervoor dat het eindpunt kan blijven functioneren als de maker de werkruimte verlaat.
De levensduur van deze service-principal is de levensduur van het eindpunt. Auditlogboeken kunnen wijzen op door het systeem gegenereerde records voor de eigenaar van de Unity Catalog-catalogus die de benodigde bevoegdheden aan deze service-principal verleent.
Beperkingen
- Er wordt slechts één onlinetabel ondersteund per brontabel.
- Een onlinetabel en de brontabel kunnen maximaal 1000 kolommen bevatten.
- Kolommen van gegevenstypen ARRAY, MAP of STRUCT kunnen niet worden gebruikt als primaire sleutels in de onlinetabel.
- Als een kolom wordt gebruikt als een primaire sleutel in de onlinetabel, worden alle rijen in de brontabel waarin de kolom null-waarden bevat genegeerd.
- Refererende, systeem- en interne tabellen worden niet ondersteund als brontabellen.
- Brontabellen zonder deltawijzigingsgegevensfeed ingeschakeld ondersteunen alleen de synchronisatiemodus voor momentopnamen .
- Delta Sharing-tabellen worden alleen ondersteund in de synchronisatiemodus voor momentopnamen .
- Catalogus-, schema- en tabelnamen van de onlinetabel kunnen alleen alfanumerieke tekens en onderstrepingstekens bevatten en mogen niet beginnen met getallen. Streepjes (
-
) zijn niet toegestaan. - Kolommen van het tekenreekstype zijn beperkt tot 64 kB lengte.
- Kolomnamen mogen maximaal 64 tekens lang zijn.
- De maximale grootte van de rij is 2 MB.
- De gecombineerde grootte van alle onlinetabellen in een Unity Catalog-metastore tijdens de openbare preview is 2 TB niet-gecomprimeerde gebruikersgegevens.
- De maximumquery's per seconde (QPS) zijn 12.000. Neem contact op met uw Databricks-accountteam om de limiet te verhogen.
Probleemoplossing
Ik zie de optie Onlinetabel maken niet
De oorzaak is meestal dat de tabel waaruit u probeert te synchroniseren (de brontabel) geen ondersteund type is. Zorg ervoor dat het beveiligbare type van de brontabel (weergegeven op het tabblad Details van Catalogusverkenner) een van de onderstaande ondersteunde opties is:
TABLE_EXTERNAL
TABLE_DELTA
TABLE_DELTA_EXTERNAL
TABLE_DELTASHARING
TABLE_DELTASHARING_MUTABLE
TABLE_STREAMING_LIVE_TABLE
TABLE_STANDARD
TABLE_FEATURE_STORE
TABLE_FEATURE_STORE_EXTERNAL
TABLE_VIEW
TABLE_VIEW_DELTASHARING
TABLE_MATERIALIZED_VIEW
Ik kan geen geactiveerde of continue synchronisatiemodi selecteren wanneer ik een onlinetabel maak
Dit gebeurt als voor de brontabel geen Delta-wijzigingenfeed is ingeschakeld of als deze een weergave of gerealiseerde weergave is. Als u de incrementele synchronisatiemodus wilt gebruiken, schakelt u de gegevensfeed voor de brontabel in of gebruikt u een niet-weergavetabel.
Online tabelupdate mislukt of de status wordt offline weergegeven
Als u wilt beginnen met het oplossen van deze fout, klikt u op de pijplijn-id die wordt weergegeven op het tabblad Overzicht van de onlinetabel in Catalog Explorer.
Klik op de pagina pijplijngebruikersinterface die wordt weergegeven op de vermelding met de tekst 'Kan stroom niet oplossen __online_table'.
Er verschijnt een pop-up met details in de sectie Foutdetails .
Veelvoorkomende oorzaken van fouten zijn onder andere:
De brontabel is verwijderd of verwijderd en opnieuw gemaakt met dezelfde naam, terwijl de onlinetabel werd gesynchroniseerd. Dit is met name gebruikelijk bij doorlopende onlinetabellen, omdat ze voortdurend worden gesynchroniseerd.
De brontabel kan niet worden geopend via Serverless Compute vanwege firewallinstellingen. In deze situatie kan in de sectie Foutdetails het foutbericht 'Kan de DLT-service niet starten op cluster xxx...' weergeven.
De totale grootte van onlinetabellen overschrijdt de metastore-limiet van 2 TB (niet-gecomprimeerde grootte). De limiet van 2 TB verwijst naar de niet-gecomprimeerde grootte na het uitbreiden van de Delta-tabel in rijgeoriënteerde indeling. De grootte van de tabel in rijopmaak kan aanzienlijk groter zijn dan de grootte van de Delta-tabel die wordt weergegeven in Catalog Explorer, wat verwijst naar de gecomprimeerde grootte van de tabel in een kolomgeoriënteerde indeling. Het verschil kan zo groot zijn als 100x, afhankelijk van de inhoud van de tabel.
Als u een schatting wilt maken van de niet-gecomprimeerde, rij-uitgebreide grootte van een Delta-tabel, gebruikt u de volgende query uit een serverloze SQL Warehouse. De query retourneert de geschatte uitgebreide tabelgrootte in bytes. Als u deze query hebt uitgevoerd, wordt ook bevestigd dat serverloze compute toegang heeft tot de brontabel.
SELECT sum(length(to_csv(struct(*)))) FROM `source_table`;