Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
Importante
Esse recurso está em Visualização Pública.
Use o Streaming Estruturado para gravar no Lakebase com processamento em lote integrado, repetições automáticas e autenticação gerenciada pelo workspace.
Quando usar o coletor do Lakebase
Use o coletor do Lakebase para gravações de streaming de baixa latência para o Lakebase. Esse coletor não exige que você implemente funções foreachBatch personalizadas para processar o envio em lote, o gerenciamento de conexões e o tratamento de erros.
Os casos de uso comuns incluem:
- Atualize os bancos de dados de aplicativos em tempo real para dashboards operacionais ou recursos voltados para o cliente.
- Sincronizar dados de alteração contínua, como resultados de streaming agregados ou filtrados, em um banco de dados transacional.
- Grave a saída de uma consulta de Structured Streaming em uma tabela do Lakebase com latência inferior a um segundo usando o modo em tempo real.
Para sincronizar dados do Lakebase com tabelas do Delta Lake no Lakehouse, na direção inversa, consulte Lakebase Change Data Feed.
Requisitos
- Databricks Runtime 18 ou superior
- Computação clássica com modos de acesso dedicados ou padrão.
- um banco de dados Lakebase
Conectar a um banco de dados
O coletor lakebase dá suporte aos seguintes métodos de conexão:
Tabelas do Lakebase registradas no Catálogo do Unity
Para tabelas do Lakebase registradas no Catálogo do Unity, o conector gerencia automaticamente as credenciais e usa a identidade do usuário ou da entidade de serviço que executa a consulta. Se a tabela não existir, o conector criará a tabela.
Para registrar um banco de dados do Lakebase com o Catálogo do Unity, consulte Registrar um banco de dados lakebase no Catálogo do Unity.
Para gravar em uma tabela do Lakebase, use o método .toTable() com um nome de tabela totalmente qualificado, catalog.schema.table. O exemplo a seguir mostra as opções necessárias, além da opção opcional upsertkey :
Python
(df.writeStream
.outputMode("update")
.option("upsertkey", "<primary-key-column>") # Optional. Inferred from the table's primary key if omitted.
.option("checkpointLocation", "/Volumes/<catalog>/<schema>/<volume>/<checkpoint-name>")
.toTable("<catalog>.<schema>.<table>")
)
Scala
df.writeStream
.outputMode("update")
.option("upsertkey", "<primary-key-column>") // Optional. Inferred from the table's primary key if omitted.
.option("checkpointLocation", "/Volumes/<catalog>/<schema>/<volume>/<checkpoint-name>")
.toTable("<catalog>.<schema>.<table>")
Substitua os seguintes marcadores:
-
<catalog>.<schema>.<table>: o nome totalmente qualificado da tabela de destino. O catálogo do Unity Catalogcatalogé o catálogo que você criou quando registrou o banco de dados Lakebase; consulte Registrar um banco de dados Lakebase no Unity Catalog. Se a tabela não existir, o conector a criará. -
<primary-key-column>: opcional. Uma lista separada por vírgulas das colunas que formam a chave upsert, por exemploidouuser_id,event_type. Se você omitirupsertkey, o coletor inferirá a chave com base na chave primária da tabela de destino. Veja o comportamento de upsert. -
/Volumes/<catalog>/<schema>/<volume>/<checkpoint-name>: um caminho de volume do Catálogo do Unity em que a consulta armazena o ponto de verificação. Você também pode usar um URI de armazenamento de objetos de nuvem. O local deve ser o armazenamento para o qual você pode gravar, não o disco local e deve ser exclusivo para cada consulta de streaming. Isso é independente da tabela de destino. Consulte Pontos de verificação de streaming estruturados.
Para configurações opcionais, como batchsize e batchinterval, consulte as opções de configuração.
Tabelas do Lakebase não registradas no Catálogo do Unity
Para tabelas do Lakebase não registradas no Catálogo do Unity, o conector gerencia automaticamente as credenciais e usa a identidade do usuário ou da entidade de serviço que executa a consulta. Se a tabela não existir, o conector criará a tabela.
Para gravar em uma tabela Lakebase, use as opções endpoint e dbtable. O exemplo a seguir também inclui as opções opcionais database e upsertkey:
Python
(df.writeStream
.format("postgresql")
.outputMode("update")
.option("endpoint", "<project-id>.<branch-id>.<endpoint-id>")
.option("database", "<database>") # Optional. Defaults to databricks_postgres.
.option("dbtable", "<schema>.<table>")
.option("upsertkey", "<primary-key-column>") # Optional. Inferred from the table's primary key if omitted.
.option("checkpointLocation", "/Volumes/<catalog>/<schema>/<volume>/<checkpoint-name>")
.start()
)
Scala
df.writeStream
.format("postgresql")
.outputMode("update")
.option("endpoint", "<project-id>.<branch-id>.<endpoint-id>")
.option("database", "<database>") // Optional. Defaults to databricks_postgres.
.option("dbtable", "<schema>.<table>")
.option("upsertkey", "<primary-key-column>") // Optional. Inferred from the table's primary key if omitted.
.option("checkpointLocation", "/Volumes/<catalog>/<schema>/<volume>/<checkpoint-name>")
.start()
Substitua os seguintes marcadores:
-
<project-id>.<branch-id>.<endpoint-id>: seu ponto de extremidade do Lakebase. Localize os três valores no nome do recurso no menu Obter ID da guia Computação , que tem o formatoprojects/<project-id>/branches/<branch-id>/endpoints/<endpoint-id>. Consulte identificadores de computação. -
<database>: opcional. O nome do banco de dados Postgres de destino. Usadatabricks_postgrescomo padrão. Consulte Gerenciar bancos de dados. -
<schema>.<table>: a tabela de destino no formatoschema.table. Se você omitir o esquema, o coletor usará o esquemapublic. Use identificadores simples que comecem com uma letra ou caractere de sublinhado e contenham apenas letras, números e sublinhados; identificadores entre aspas e caracteres especiais, como hífens, não são suportados. -
<primary-key-column>: opcional. Uma lista separada por vírgulas das colunas que formam a chave upsert, por exemploidouuser_id,event_type. Se você omitirupsertkey, o coletor inferirá a chave com base na chave primária da tabela de destino. Veja o comportamento de upsert. -
/Volumes/<catalog>/<schema>/<volume>/<checkpoint-name>: um caminho de volume do Catálogo do Unity em que a consulta armazena o ponto de verificação. Você também pode usar um URI de armazenamento de objetos de nuvem. O local deve ser o armazenamento para o qual você pode gravar, não o disco local e deve ser exclusivo para cada consulta de streaming. Isso é independente da tabela de destino. Consulte Pontos de verificação de streaming estruturados.
Para configurações opcionais, como batchsize e batchinterval, consulte as opções de configuração.
Opções de configuração
O coletor retorna um erro ao encontrar opções não reconhecidas, JDBC_STREAMING_SINK_INVALID_OPTIONS.
As seguintes opções se aplicam a todos os métodos de conexão:
| Chave | Padrão | Description |
|---|---|---|
batchinterval |
100 milliseconds |
Optional. O tempo máximo para manter linhas no buffer antes da liberação. Por exemplo, "50 milliseconds". |
batchsize |
1000 |
Optional. O número máximo de linhas para cada transação de banco de dados. |
checkpointLocation |
None | Required. Caminho para um diretório de ponto de verificação, como um volume do Catálogo do Unity (/Volumes/<catalog>/<schema>/<volume>/<checkpoint-name>). Deve ser exclusivo para cada consulta. Consulte Pontos de verificação de streaming estruturados. |
upsertkey |
None | Optional. Uma lista separada por vírgula de nomes de colunas que formam a chave de upsert. Por exemplo, "id" ou "user_id,event_type". Se você especificar upsertkey, as colunas deverão corresponder à chave primária da tabela ou a consulta falhará. Se você omitir isso, o coletor usará a chave primária de forma automática. Para obter mais informações, consulte Comportamento do Upsert. |
Tabelas do Lakebase não registradas no Catálogo do Unity
As seguintes opções se aplicam quando você se conecta a uma tabela do Lakebase não registrada no Catálogo do Unity:
| Chave | Padrão | Description |
|---|---|---|
database |
databricks_postgres |
Optional. O nome do banco de dados PostgreSQL de destino. |
dbtable |
None | Required. O nome da tabela de destino no formato schema.table. Se você não especificar um esquema, o valor de esquema padrão será public. Use identificadores simples que comecem com uma letra ou um sublinhado e contenham apenas letras, números e sublinhados. Não coloque entre aspas nomes de tabela ou de esquema; identificadores entre aspas e nomes com caracteres especiais, como hifens, não têm suporte. |
endpoint |
None | Required. O endpoint do Lakebase, no formato project_id.branch_id ou project_id.branch_id.endpoint_id. O endpoint_id é opcional; se você omitir e a ramificação tiver um único ponto de extremidade de leitura/gravação, o coletor selecionará esse ponto de extremidade por padrão. |
Comportamento de upsert
Quando existem chaves de upsert, seja especificadas com upsertkey ou inferidas pelo conector com base nas chaves primárias da tabela, o conector faz upsert na tabela com a sintaxe INSERT INTO ... ON CONFLICT (<upsert_key>) DO UPDATE SET ... do PostgreSQL.
Quando não existem chaves de upsert, o coletor executa inserções. O modo de saída de uma consulta não tem efeito sobre o comportamento de upsert ou insert.
As upsertkey colunas devem:
- Seja um subconjunto não vazio das colunas DataFrame.
- Faça a correspondência exata com o
PRIMARY KEYda tabela de destino. Se as colunas especificadas não corresponderem à chave primária, a consulta falhará. - Sejam tipos comparáveis, como tipos numéricos ou de cadeia de caracteres. Para evitar deadlocks de banco de dados durante gravações simultâneas, o coletor classifica linhas por chave de upsert em cada lote. As chaves de upsert não oferecem suporte a tipos complexos ou estruturas.
Os nomes de coluna são citados automaticamente usando o padrão do PostgreSQL, aspas duplas ", que trata palavras-chave reservadas e nomes que usam maiúsculas e minúsculas.
Os nomes de tabela e esquema devem usar identificadores simples que começam com uma letra ou sublinhado e contêm apenas letras, números e sublinhados. O coletor não dá suporte a identificadores entre aspas ou caracteres especiais, como hifens, em nomes de tabela ou esquema.
Ajuste de desempenho
Envio em lote e contrapressão
Uma descarga é acionada quando uma das condições é atendida:
- O buffer chega a linhas
batchsize, com o padrão1000. - A idade do buffer excede
batchinterval, cujo padrão é100 milliseconds.
Quando o banco de dados não consegue acompanhar a taxa de dados de entrada, o coletor propaga a contrapressão upstream até a origem.
Diretrizes de latência e taxa de transferência:
- Para cargas de trabalho de baixa latência com modo em tempo real, reduza
batchintervalpara garantir um tempo máximo menor antes da liberação. Consulte o modo em tempo real no Streaming Estruturado para obter conceitos e exemplos de modo em tempo real para obter um exemplo de código. - Para cargas de trabalho de alta taxa de transferência, aumente
batchsizepara reduzir a sobrecarga para cada transação.
Comportamento de conexão
O coletor usa o pool de conexões em executores. Por padrão, cada tarefa usa uma conexão de banco de dados.
O Databricks recomenda que você use o valor padrão da tarefa 1 para cada conexão. Se você aumentar o número de tarefas para cada conexão, poderá causar contenções de conexão e aumentar as latências para conexões de alta taxa de transferência.
Para configurar a proporção de tarefas para conexões, defina a configuração do Spark spark.databricks.sql.streaming.jdbc.tasksPerConnection. Se o banco de dados de destino tiver um limite de conexão baixo, reduza o número de partições aleatórias ou aumente spark.databricks.sql.streaming.jdbc.tasksPerConnection.
O coletor repete automaticamente erros JDBC temporários, incluindo falhas de conexão, deadlocks e limitação de taxa. Se o coletor esgotar todas as tentativas, a consulta falhará.
Gatilhos e modos de saída com suporte
Gatilhos
Esta tabela mostra o suporte para tipos de gatilho de Streaming Estruturado:
| Gatilho | Supported |
|---|---|
realTime |
Yes |
ProcessingTime |
Yes |
AvailableNow |
Yes |
Once |
Yes |
Modos de saída
Esta tabela mostra o suporte para modos de saída de Streaming Estruturado:
| Modo de saída | Supported |
|---|---|
update |
Yes |
append |
Sim. O comportamento é idêntico a update. A consulta é atualizada quando a tabela de destino tem uma chave primária; caso contrário, a consulta é inserida. Veja o comportamento de upsert. |
complete |
No |
Limitações
- Não há suporte para computação sem servidor e Pipelines Declarativos do Lakeflow Spark.
- Somente o Lakebase é compatível como destino de gravação. Não há suporte para bancos de dados compatíveis com PostgreSQL externos.