Use tabelas on-line para o tempo real Feature Serving
Visualização
As tabelas online estão em pré-visualização pública nas seguintes regiões: us-east-1
, us-west-2
, eu-west-1
, ap-southeast-1
, ap-southeast-2
. Para obter informações sobre preços, consulte Tabelas on-line de preços.
Uma tabela on-line é uma cópia somente leitura de uma tabela Delta que é armazenada em um formato orientado por linha otimizado para acesso on-line. As tabelas on-line são totalmente serverless que escalonam automaticamente a capacidade da taxa de transferência com a carga da solicitação e fornecem baixa latência e alto acesso aos dados de qualquer escala. As tabelas on-line são projetadas para funcionar com os aplicativos Mosaic AI Model Serving, Feature Serving e retrieval-augmented generation (RAG), onde são usadas para pesquisas rápidas de dados.
O senhor também pode usar tabelas on-line em consultas usando a lakehouse Federation. Ao usar a Lakehouse Federation, o senhor deve usar um SQL warehouse sem servidor para acessar as tabelas on-line. Somente operações de leitura (SELECT
) são suportadas. Esse recurso destina-se apenas a fins interativos ou de depuração e não deve ser usado para cargas de trabalho de produção ou de missão crítica.
A criação de uma tabela on-line usando a interface do usuário do Databricks é um processo de uma etapa. Basta selecionar a tabela Delta no Catalog Explorer e selecionar Create online table (Criar tabela on-line ). O senhor também pode usar a API REST ou o SDK da Databricks para criar e gerenciar tabelas on-line. Consulte Trabalhar com tabelas on-line usando APIs.
Requisitos
- O site workspace deve estar habilitado para Unity Catalog. Siga a documentação para criar um Unity Catalog Metastore, habilitá-lo em um workspace e criar um catálogo.
- Um modelo deve ser registrado no Unity Catalog para acessar as tabelas on-line.
- Um administrador do Databricks deve aceitar os Termos de serviço sem servidor no console do account.
Trabalhe com tabelas on-line usando a interface
Esta seção descreve como criar e excluir tabelas on-line e como verificar o status e acionar atualizações de tabelas on-line.
Crie uma tabela on-line usando a interface do usuário
Você cria uma tabela on-line usando o Catalog Explorer. Para obter informações sobre as permissões necessárias, consulte Permissões do usuário.
-
Para criar uma tabela on-line, a tabela de origem Delta deve ter uma tabela primária key. Se a tabela Delta que o senhor deseja usar não tiver uma key primária, crie uma seguindo estas instruções: Use uma tabela Delta existente em Unity Catalog como uma tabela de recurso.
-
No Catalog Explorer, navegue até a tabela de origem que você deseja sincronizar com uma tabela online. No menu Criar , selecione Tabela online .
-
Use os seletores na caixa de diálogo para configurar a tabela on-line.
Name (Nome ): Nome a ser usado para a tabela on-line no Unity Catalog.
Chave primária : Coluna(s) na tabela de origem a ser(em) usada(s) como primária(s) key na tabela on-line.
Chave de série temporal : (opcional). Coluna na tabela de origem a ser usada como série temporal key. Quando especificada, a tabela on-line inclui apenas a linha com o valor mais recente da série temporal key para cada primário key.
Modo de sincronização : Especifica como o pipeline de sincronização atualiza a tabela on-line. Selecione uma das opções Snapshot , Triggered ou Continuous .
Política
Descrição
Snapshot
A pipeline execução uma vez para tirar um Snapshot da tabela de origem e copiá-lo para a tabela on-line. As alterações subsequentes na tabela de origem são refletidas automaticamente na tabela on-line, tirando um novo Snapshot da origem e criando uma nova cópia. O conteúdo da tabela on-line é atualizado atomicamente.
Acionado
O pipeline executa uma vez para criar uma cópia inicial do Snapshot da tabela de origem na tabela on-line. Diferentemente do modo de sincronização Snapshot, quando a tabela on-line é atualizada, somente as alterações desde a última execução do pipeline são recuperadas e aplicadas à tabela on-line. O incremental refresh pode ser acionado manualmente ou automaticamente de acordo com um programa.
Contínuo
O pipeline executa continuamente. As alterações subsequentes na tabela de origem são aplicadas de forma incremental à tabela on-line no modo de transmissão em tempo real. Não é necessário acessar o site refresh manualmente.
Para oferecer suporte ao modo de sincronização acionada ou contínua , a tabela de origem deve ter a opção Alterar feed de dados ativada.
- Quando terminar, clique em Confirmar . A página da tabela on-line é exibida.
- A nova tabela on-line é criada sob o catálogo, o esquema e o nome especificados na caixa de diálogo de criação. No Catalog Explorer, a tabela on-line é indicada por
.
Obtenha status e acione atualizações usando a interface do usuário
Para verificar o status da tabela on-line, clique no nome da tabela no Catálogo para abri-la. A página da tabela on-line é exibida com a Visão geral tab aberta. A seção Ingestão de dados mostra o status da atualização mais recente. Para acionar uma atualização, clique em Sincronizar agora . A seção Data Ingest também inclui um link para o pipeline DLT que atualiza a tabela.
programar atualizações periódicas
Para tabelas on-line com modo de sincronização Snapshot ou Triggered , o senhor pode programar atualizações periódicas automáticas. O programa de atualização é gerenciado pelo DLT pipeline que atualiza a tabela.
- No Catalog Explorer, navegue até a tabela on-line.
- Na seção Data Ingest (Ingestão de dados ), clique no link para o pipeline.
- No canto superior direito, clique em programar e adicione um novo programar ou atualize o programar existente.
Excluir uma tabela on-line usando a interface
Na página da tabela on-line, selecione Excluir no menu kebab.
Trabalhar com tabelas on-line usando APIs
O senhor também pode usar o SDK da Databricks ou a API REST para criar e gerenciar tabelas on-line.
Para obter informações de referência, consulte a documentação de referência do site Databricks SDK para Python ou do site REST API.
Requisitos
Databricks SDK versão 0.20 ou acima.
Criar uma tabela on-line usando APIs
- Databricks SDK - Python
- REST API
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)
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"]
}
}'
A tabela on-line começa a ser sincronizada automaticamente após ser criada.
Obtenha o status e acione refresh usando APIs
O senhor pode acessar view o status e a especificação da tabela on-line seguindo o exemplo abaixo. Se a tabela on-line não for contínua e o senhor quiser acionar um refresh manual dos dados, poderá usar o pipeline API para fazer isso.
Use o ID pipeline associado à tabela on-line na especificação da tabela on-line e comece uma nova atualização no pipeline para acionar o refresh. Isso equivale a clicar em Sincronizar agora na interface de usuário da tabela on-line no Catalog Explorer.
- Databricks SDK - Python
- REST API
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 '
'DLT: '
'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)
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 DLT: 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
}'
Excluir uma tabela on-line usando APIs
- Databricks SDK - Python
- REST API
w.online_tables.delete('main.default.my_online_table')
curl --request DELETE \
"https://xxx.databricks.com/api/2.0/online-tables/main.default.my_online_table" \
--header "Authorization: Bearer xxx"
A exclusão da tabela on-line interrompe qualquer sincronização de dados em andamento e libera todos os seus recursos.
Servir mesa on-line uso de dados a Feature Serving endpoint
Para modelos e aplicativos hospedados fora do site Databricks, o senhor pode criar um Feature Serving endpoint para atender a recursos de tabelas on-line. O endpoint disponibiliza o recurso em baixa latência usando um REST API.
-
Criar uma especificação de recurso.
Ao criar uma especificação de recurso, o senhor especifica a tabela Delta de origem. Isso permite que a especificação de recurso seja usada em cenários off-line e on-line. Para pesquisas on-line, o servidor endpoint usa automaticamente a tabela on-line para realizar pesquisas de recurso de baixa latência.
A tabela de origem Delta e a tabela on-line devem usar o mesmo primário key.
A especificação do recurso pode ser visualizada em Function tab no Catalog Explorer.
Pythonfrom 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"
)
]
) -
Crie um Feature Serving endpoint.
Esta etapa pressupõe que o senhor tenha criado uma tabela on-line chamada
user_preferences_online_table
que sincroniza os dados da tabela Deltauser_preferences
. Use a especificação de recurso para criar um Feature Serving endpoint. O endpoint disponibiliza os dados por meio de uma API REST usando a tabela on-line associada.
O usuário que realiza essas operações deve ser o proprietário da tabela off-line e da tabela on-line.
- Databricks SDK - Python
- Python API
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"
)
]
)
)
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
)
)
)
-
Obtenha dados do site Feature Serving endpoint.
Para acessar o endpoint da API, envie uma solicitação HTTP GET para o URL do endpoint. O exemplo mostra como fazer isso usando as APIs do Python. Para outras linguagens e ferramentas, consulte Feature Serving.
Python# Set up credentials
export DATABRICKS_TOKEN=...Pythonurl = "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'])
Use tabelas on-line com aplicativos RAG
Os aplicativos RAG são um caso de uso comum para tabelas on-line. O senhor cria uma tabela on-line para os dados estruturados de que o aplicativo RAG precisa e a hospeda em um site Feature Serving endpoint. O aplicativo RAG usa o site Feature Serving endpoint para procurar dados relevantes na tabela on-line.
As etapas típicas são as seguintes:
- Crie um Feature Serving endpoint.
- Crie uma ferramenta usando o LangChain ou qualquer pacote semelhante que use o endpoint para procurar dados relevantes.
- Use a ferramenta em um agente LangChain ou em um agente semelhante para recuperar dados relevantes.
- Crie um modelo de serviço endpoint para hospedar o aplicativo.
Para obter instruções passo a passo e um exemplo de Notebook, consulte exemplo de recurso engenharia: aplicativo RAG estruturado.
Notebook exemplos
O Notebook a seguir ilustra como publicar o recurso em tabelas on-line para o tempo real de atendimento e pesquisa automática de recurso.
Demonstração de tabelas on-line Notebook
Usar tabelas on-line com o Mosaic AI Model Serving
O senhor pode usar tabelas on-line para procurar o recurso para Mosaic AI Model Serving. Quando o senhor sincroniza uma tabela de recurso com uma tabela on-line, os modelos treinados usando recurso dessa tabela de recurso procuram automaticamente os valores de recurso da tabela on-line durante a inferência. Nenhuma configuração adicional é necessária.
-
Use um
FeatureLookup
para treinar o modelo.Para o treinamento de modelos, use o recurso da tabela de recursos off-line no conjunto de treinamento de modelos, conforme mostrado no exemplo a seguir:
Pythontraining_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'],
) -
Servir o modelo com o Mosaic AI Model Serving. O modelo procura automaticamente o recurso na tabela on-line. Para obter detalhes, consulte Pesquisa automática de recurso com Databricks servindo modelo.
Permissões de usuário
Você deve ter as seguintes permissões para criar uma tabela on-line:
SELECT
privilégio na tabela de origem.USE_CATALOG
privilégio no catálogo de destino.USE_SCHEMA
e privilégioCREATE_TABLE
no esquema de destino.
Para gerenciar o pipeline de sincronização de dados de uma tabela on-line, o senhor deve ser o proprietário da tabela on-line ou ter o privilégio REFRESH na tabela on-line. Os usuários que não têm os privilégios USE_CATALOG e USE_SCHEMA no catálogo não verão a tabela on-line no Catalog Explorer.
O metastore do Unity Catalog deve ter a versão 1.0 do Privilege Model.
Modelo de permissão de endpoint
Uma entidade de serviço exclusiva é criada automaticamente para um Feature Serving ou modelo de serviço endpoint com permissões limitadas necessárias para consultar dados de tabelas on-line. Essa entidade de serviço permite que o endpoint acesse os dados independentemente do usuário que criou o recurso e garante que o endpoint possa continuar a funcionar se o criador deixar o workspace.
A vida útil desta entidade de serviço é a vida útil do site endpoint. Os logs de auditoria podem indicar registros gerados pelo sistema para o proprietário do catálogo do Unity Catalog que concede os privilégios necessários a essa entidade de serviço.
Limitações
- Somente uma tabela on-line é suportada por tabela de origem.
- Uma tabela on-line e sua tabela de origem podem ter no máximo 1000 colunas.
- As colunas dos tipos de dados ARRAY, MAP ou STRUCT não podem ser usadas como chave primária na tabela on-line.
- Se uma coluna for usada como primária key na tabela on-line, todas as linhas da tabela de origem em que a coluna contém valores nulos serão ignoradas.
- Tabelas externas, do sistema e internas não são suportadas como tabelas de origem.
- As tabelas de origem sem o feed de dados de alterações Delta ativado suportam apenas o modo de sincronização Snapshot .
- Delta Sharing são compatíveis apenas com o modo Snapshot modo de sincronização.
- Os nomes de catálogo, esquema e tabela da tabela on-line só podem conter caracteres alfanuméricos e sublinhados, e não devem começar com números. Traços (
-
) não são permitidos. - As colunas do tipo strings são limitadas a 64 KB de comprimento.
- Os nomes das colunas são limitados a 64 caracteres.
- O tamanho máximo da linha é de 2 MB.
- O tamanho combinado de todas as tabelas on-line em um metastore do Unity Catalog durante a visualização pública é de 2 TB de dados de usuário não compactados.
- O máximo de consultas por segundo (QPS) é 12.000. Entre em contato com a equipe do Databricks account para aumentar o limite.
Solução de problemas
Não vejo a opção Criar tabela on-line
A causa geralmente é que a tabela da qual você está tentando sincronizar (a tabela de origem) não é um tipo compatível. Certifique-se de que o Securable Kind da tabela de origem (mostrado em Catalog Explorer Details tab) seja uma das opções compatíveis abaixo:
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
Não consigo selecionar os modos de sincronização acionada ou contínua ao criar uma tabela on-line
Isso acontece se a tabela de origem não tiver o feed de dados de alteração Delta ativado ou se for uma visualização ou materializada view. Para usar o modo de sincronização Incremental , ative o feed de dados de alteração na tabela de origem ou use uma tabela que não sejaview.
A atualização da tabela online falha ou o status é exibido offline
Para começar a solucionar esse erro, clique no ID pipeline que aparece na Visão geral tab da tabela on-line no Catalog Explorer.
Na página da interface do usuário do pipeline que aparece, clique na entrada que diz "Failed to resolve flow '__online_table".
Um pop-up aparece com detalhes na seção Detalhes do erro .
As causas comuns de erros incluem o seguinte:
-
A tabela de origem foi excluída ou excluída e recriada com o mesmo nome, enquanto a tabela on-line estava sendo sincronizada. Isso é particularmente comum com tabelas on-line contínuas, porque elas estão constantemente sincronizadas.
-
A tabela de origem não pode ser acessada por meio da computação sem servidor devido às configurações de firewall. Nessa situação, a seção Detalhes do erro pode mostrar a mensagem de erro "Failed to começar the DLT serviço on clustering xxx...".
-
O tamanho agregado das tabelas on-line excede o limite de 2 TB (tamanho não comprimido) em toda a metástore. O limite de 2 TB refere-se ao tamanho não compactado após a expansão da tabela Delta em formato orientado por linha. O tamanho da tabela no formato de linha pode ser significativamente maior do que o tamanho da tabela Delta mostrada no Catalog Explorer, que se refere ao tamanho compactado da tabela em um formato orientado por coluna. A diferença pode chegar a 100x, dependendo do conteúdo da tabela.
Para estimar o tamanho não compactado e expandido por linha de uma tabela Delta, use a seguinte consulta de um warehouse SQL sem servidor. A consulta retorna o tamanho estimado da tabela expandida em bytes. A execução bem-sucedida dessa consulta também confirma que a computação sem servidor pode acessar a tabela de origem.
SQLSELECT sum(length(to_csv(struct(*)))) FROM `source_table`;