Condividi tramite


Usare le tabelle online per la gestione delle funzionalità in tempo reale

Importante

Le tabelle online sono in anteprima pubblica nelle aree seguenti: westus, eastus, eastus2, northeurope, northeurope, westeurope. Per informazioni sui prezzi, vedere tavole online dei prezzi.

Una tabella online è una copia di sola lettura di una tabella Delta archiviata in formato orientato alle righe ottimizzata per l'accesso online. Le tabelle online sono tabelle completamente serverless che ridimensionano automaticamente la capacità di velocità effettiva con il carico delle richieste e forniscono un accesso a bassa latenza e velocità effettiva elevata ai dati di qualsiasi scala. Le tabelle online sono progettate per lavorare con Mosaic AI Model Serving, Feature Serving e applicazioni di generazione aumentata (RAG) in cui vengono usate per ricerche rapide dei dati.

È anche possibile usare tabelle online nelle query usando Lakehouse Federation. Quando si utilizza la Federazione Lakehouse, è necessario utilizzare un serverless SQL Warehouse per accedere alle tabelle online. Sono supportate solo le operazioni di lettura (SELECT). Questa funzionalità è destinata solo a scopi interattivi o di debug e non deve essere usata per carichi di lavoro di produzione o cruciali.

La creazione di una tabella online tramite l'interfaccia utente di Databricks è un processo in un unico passaggio. È sufficiente selezionare la tabella Delta in Esplora cataloghi e selezionare Crea tabella online. È anche possibile usare l'API REST o Databricks SDK per creare e gestire tabelle online. Consultare Lavorare con tabelle online utilizzando le API.

Requisiti

  • L'area di lavoro deve essere abilitata per il Catalogo Unity. Seguire la documentazione per creare un metastore del catalogo Unity, abilitarlo in un'area di lavoro e creare un catalogo.
  • Per accedere alle tabelle online, è necessario registrare un modello in Unity Catalog.

Lavorare con le tabelle online tramite l'interfaccia grafica utente

Questa sezione descrive come creare ed eliminare tabelle online e come controllare lo stato e attivare gli aggiornamenti delle tabelle online.

Creare una tabella online usando l'interfaccia utente

Crei una tabella online usando Catalog Explorer. Per altre informazioni sulle autorizzazioni necessarie, vedere Autorizzazioni.

  1. Per creare una tabella online, la tabella Delta di origine deve avere una chiave primaria. Se la tabella Delta da usare non dispone di una chiave primaria, crearne una seguendo queste istruzioni: Usare una tabella Delta esistente in Unity Catalog come tabella delle funzionalità.

  2. In Esploratore di cataloghi, navigare alla tabella di origine che si desidera sincronizzare con una tabella online. Dal menu Crea, seleziona Tabella Online.

    selezionare Crea tabella online

  3. Usare i selettori nella finestra di dialogo per configurare la tabella online.

    configura la finestra di dialogo tabella online

    Nome: Nome da usare per la tabella online nel Catalogo Unity.

    chiave primaria: colonne nella tabella di origine da usare come chiavi primarie nella tabella online.

    Chiave Timeseries: (facoltativo). Colonna nella tabella di origine da usare come chiave della serie temporale. Se specificato, la tabella online include solo la riga con il valore della chiave timeseries più recente per ogni chiave primaria.

    modalità di sincronizzazione: specifica il modo in cui la pipeline di sincronizzazione aggiorna la tabella online. Selezionare uno di Snapshot , Triggered , o Continuous .

    Criterio Descrizione
    Snapshot La pipeline viene eseguita una volta per creare uno snapshot della tabella di origine e copiarla nella tabella online. Le modifiche successive alla tabella di origine vengono riflesse automaticamente nella tabella online creando un nuovo snapshot dell'origine e creando una nuova copia. Il contenuto della tabella online viene aggiornato in modo atomico.
    Attivato La pipeline viene eseguita una volta per creare una copia snapshot iniziale della tabella di origine nella tabella online. A differenza della modalità di sincronizzazione snapshot, quando la tabella online viene aggiornata, vengono recuperate e applicate alla tabella online solo le modifiche apportate dall'ultima esecuzione della pipeline. L'aggiornamento incrementale può essere attivato manualmente o attivato automaticamente in base a una pianificazione.
    Continuo La pipeline viene eseguita continuamente. Le modifiche successive alla tabella di origine vengono applicate in modo incrementale alla tabella online in modalità di streaming in tempo reale. Non è necessario alcun aggiornamento manuale.

Nota

Per supportare la modalità di sincronizzazione attivata o la modalità di sincronizzazione continua, la tabella di origine deve avere il feed di dati delle modifiche abilitato.

  1. Fare clic su Fine al termine dell’operazione. Viene visualizzata la pagina della tabella online.
  2. La nuova tabella online viene creata nel catalogo, nello schema e nel nome specificati nella finestra di dialogo di creazione. Nell'Esplora cataloghi, la tabella online è indicata dall'icona della tabella online .

Ottenere lo stato e attivare gli aggiornamenti usando l'interfaccia utente

Per controllare lo stato della tabella online, fare clic sul nome della tabella nel catalogo per aprirlo. La pagina della tabella online viene visualizzata con la scheda Panoramica aperta. La sezione inserimento dati mostra lo stato dell'aggiornamento più recente. Per attivare un aggiornamento, fare clic su Sincronizza ora. La sezione Inserimento Dati include anche un collegamento alla pipeline Delta Live Tables che aggiorna la tabella.

visualizzazione della tabella online nella pagina del catalogo

Pianificare gli aggiornamenti periodici

Per le tabelle online con modalità snapshot o modalità di sincronizzazione triggerata , è possibile pianificare aggiornamenti periodici automatici. La pianificazione degli aggiornamenti viene gestita dalla pipeline Delta Live Tables che si occupa di aggiornare le tabelle.

  1. In Catalog Explorer, naviga alla tabella online.
  2. Nella sezione Inserimento dati fare clic sul collegamento alla pipeline.
  3. Nell'angolo superiore destro fare clic su Schedulee aggiungere una nuova pianificazione o aggiornare le pianificazioni esistenti.

Eliminare una tabella online usando l'interfaccia utente

Nella pagina della tabella online, selezionare Elimina dal menu kebab .

Lavorare con tabelle online usando le API

È anche possibile usare Databricks SDK o l'API REST per creare e gestire tabelle online.

Per informazioni di riferimento, vedere la documentazione di riferimento per Databricks SDK per Python o l’API REST.

Requisiti

Databricks SDK versione 0.20 o successiva.

Creare una tabella online usando le API

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

La tabella online avvia automaticamente la sincronizzazione dopo la creazione.

Ottenere lo stato e attivare l'aggiornamento usando le API

È possibile visualizzare lo stato e la specifica della tabella online seguendo l'esempio seguente. Se la tabella online non è continua e si vuole attivare un aggiornamento manuale dei dati, è possibile usare l'API della pipeline per farlo.

Usare l'ID pipeline associato alla tabella online nella specifica di tabella online e avviare un nuovo aggiornamento nella pipeline per attivare l'aggiornamento. Equivale a fare clic su Sincronizza ora nell'interfaccia utente della tabella online di Catalog Explorer.

SDK Databricks - 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
  }'

Eliminare una tabella online usando le API

SDK Databricks - 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"

L'eliminazione della tabella online interrompe la sincronizzazione dei dati in corso e rilascia tutte le relative risorse.

Gestire i dati delle tabelle online usando un endpoint di gestione delle funzionalità

Per i modelli e le applicazioni ospitati all'esterno di Databricks, è possibile creare un endpoint di gestione delle funzionalità per gestire le funzionalità dalle tabelle online. L’endpoint rende disponibili le funzionalità a bassa latenza usando un'API REST.

  1. Creazione di funzioni specifiche

    Quando si crea una specifica di funzionalità, specificare la tabella Delta di origine. In questo modo, la specifica di funzionalità può essere usata sia in scenari offline che online. Per le ricerche online, l'endpoint di gestione usa automaticamente la tabella online per eseguire ricerche di funzionalità a bassa latenza.

    La tabella Delta di origine e la tabella online devono usare la stessa chiave primaria.

    La specifica di funzionalità può essere visualizzata nella scheda Funzionalità in Esplora Cataloghi.

    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. Creare un endpoint di gestione delle funzionalità.

    Questo passaggio presuppone che sia stata creata una tabella online denominata user_preferences_online_table che sincronizza i dati della tabella Delta user_preferences. Usare la specifica di funzionalità per creare un endpoint di gestione delle funzionalità. L'endpoint rende i dati disponibili tramite un'API REST usando la tabella online associata.

    Nota

    L'utente che esegue questa operazione deve essere il proprietario della tabella offline e della tabella online.

    SDK Databricks - 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"
          )
        ]
      )
    )
    

    API 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
        )
      )
    )
    
  3. Ottenere dati dall'endpoint di gestione delle funzionalità.

    Per accedere all'endpoint API, inviare una richiesta HTTP GET all'URL dell'endpoint. L’esempio seguente illustra come eseguire questa operazione con Python. Per altri linguaggi e strumenti, vedere Funzionalità di gestione delle funzionalità.

    # 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'])
    

Usare tabelle online con applicazioni RAG

Le applicazioni RAG sono un caso d'uso comune per le tabelle online. È possibile creare una tabella online per i dati strutturati necessari all'applicazione RAG e ospitarli in un endpoint di gestione delle funzionalità. L'applicazione RAG usa l'endpoint di gestione delle funzionalità per cercare i dati pertinenti dalla tabella online.

Attieniti alla procedura seguente:

  1. Creare un endpoint di gestione delle funzionalità.
  2. Creare uno strumento usando LangChain o qualsiasi pacchetto simile che usa l’endpoint per cercare i dati pertinenti.
  3. Usare lo strumento in un agente LangChain o in un agente simile per recuperare i dati pertinenti.
  4. Creare un endpoint di gestione del modello per ospitare l’applicazione.

Per istruzioni dettagliate e un notebook di esempio, vedere Esempio di progettazione delle funzionalità: applicazione RAG strutturata.

Esempi di notebook

Il notebook seguente illustra come pubblicare funzionalità nelle tabelle online per la gestione in tempo reale e la ricerca automatica delle funzionalità.

Notebook demo delle tabelle online

Prendi il notebook

Usare tabelle online con Mosaic AI Model Serving

È possibile usare le tabelle online per cercare le funzionalità di Mosaic AI Model Serving. Quando si sincronizza una tabella delle funzionalità in una tabella online, i modelli sottoposti a training usando le funzionalità di tale tabella di funzionalità cercano automaticamente i valori delle funzionalità dalla tabella online durante l'inferenza. Non è necessaria alcuna configurazione aggiuntiva.

  1. Usare un FeatureLookup oggetto per eseguire il training del modello.

    Per il training del modello, usare le funzionalità della tabella delle funzionalità offline nel set di training del modello, come illustrato nell'esempio seguente:

    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. Usare il modello con Mosaic AI Model Serving. Il modello cerca automaticamente le funzionalità dalla tabella online. Per informazioni dettagliate, vedere Ricerca automatica delle funzionalità con Databricks Model Serving .

Autorizzazioni utenti

Per creare una tabella online, è necessario disporre delle autorizzazioni seguenti:

  • SELECT privilegio sulla tabella di origine.
  • USE_CATALOG privilegi nel catalogo di destinazione.
  • USE_SCHEMA e CREATE_TABLE privilegio nello schema di destinazione.

Per gestire la pipeline di sincronizzazione dei dati di una tabella online, bisogna essere il proprietario della tabella online o avere il privilegio REFRESH concesso sulla tabella online. Gli utenti che non hanno USE_CATALOG e USE_SCHEMA privilegi per il catalogo non vedranno la tabella online in Esplora cataloghi.

Il metastore del catalogo Unity deve avere Modello dei Privilegi Versione 1.0.

Autorizzazione dell’endpoint

Un'entità servizio univoca viene creata automaticamente per un endpoint di erogazione delle funzionalità o dei modelli, con autorizzazioni limitate necessarie per eseguire query sui dati dalle tabelle online. Questa entità servizio consente agli endpoint di accedere ai dati indipendentemente dall'utente che ha creato la risorsa e garantisce che l’endpoint possa continuare a funzionare se l’autore lascia l'area di lavoro.

La durata di questa entità servizio è la durata dell’endpoint. I log di controllo possono indicare record generati dal sistema per il proprietario del catalogo di Unity Catalog, concedendo i privilegi necessari a questo principale del servizio.

Limiti

  • Per tabella di origine è supportata una sola tabella online.
  • Una tabella online e la relativa tabella di origine possono contenere al massimo 1000 colonne.
  • Le colonne di tipi di dati ARRAY, MAP o STRUCT non possono essere usate come chiavi primarie nella tabella online.
  • Se una colonna viene utilizzata come chiave primaria nella tabella online, tutte le righe della tabella di origine in cui la colonna contiene valori Null vengono ignorate.
  • Le tabelle esterne, di sistema e interne non sono supportate come tabelle di origine.
  • Le tabelle di origine senza il feed di dati delle modifiche Delta abilitato supportano solo la modalità di sincronizzazione Snapshot.
  • Le tabelle di condivisione differenziale sono supportate solo nella modalità di sincronizzazione snapshot.
  • I nomi di catalogo, schema e tabella della tabella online possono contenere solo caratteri alfanumerici e caratteri di sottolineatura e non devono iniziare con i numeri. I trattini (-) non sono consentiti.
  • Le colonne di tipo String sono limitate a 64 KB.
  • I nomi delle colonne sono limitati a 64 caratteri.
  • La dimensione massima del video è di 2 MB.
  • Le dimensioni combinate di tutte le tabelle online in un metastore del catalogo Unity durante l'anteprima pubblica sono di 2 TB di dati utente non compressi.
  • Il numero massimo di query al secondo (QPS) è 12.000. Contatta il team dell'account Databricks per aumentare il limite.

Risoluzione dei problemi

Non viene visualizzata l'opzione Crea tabella online

La causa è in genere che la tabella da cui si sta tentando di eseguire la sincronizzazione (la tabella di origine) non è un tipo supportato. Assicurarsi che il tipo di sicurezza della tabella di origine (mostrato nella scheda Esplora cataloghi Dettagli) sia una delle opzioni supportate di seguito:

  • 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

Non riesco a selezionare le modalità di sincronizzazione Attivato o Continua quando creo una tabella online.

Ciò si verifica se la tabella di origine non dispone del feed di dati delle modifiche Delta abilitato o se si tratta di una vista o vista materializzata. Per usare la modalità di sincronizzazione incrementale , abilitare il feed di dati delle modifiche nella tabella di origine oppure usare una tabella non vista.

L'aggiornamento della tabella online fallisce o lo stato viene mostrato come offline

Per iniziare a risolvere questo errore, fare clic sull'ID della pipeline visualizzato nella scheda panoramica della tabella online in Esplora cataloghi.

errore della pipeline delle tabelle online

Nella pagina dell’interfaccia utente della pipeline visualizzata fare clic sulla voce “Failed to resolve flow’'__online_table”.

messaggio di errore della pipeline delle tabelle online

Viene visualizzata una finestra popup con i dettagli nella sezione Dettagli errore.

dettagli delle tabelle online relative all'errore

Le cause radice comuni includono:

  • La tabella di origine è stata eliminata o eliminata e ricreata con lo stesso nome, mentre la tabella online è stata sincronizzata. Ciò è particolarmente comune con le tabelle online continue, perché sono costantemente sincronizzate.

  • Non è possibile accedere alla tabella di origine tramite calcolo serverless a causa delle impostazioni del firewall. In questo caso, la sezione Dettagli errore potrebbe visualizzare il messaggio di errore "Impossibile avviare il servizio DLT nel cluster xxx...".

  • Le dimensioni aggregate delle tabelle online superano il limite di 2 TB (dimensioni non compresse) a livello di metastore. Il limite di 2 TB si riferisce alle dimensioni non compresse dopo l'espansione della tabella Delta in formato orientato alle righe. Le dimensioni della tabella in formato riga possono essere notevolmente maggiori delle dimensioni della tabella Delta mostrata in Esplora cataloghi, che fa riferimento alle dimensioni compresse della tabella in un formato orientato alle colonne. La differenza può essere pari a 100x, a seconda del contenuto della tabella.

    Per stimare le dimensioni non compresse e l'espansione delle righe di una tabella Delta, utilizzare la seguente query da un SQL Warehouse Serverless. La query restituisce le dimensioni stimate della tabella espansa in byte. L'esecuzione corretta di questa query conferma anche che l'ambiente di calcolo serverless può accedere alla tabella di origine.

    SELECT sum(length(to_csv(struct(*)))) FROM `source_table`;