Použití online tabulek pro obsluhu funkcí v reálném čase
Důležité
Online tabulky jsou ve verzi Public Preview v následujících oblastech: westus
, eastus
, eastus2
, northeurope
, . westeurope
Informace o cenách najdete v tématu Ceny online tabulek.
Online tabulka je kopie tabulky Delta, která je uložená ve formátu orientovaném na řádky optimalizovaném pro online přístup. Online tabulky jsou plně bezserverové tabulky, které automaticky škálují kapacitu propustnosti s zatížením požadavku a poskytují nízkou latenci a vysokou propustnost přístupu k datům libovolného škálování. Online tabulky jsou navržené tak, aby fungovaly s aplikacemi RAG (Mosaic AI Model Serving, Feature Serving) a načítáním aplikací rozšířené generace (RAG), ve kterých se používají pro rychlé vyhledávání dat.
Online tabulky můžete použít také v dotazech pomocí Lakehouse Federation. Pokud používáte Federaci Lakehouse, musíte pro přístup k online tabulkám použít bezserverový SQL Warehouse. Podporují se jenom operace čtení (SELECT
). Tato funkce je určená pouze pro účely interaktivního nebo ladění a neměla by se používat pro produkční nebo klíčové úlohy.
Vytvoření online tabulky pomocí uživatelského rozhraní Databricks je proces o jednom kroku. Stačí vybrat tabulku Delta v Průzkumníku katalogu a vybrat Vytvořit online tabulku. K vytváření a správě online tabulek můžete použít také rozhraní REST API nebo sadu Databricks SDK. Viz Práce s online tabulkami pomocí rozhraní API.
Požadavky
- Pracovní prostor musí být povolený pro katalog Unity. Podle dokumentace vytvořte metastore katalogu Unity, povolte ho v pracovním prostoru a vytvořte katalog.
- Aby bylo možné přistupovat k online tabulkám, musí být v katalogu Unity zaregistrovaný model.
Práce s online tabulkami pomocí uživatelského rozhraní
Tato část popisuje, jak vytvářet a odstraňovat online tabulky a jak kontrolovat stav a aktivovat aktualizace online tabulek.
Vytvoření online tabulky pomocí uživatelského rozhraní
Pomocí Průzkumníka katalogu vytvoříte online tabulku. Informace o požadovaných oprávněních najdete v tématu Uživatelská oprávnění.
Pokud chcete vytvořit online tabulku, musí mít zdrojová tabulka Delta primární klíč. Pokud tabulka Delta, kterou chcete použít, nemá primární klíč, vytvořte ji podle těchto pokynů: Použijte existující tabulku Delta v katalogu Unity jako tabulku funkcí.
V Průzkumníku katalogu přejděte do zdrojové tabulky, kterou chcete synchronizovat s online tabulkou. V nabídce Vytvořit vyberte Online tabulku.
Ke konfiguraci online tabulky použijte selektory v dialogovém okně.
Název: Název, který se má použít pro online tabulku v katalogu Unity.
Primární klíč: Sloupce ve zdrojové tabulce, které se mají použít jako primární klíče v online tabulce.
Klávesa Timeseries: (volitelné). Sloupec ve zdrojové tabulce, který se použije jako klíč timeseries. Při zadání obsahuje online tabulka pouze řádek s hodnotou klíče timeseries pro každý primární klíč.
Režim synchronizace: Určuje, jak kanál synchronizace aktualizuje online tabulku. Vyberte jeden ze snímků, aktivovaných nebo průběžných.
Zásady Popis Snapshot Kanál se spustí jednou, aby pořídil snímek zdrojové tabulky a zkopíroval ho do online tabulky. Následné změny zdrojové tabulky se automaticky projeví v online tabulce pořízením nového snímku zdroje a vytvořením nové kopie. Obsah online tabulky se aktualizuje atomicky. Aktivované Kanál se spustí jednou a vytvoří počáteční kopii snímku zdrojové tabulky v online tabulce. Na rozdíl od režimu synchronizace snímků se při aktualizaci online tabulky načtou a použijí u online tabulky pouze změny od posledního spuštění kanálu. Přírůstkovou aktualizaci je možné aktivovat ručně nebo automaticky aktivovat podle plánu. Průběžné Kanál běží nepřetržitě. Následné změny zdrojové tabulky se postupně použijí na online tabulku v režimu streamování v reálném čase. Není nutná žádná ruční aktualizace.
Poznámka:
Aby bylo možné podporovat režim aktivované nebo průběžné synchronizace, musí mít zdrojová tabulka povolený datový kanál Změn.
- Až budete hotovi, klikněte na Potvrdit. Zobrazí se stránka online tabulky.
- Nová online tabulka se vytvoří v katalogu, schématu a názvu zadaném v dialogovém okně pro vytvoření. V Průzkumníku katalogu je online tabulka označena .
Získání stavu a aktivace aktualizací pomocí uživatelského rozhraní
Pokud chcete zkontrolovat stav online tabulky, otevřete ji kliknutím na název tabulky v katalogu. Otevře se stránka online tabulky s otevřenou kartou Přehled . V části Ingestování dat se zobrazuje stav nejnovější aktualizace. Pokud chcete aktivovat aktualizaci, klikněte teď na Synchronizovat. Oddíl Ingestování dat obsahuje také odkaz na kanál Delta Live Tables, který aktualizuje tabulku.
Plánování pravidelných aktualizací
U online tabulek s režimem synchronizace snímků nebo aktivovaných aktivací můžete naplánovat automatické pravidelné aktualizace. Plán aktualizací spravuje kanál Delta Live Tables, který tabulku aktualizuje.
- V Průzkumníku katalogu přejděte do online tabulky.
- V části Ingestování dat klikněte na odkaz na kanál.
- V pravém horním rohu klikněte na Plán a přidejte nový plán nebo aktualizujte existující plány.
Odstranění online tabulky pomocí uživatelského rozhraní
Na stránce online tabulky vyberte v nabídce kebab odstranit.
Práce s online tabulkami pomocí rozhraní API
K vytváření a správě online tabulek můžete použít také sadu Databricks SDK nebo rozhraní REST API.
Referenční informace najdete v referenční dokumentaci k sadě Databricks SDK pro Python nebo rozhraní REST API.
Požadavky
Databricks SDK verze 0.20 nebo novější
Vytvoření online tabulky pomocí rozhraní API
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'})
)
online_table = OnlineTable(
name="main.default.my_online_table", # Fully qualified table name
spec=spec # Online table specification
)
w.online_tables.create_and_wait(table=online_table)
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"]
}
}'
Online tabulka se po vytvoření automaticky spustí se synchronizací.
Získání stavu a aktivace aktualizace pomocí rozhraní API
Stav a specifikaci online tabulky si můžete prohlédnout v následujícím příkladu. Pokud vaše online tabulka není průběžná a chcete aktivovat ruční aktualizaci dat, můžete k tomu použít rozhraní API kanálu.
Použijte ID kanálu přidružené k online tabulce ve specifikaci online tabulky a spusťte novou aktualizaci kanálu, aby se aktualizace aktivovala. To odpovídá kliknutí na Synchronizovat nyní v uživatelském rozhraní online tabulky v Průzkumníku katalogu.
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
}'
Odstranění online tabulky pomocí rozhraní API
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"
Odstraněním online tabulky zastavíte probíhající synchronizaci dat a uvolníte všechny její prostředky.
Poskytování dat online tabulek pomocí koncového bodu obsluhy funkcí
U modelů a aplikací hostovaných mimo Databricks můžete vytvořit funkci obsluhující koncový bod, který bude obsluhovat funkce z online tabulek. Koncový bod zpřístupní funkce s nízkou latencí pomocí rozhraní REST API.
Vytvořte specifikaci funkce.
Při vytváření specifikace funkce zadáte zdrojovou tabulku Delta. To umožňuje použití specifikace funkce v offline i online scénářích. U online vyhledávání koncový bod obsluhy automaticky používá online tabulku k vyhledávání funkcí s nízkou latencí.
Zdrojová tabulka Delta a online tabulka musí používat stejný primární klíč.
Specifikace funkce se dá zobrazit na kartě Funkce v Průzkumníku katalogu.
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" ) ] )
Vytvoření koncového bodu obsluhy funkcí
Tento krok předpokládá, že jste vytvořili online tabulku s názvem
user_preferences_online_table
, která synchronizuje data z tabulkyuser_preferences
Delta . Pomocí specifikace funkce vytvořte koncový bod obsluhující funkci. Koncový bod zpřístupňuje data prostřednictvím rozhraní REST API pomocí přidružené online tabulky.Poznámka:
Uživatel, který tuto operaci provádí, musí být vlastníkem offline i online tabulky.
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" ) ] ) )
Rozhraní API pro Python
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 ) ) )
Získejte data z koncového bodu obsluhující funkce.
Pokud chcete získat přístup ke koncovému bodu rozhraní API, odešlete požadavek HTTP GET na adresu URL koncového bodu. Příklad ukazuje, jak to provést pomocí rozhraní PYTHON API. Další jazyky a nástroje najdete v tématu Obsluha funkcí.
# 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'])
Použití online tabulek s aplikacemi RAG
Aplikace RAG jsou běžným případem použití pro online tabulky. Vytvoříte online tabulku pro strukturovaná data, která aplikace RAG potřebuje, a hostujete ji na koncovém bodu obsluhující funkci. Aplikace RAG používá funkci obsluhující koncový bod k vyhledání relevantních dat z online tabulky.
Typické kroky jsou následující:
- Vytvoření koncového bodu obsluhy funkcí
- Vytvořte nástroj pomocí jazyka LangChain nebo jakéhokoli podobného balíčku, který používá koncový bod k vyhledání relevantních dat.
- K načtení relevantních dat použijte nástroj v agentovi LangChain nebo podobném agentovi.
- Vytvořte model obsluhující koncový bod pro hostování aplikace.
Podrobné pokyny a ukázkový poznámkový blok najdete v příkladu přípravy funkcí: strukturovaná aplikace RAG.
Příklady poznámkových bloků
Následující poznámkový blok ukazuje, jak publikovat funkce do online tabulek pro obsluhu a automatizované vyhledávání funkcí v reálném čase.
Online tabulky – ukázkový poznámkový blok
Použití online tabulek s obsluhou modelu Mosaic AI
Pomocí online tabulek můžete vyhledat funkce pro obsluhu modelu Mosaic AI. Když synchronizujete tabulku funkcí s online tabulkou, modely vytrénované pomocí funkcí z této tabulky automaticky vyhledávají hodnoty funkcí z online tabulky během odvozování. Nevyžaduje se žádná další konfigurace.
Použijte k
FeatureLookup
trénování modelu.Pro trénování modelu použijte funkce z tabulky offline funkcí v trénovací sadě modelů, jak je znázorněno v následujícím příkladu:
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'], )
Obsluha modelu s rozhraním Mosaic AI Model Obsluha. Model automaticky vyhledá funkce z online tabulky. Podrobnosti najdete v tématu Automatické vyhledávání funkcí pomocí služby Model Databricks.
Uživatelská oprávnění
K vytvoření online tabulky musíte mít následující oprávnění:
SELECT
oprávnění ke zdrojové tabulce.USE_CATALOG
oprávnění k cílovému katalogu.USE_SCHEMA
aCREATE_TABLE
oprávnění k cílovému schématu.
Pokud chcete spravovat kanál synchronizace dat online tabulky, musíte být buď vlastníkem online tabulky, nebo musíte být u online tabulky udělené oprávnění REFRESH. Uživatelé, kteří nemají oprávnění USE_CATALOG a USE_SCHEMA v katalogu, neuvidí online tabulku v Průzkumníku katalogu.
Metastore katalogu Unity musí mít model oprávnění verze 1.0.
Model oprávnění koncového bodu
Jedinečný instanční objekt se automaticky vytvoří pro funkci obsluhující koncový bod nebo model obsluhující koncový bod s omezenými oprávněními potřebnými k dotazování dat z online tabulek. Tento instanční objekt umožňuje koncovým bodům přistupovat k datům nezávisle na uživateli, který prostředek vytvořil, a zajišťuje, aby koncový bod mohl dál fungovat, pokud autor opustí pracovní prostor.
Životnost tohoto instančního objektu je životnost koncového bodu. Protokoly auditu mohou znamenat systémem generované záznamy pro vlastníka katalogu Unity, který uděluje potřebná oprávnění k tomuto instančnímu objektu.
Omezení
- Pro zdrojovou tabulku je podporována pouze jedna online tabulka.
- Online tabulka a její zdrojová tabulka můžou mít maximálně 1 000 sloupců.
- Sloupce datových typů ARRAY, MAP nebo STRUCT nelze použít jako primární klíče v online tabulce.
- Pokud se sloupec používá jako primární klíč v online tabulce, budou ignorovány všechny řádky ve zdrojové tabulce, kde sloupec obsahuje hodnoty null.
- Cizí, systémové a interní tabulky nejsou podporované jako zdrojové tabulky.
- Zdrojové tabulky bez povoleného datového kanálu změn Delta podporují pouze režim synchronizace snímků .
- Tabulky Delta Sharing se podporují jenom v režimu synchronizace snímků .
- Katalog, schéma a názvy tabulek v online tabulce můžou obsahovat pouze alfanumerické znaky a podtržítka a nesmí začínat čísly. Pomlčky (
-
) nejsou povoleny. - Sloupce typu String jsou omezeny na délku 64 kB.
- Názvy sloupců jsou omezené na délku 64 znaků.
- Maximální velikost řádku je 2 MB.
- Kombinovaná velikost všech online tabulek v metastore katalogu Unity během veřejné verze Preview je 2 TB nekomprimovaná uživatelská data.
- Maximální počet dotazů za sekundu (QPS) je 12 000. Pokud chcete limit zvýšit, obraťte se na tým účtu Databricks.
Řešení problému
Nevidím možnost Vytvořit online tabulku
Příčinou je obvykle to, že tabulka, ze které se pokoušíte synchronizovat (zdrojová tabulka), není podporovaný typ. Ujistěte se, že zdrojová tabulka Je zabezpečitelný druh (zobrazený na kartě Podrobnosti Průzkumníka katalogu) je jednou z podporovaných možností níže:
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
Při vytváření online tabulky nejde vybrat režim aktivované nebo průběžné synchronizace
K tomu dochází v případě, že zdrojová tabulka nemá povolený datový kanál delta změn nebo pokud se jedná o zobrazení nebo materializované zobrazení. Pokud chcete použít režim přírůstkové synchronizace, povolte kanál změn dat ve zdrojové tabulce nebo použijte tabulku bez zobrazení.
Online aktualizace tabulek selže nebo se stav zobrazí offline
Pokud chcete začít řešit tuto chybu, klikněte na ID kanálu, které se zobrazí na kartě Přehled online tabulky v Průzkumníku katalogu.
Na stránce uživatelského rozhraní kanálu, která se zobrazí, klikněte na položku "Nepodařilo se přeložit tok "__online_table".
Zobrazí se automaticky otevírané okno s podrobnostmi v části Podrobnosti o chybě.
Mezi běžné příčiny chyb patří:
Zdrojová tabulka byla odstraněna nebo odstraněna a znovu vytvořena se stejným názvem, zatímco se online tabulka synchronizovala. To je zvlášť běžné u průběžných online tabulek, protože se neustále synchronizují.
Zdrojovou tabulku nelze získat přístup prostřednictvím bezserverového výpočetního prostředí z důvodu nastavení brány firewall. V této situaci se v části Podrobnosti o chybě může zobrazit chybová zpráva "Nepodařilo se spustit službu DLT v clusteru xxx...".
Agregovaná velikost online tabulek překračuje limit 2 TB (nekomprimovaná velikost) metastoru. Limit 2 TB odkazuje na nekomprimovanou velikost po rozbalení tabulky Delta ve formátu orientovaném na řádky. Velikost tabulky ve formátu řádku může být výrazně větší než velikost tabulky Delta zobrazená v Průzkumníku katalogu, která odkazuje na komprimovanou velikost tabulky ve sloupcovém formátu. Rozdíl může být tak velký jako 100x v závislosti na obsahu tabulky.
Pokud chcete odhadnout nekomprimovanou, rozbalenou velikost řádku tabulky Delta, použijte následující dotaz z bezserverového SQL Warehouse. Dotaz vrátí odhadovanou rozšířenou velikost tabulky v bajtech. Úspěšné provedení tohoto dotazu také potvrzuje, že bezserverové výpočetní prostředky mají přístup ke zdrojové tabulce.
SELECT sum(length(to_csv(struct(*)))) FROM `source_table`;