Ingerir arquivos de servidores SFTP
Visualização
O conector SFTP está em versão prévia pública.
Aprenda como importar arquivos de servidores SFTP usando LakeFlow Connect. O conector SFTP amplia a funcionalidade do Auto Loader para fornecer ingestão incremental e segura de servidores SFTP com governança do Unity Catalog.
recurso principal
O conector SFTP oferece o seguinte:
- Autenticação baseada em key primária e senha.
- Ingestão e processamento incremental de arquivos com garantia de processamento exatamente uma vez.
- Inferência automática de esquemas, evolução e recuperação de dados.
- Governança Unity Catalog para ingestão segura e credenciais.
- Suporte a uma ampla variedade de formatos de arquivo:
JSON,CSV,XML,PARQUET,AVRO,TEXT,BINARYFILEeORC. - Suporte integrado para correspondência de padrões e curingas para segmentar facilmente subconjuntos de dados.
- Disponibilidade em todos os tipos compute , incluindo pipeline declarativo LakeFlow Spark , Databricks SQL, serverless e clássico com Databricks Runtime 17.3 e superior.
Antes de começar
Para criar a conexão e o pipeline de ingestão, você precisa do seguinte:
- Um workspace com Unity Catalog ativado.
CREATE CONNECTIONprivilégios.- Computação que utiliza Databricks Runtime versão 17.3 ou superior.
Configurar SFTP
Primeiro, confirme se o servidor SFTP de origem está acessível ao seu ambiente de cluster Databricks:
- Certifique-se de que o servidor remoto esteja disponível na VPC que foi configurada com seu workspace.
- Certifique-se de que suas regras SSH permitam o intervalo de IPs da VPC do Databricks (se você estiver usando compute clássica) ou os IPs estáveis (se estiver usando compute serverless ).
- A partir do plano compute clássico, configure um endereço IP estável com um balanceador de carga, gateway NAT, gateway de internet ou equivalente e conecte-o à sub-rede onde Databricks compute está implantado. Isso permite que o recurso compute compartilhe um endereço IP público estável que pode ser adicionado à lista de permissões do servidor SFTP. Para obter instruções sobre como configurar as definições de rede, consulte Emparelhamento de VPC.
- Na camada compute serverless , veja o passo 1: Crie uma configuração de conectividade de rede e copie os IPs estáveis para obter um IP de saída estável.
Criar a conexão
Crie uma conexão Unity Catalog para armazenar suas credenciais SFTP. Você deve ter privilégios CREATE CONNECTION .
O conector suporta os seguintes métodos de autenticação:
- keyprivada PEM
- Autenticação baseada em senha
Databricks recomenda o uso da autenticação key privada PEM. A Databricks também recomenda o uso de credenciais com o mínimo de privilégios no servidor SFTP de origem (por exemplo, um usuário sem privilégios de root com acesso somente leitura).
Ao criar o pipeline, o conector tenta encontrar automaticamente uma conexão que você possa usar e que corresponda ao host. Se houver várias conexões correspondentes, o conector escolherá a primeira conexão que se conectar com sucesso ao host. No entanto, a Databricks recomenda que você especifique o usuário explicitamente. Isso garante que o conector não escolha uma conexão para outro usuário com acesso ao host.
key privada PEM (recomendada)
- Catalog Explorer
- SQL
-
No workspace Databricks , clique em Catálogo > Dados Externos > Conexões .
-
Clique em Criar conexão .
-
Na página "Informações básicas de conexão" do assistente de configuração de conexão , insira um nome de conexão exclusivo.
-
Para o tipo de conexão, selecione SFTP .
-
Para o tipo de autenticação , selecione Chave privada PEM .
-
Clique em Avançar .
-
Na página de Autenticação , em Host , insira o nome do host do servidor remoto.
-
No campo Usuário , insira a identidade do usuário utilizada para acessar a instância externa.
-
Clique em Avançar .
-
Na página Detalhes da conexão , insira a key privada no formato PEM. Forneça também a senha key , se aplicável.
-
Se você quiser ignorar a verificação da impressão digital key do host, desmarque a opção Impor impressão digital key do host .
Quando esta opção é selecionada, a conexão só prossegue se a key pública do servidor corresponder à impressão digital SHA-256 esperada. Quando desativada, a conexão prossegue independentemente da partida. Consulte o administrador da sua rede antes de desativar esta opção.
-
Se a opção "Impor impressão digital key do host" estiver marcada, insira a impressão digital do servidor SFTP.
Você pode obter a impressão digital com o administrador do servidor ou usando um comando CLI . Você também pode pressionar Testar e criar conexão > Testar . A mensagem de erro resultante fornece a impressão digital. Por exemplo:
ECDSA key fingerprint is SHA256:XXX/YYY -
Clique em Testar e criar conexão .
-
Se a conexão for bem-sucedida, clique em Criar .
-- Create a connection using a username and SSH private key.
CREATE CONNECTION my_sftp_connection
TYPE sftp
OPTIONS (
host 'my.sftpserver.com',
-- The following credentials can also be used in-line, but Databricks recommends
-- accessing them using the secrets scope.
user secret('my_secret_scope','my_sftp_username'),
pem_private_key secret('my_secret_scope','my_sftp_private_key'),
-- Port for the host
port '22',
-- Passphrase for the private key (optional).
pem_key_passphrase secret('my_secret_scope','my_sftp_private_key_passphrase'),
-- SFTP server fingerprint. You can retrieve this from your server administrator or using CLI commands.
key_fingerprint 'SHA256:ASampleFingerprintValueZy...',
);
Autenticação baseada em senha
- Catalog Explorer
- SQL
-
No workspace Databricks , clique em Catálogo > Dados Externos > Conexões .
-
Clique em Criar conexão .
-
Na página "Informações básicas de conexão" do assistente de configuração de conexão , insira um nome de conexão exclusivo.
-
Para o tipo de conexão, selecione SFTP .
-
Em Tipo de autenticação , selecione Nome de usuário e senha .
-
Clique em Avançar .
-
Na página de Autenticação , em Host , insira o nome do host do servidor remoto.
-
No campo Usuário , insira a identidade do usuário utilizada para acessar a instância externa.
-
No campo Senha , insira a senha da instância externa.
-
Clique em Avançar .
-
Se você quiser ignorar a verificação da impressão digital key do host, desmarque a opção Impor impressão digital key do host .
Quando esta opção é selecionada, a conexão só prossegue se a key pública do servidor corresponder à impressão digital SHA-256 esperada. Quando desativada, a conexão prossegue independentemente da partida. Consulte o administrador da sua rede antes de desativar esta opção.
-
Se a opção "Impor impressão digital key do host" estiver marcada, insira a impressão digital do servidor SFTP.
Você pode obter a impressão digital com o administrador do servidor ou usando um comando CLI . Você também pode pressionar Testar e criar conexão > Testar . A mensagem de erro resultante fornece a impressão digital. Por exemplo:
ECDSA key fingerprint is SHA256:XXX/YYY -
Clique em Testar e criar conexão .
-
Se a conexão for bem-sucedida, clique em Criar .
-- Create a connection using a username and password.
CREATE CONNECTION my_sftp_connection
TYPE sftp
OPTIONS (
host 'my.sftpserver.com',
user secret('my_secret_scope','my_sftp_username'),
password secret('my_secret_scope','my_sftp_password'),
-- Port for the host.
port '22',
-- SFTP server fingerprint. You can retrieve this from your server administrator or using CLI commands.
key_fingerprint 'SHA256:ASampleFingerprintValueZy...',
);
Ler arquivos do servidor SFTP
Os exemplos a seguir mostram como ler arquivos de um servidor SFTP usando os recursos de transmissão do Auto Loader. Para obter detalhes sobre o uso do Auto Loader, consulte Padrões comuns de carregamento de dados.
# Run the Auto Loader job to ingest all existing data in the SFTP server.
df = (spark.readStream.format("cloudFiles")
.option("cloudFiles.schemaLocation", "<path to store schema information>") # This is a cloud storage path
.option("cloudFiles.format", "csv") # Or other format supported by Auto Loader
# 1. $absolute_path_to_files should be the full server-side file system path
# relative to the root /, e.g. /home/$username/subdir/source/…
.load("sftp://$your_user@$your_host:$your_port/$absolute_path_to_files")
.writeStream
.format("delta")
.option("checkpointLocation", "<path to store checkpoint information>") # This is a cloud storage path.
.trigger(availableNow = True)
.table("<table name>"))
df.awaitTermination()
Os exemplos a seguir mostram como ler arquivos de um servidor SFTP usando Auto Loader em um pipeline declarativo LakeFlow Spark :
- Python
- SQL
import dlt
@dlt.table
def sftp_bronze_table():
return (spark.readStream.format("cloudFiles")
.option("cloudFiles.format", "csv") # Or other format supported by Auto Loader
# 1. $absolute_path_to_files should be the full server side file system path
# relative to the root /, for example /home/$username/subdir/source/…
.load("sftp://$your_user@$your_host:$your_port/$absolute_path_to_files"))
CREATE OR REFRESH STREAMING TABLE sftp_bronze_table
AS SELECT * FROM STREAM read_files(
"sftp://$your_user@$your_host:$your_port/$absolute_path_to_files",
format => "csv"
)
Configure as opções do Auto Loader. Todas as opções são suportadas, exceto:
cloudFiles.useNotificationscloudFiles.useManagedFileEventscloudFiles.cleanSource- opções específicas da nuvem
Limitações
- SFTP não é suportado em outras superfícies de ingestão, incluindo
COPY INTO,spark.readedbutils.ls. - Não há suporte para escrita de respostas em um servidor SFTP.
- O Auto Loader
cleanSource(excluir ou arquivar arquivos na origem após a ingestão) não é suportado. - O protocolo FTP não é suportado.
Perguntas frequentes
Encontre respostas para perguntas frequentes sobre o conector SFTP.
Como faço para usar caracteres curinga ou padrões de nomes de arquivos para selecionar os arquivos a serem ingeridos?
O conector SFTP utiliza a estrutura padrão do Auto Loader para ler dados de servidores SFTP. Isso significa que todas as opções do Auto Loader são suportadas. Para padrões de nomes de arquivos e curingas, use as opções pathGlobFilter ou fileNamePattern . Consulte as opçõesAuto Loader.
O conector SFTP consegue receber arquivos criptografados? (O PGP é suportado?)
O conector não descriptografa durante a transmissão, mas você pode importar os arquivos criptografados como arquivos binários e descriptografá-los após a importação.
Como faço para lidar com formatos key privada incompatíveis?
Somente o formato PEM é suportado. Você pode gerar uma key privada no formato PEM fazendo um dos seguintes procedimentos:
-
(Opção 1) Criar uma nova key RSA no formato PEM padrão:
% ssh-keygen -t rsa -m pem -
(Opção 2) Converter a key existente no formato OpenSSH para o formato PEM:
% ssh-keygen -p -m pem -f /path/to/key # This updates the key file.