Nota
O acesso a esta página requer autorização. Pode tentar iniciar sessão ou alterar os diretórios.
O acesso a esta página requer autorização. Pode tentar alterar os diretórios.
A API Spark Data Source permite-lhe ler e escrever diretamente em bases de dados externas a partir do Azure Databricks. Use-o apenas quando precisar da flexibilidade total do motor Spark, quiser executar consultas nativas na fonte, ou precisar de acesso de escrita a sistemas externos. Em geral, o Azure Databricks recomenda acesso governado, apenas de leitura, com envio automático de consultas Spark ou SQL para processamento. Consulte O que é a federação de consultas?.
A API Spark Data Source tem comportamentos específicos para conectividade, execução de consultas e deteção de esquemas.
- A carga de trabalho principal e quaisquer transformações subsequentes do Spark correm no cluster Azure Databricks Spark.
- Ao usar esta
queryopção, a instrução SQL especificada corre inteiramente na fonte de dados externa. O Spark obtém os resultados sem realizar um pushdown de transformação na cadeia de consulta. - A ligação requer um conector incluído no Azure Databricks, um driver JDBC fornecido pelo utilizador ou uma fonte de dados personalizada PySpark.
- O Spark lê automaticamente o esquema da tabela externa da base de dados e mapeia os seus tipos para os tipos SQL do Spark.
Utilize um conector incluído
O Databricks Runtime inclui conectores otimizados para fontes de dados comuns. Consulte Conectores agrupados suportados para a lista completa.
Os conectores agrupados usam host e port como opções separadas em vez de uma string completa de URL JDBC.
Leia dados usando uma consulta pass-through
Usar esta query opção garante que a lógica de filtro e de junção é executada na base de dados de origem antes dos dados chegarem ao Spark. Para acesso de leitura governado com pushdown automático de consultas e delegação de permissões do Catálogo Unity através de vistas, considere, em vez disso, consultas remotas.
df = (spark.read
.format("sqlserver")
.option("host", "<your-sql-server-instance>.database.windows.net")
.option("user", dbutils.secrets.get(scope="<scope>", key="<user>"))
.option("password", dbutils.secrets.get(scope="<scope>", key="<password>"))
.option("database", "<database-name>")
.option("query", "SELECT id, name FROM users WHERE active = 1")
.load())
Escrever dados
Especifique um modo de escrita com .mode() para controlar como os dados são escritos.
append Use para adicionar linhas a uma tabela existente ou overwrite para substituir o seu conteúdo.
(df.write
.format("sqlserver")
.mode("overwrite")
.option("host", "<your-sql-server-instance>.database.windows.net")
.option("user", dbutils.secrets.get(scope="<scope>", key="<user>"))
.option("password", dbutils.secrets.get(scope="<scope>", key="<password>"))
.option("database", "<database-name>")
.option("dbtable", "<table-name>")
.save())
Use uma ligação JDBC UC
Se um conector específico da fonte não estiver incluído, ou se quiser usar uma versão específica do driver JDBC, use uma ligação JDBC Unity Catalog. Isto permite-te centralizar a gestão de credenciais e trazer o teu próprio driver JDBC.
Uma ligação do Unity Catalog via JDBC oferece várias vantagens em relação à utilização direta de um conector incluído ou de um controlador JDBC. Com uma ligação ao Catálogo Unity da JDBC, pode:
- Leve o seu próprio driver JDBC JAR para qualquer base de dados que suporte JDBC.
- Crie a ligação uma vez e reutilize-a em clusters serverless, standards e dedicados.
- Utilize o acesso governado à fonte de dados usando um objeto de ligação do Unity Catalog.
- Ocultar as credenciais de ligação ao utilizador que faz a consulta.
- Lê e escreve em bases de dados externas através da API de Fonte de Dados Spark.
Para usar uma ligação JDBC Unity Catalog, especifique databricks.connection nas opções do Spark:
df = (spark.read
.format("jdbc")
.option("databricks.connection", "<connection-name>")
.option("query", "SELECT * FROM external_table")
.load())
Para instruções de configuração, veja ligação JDBC.
Use um conector personalizado em clusters dedicados
Em clusters dedicados (clássicos), pode instalar conectores de fonte de dados Spark de terceiros ou drivers JDBC que não estejam incluídos com o Databricks Runtime.
Use esta abordagem quando:
- Precisa de um conector Spark de terceiros para sistemas como MongoDB, Cassandra, Couchbase ou Elasticsearch.
- Precisas de uma versão específica do driver que não esteja incluída no runtime.
- Deves instalar um driver JDBC diretamente no cluster sem configurar uma ligação ao Unity Catalog.
Instale um conector ou controlador
Instale a biblioteca no seu cluster através de Computação>o seu cluster>Bibliotecas>Instalar nova. Podes usar as coordenadas do Maven diretamente sem descarregar ou carregar JARs. Reinicie o cluster para que a biblioteca entre em vigor.
Ler dados
Depois de o conector estar instalado, utilize o nome do formato do conector e as opções de conexão necessárias para ler dados.
df = (spark.read
.format("mongodb")
.option("connection.uri", "mongodb://<hostname>:27017")
.option("database", "<database-name>")
.option("collection", "<collection-name>")
.load())
Escrever dados
Use o mesmo nome de formato e opções de ligação para escrever dados de volta na fonte.
(df.write
.format("mongodb")
.mode("overwrite")
.option("connection.uri", "mongodb://<hostname>:27017")
.option("database", "<database-name>")
.option("collection", "<collection-name>")
.save())
Considerations
Tenha o seguinte em mente ao usar conectores personalizados em clusters dedicados.
- O driver ou conector está disponível apenas no cluster onde foi instalado.
- Os ficheiros JAR personalizados de terceiros para Spark não são suportados em clusters do Databricks SQL, serverless ou de modo de acesso padrão. Para esses tipos de computação, use conectores agrupados ou ligações do Catálogo Unity JDBC.
Fontes de dados personalizadas do PySpark
A API Python DataSource permite-lhe construir conectores de dados personalizados inteiramente em Python, sem JARs ou bibliotecas baseadas em JVM. Use isto quando precisar de se ligar a APIs REST, aplicações SaaS ou qualquer sistema sem interface JDBC, ou quando quiser gerar dados sintéticos programáticamente. A API suporta tanto leituras e escritas em lote como em streaming.
Note
As fontes de dados personalizadas do PySpark requerem Databricks Runtime 15.4 LTS ou superior.
Para configuração, exemplos e referência de API, consulte fontes de dados personalizadas PySpark.
Compare estratégias de integração
A tabela seguinte compara a API da Spark Data Source com a Lakehouse Federation e a Lakeflow Connect para o ajudar a escolher a abordagem certa para o seu caso de uso.
| Feature | API de Fonte de Dados Spark | Federação Lakehouse | Conexão Lakeflow |
|---|---|---|---|
| Caso de uso principal | ETL complexo, lógica Spark personalizada, consultas pass-through | Consultas ad hoc, relatórios de BI | Ingestão automatizada em grande escala |
| Movimentação de dados | Carregado na memória do Spark (efémero) | Carregado na memória do Spark (efémero) | Copiado para Delta Lake (persistente) |
| Execução da consulta | Descida manual com a opção nativa query |
Envio automático para níveis inferiores dos filtros, junções e agregações de Spark e SQL | Não aplicável (replicação completa da tabela) |
| Governance | Ligação ao Catálogo Unity (JDBC) ou escopos secretos | Catálogo Unity (catálogo federado) | Unity Catalog (pipeline gerido) |
| Melhor para | Utilizadores avançados que precisam de flexibilidade total do Spark | Minimizar o movimento de dados enquanto preserva a governação | Processos de CDC de produção e de ingestão |
Conectores agrupados suportados
As seguintes fontes de dados estão agrupadas no Databricks Runtime e podem ser chamadas diretamente através do Spark. As leituras e escritas são suportadas em clusters dedicados e padrão.
Note
As operações de escrita na computação sem servidor são suportadas no caso de PostgreSQL, SQL Server, MySQL, Snowflake e Redshift. Consulte Opções de escrita sem servidor para conectores agrupados para conhecer as opções de conector suportadas.
| Fonte de dados |
spark.format() Nome |
|---|---|
| PostgreSQL | "postgresql" |
| SQL Server | "sqlserver" |
| MySQL e MariaDB | "mysql" |
| Snowflake | "snowflake" |
| Amazon Redshift | "redshift" |
| Google BigQuery (plataforma de análise de dados) | "bigquery" |
| Azure Synapse | "SQLDW" |
| HTTP | "http" |
Limitations
As seguintes limitações aplicam-se ao utilizar a API Spark Data Source no Azure Databricks.
- As opções Spark para fontes de dados agrupadas limitam-se a
query,dbtable, e a um pequeno conjunto de opções específicas para conectores. - JARs Spark personalizados de terceiros só podem ser instalados em clusters dedicados. Para clusters serverless ou padrão, utilize conectores incluídos ou ligações JDBC do Unity Catalog.
- As fontes de dados personalizadas do PySpark requerem Databricks Runtime 15.4 LTS ou superior.