Sdílet prostřednictvím


Použití online tabulek pro obsluhu funkcí v reálném čase

Důležité

Online tabulky jsou ve verzi Public Preview. Při příjmu dat do online tabulek ve verzi Preview spotřebovávají bezserverové databáze SQL. Konečné ceny online tabulek budou zpřístupněny k budoucímu datu.

Náhled online tabulek je k dispozici v následujících oblastech: westus, eastus, eastus2, northeurope, . westeurope

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í.

  1. 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í.

  2. 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.

    výběr možnosti Vytvořit online tabulku

  3. Ke konfiguraci online tabulky použijte selektory v dialogovém okně.

    Dialogové okno konfigurace online tabulky

    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.

  1. Až budete hotovi, klikněte na Potvrdit. Zobrazí se stránka online tabulky.
  2. 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 Ikona online tabulky.

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.

zobrazení stránky online tabulky v katalogu

Odstranění online tabulky pomocí uživatelského rozhraní

Na stránce online tabulky vyberte v nabídce kebab odstranitNabídka Kebab.

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'})
)

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"]
    }
  }'

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.

  1. 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"
        )
      ]
    )
    
  2. 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 tabulky user_preferencesDelta . 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

    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
        )
      )
    )
    
  3. 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í:

  1. Vytvoření koncového bodu obsluhy funkcí
  2. 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.
  3. K načtení relevantních dat použijte nástroj v agentovi LangChain nebo podobném agentovi.
  4. 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

Získat 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.

  1. 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'],
    )
    
  2. 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 a CREATE_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ý systémový 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í na data a spouštění funkcí. Tento instanční objekt umožňuje koncovým bodům přistupovat k datům a prostředkům funkcí 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 systémového 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 systémovému 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.
  • Maximální velikost online tabulky během chráněné veřejné verze Preview je 200 GB nekomprimovaných uživatelských dat.
  • Kombinovaná velikost všech online tabulek v metastoru katalogu Unity během vrátného veřejného náhledu je 1 TB nekomprimovaná uživatelská data.
  • Maximální počet dotazů za sekundu (QPS) je 200. Tento limit lze zvýšit na 25 000 nebo více. 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á povolenou změnu datového kanálu Delta 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.

Selhání kanálu online tabulek

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".

Chybová zpráva kanálu online tabulek

Zobrazí se automaticky otevírané okno s podrobnostmi v části Podrobnosti o chybě.

podrobnosti o chybách online tabulek

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 1 TiB (nekomprimovaná velikost) metastoru. Limit 1 TiB 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`;