Usar a API Files com volumes do Unity Catalog
Use a API Files para ler, gravar, listar e excluir arquivos e diretórios por caminho. Ela funciona com arquivos em volumes do Unity Catalog, aos quais você se refere pelo caminho absoluto do volume, como /Volumes/<catalog>/<schema>/<volume>/<path>. As solicitações da API Files 3.0 usam o prefixo de endpoint /api/3.0/fs e são direcionadas ao hostname regional do seu workspace. Para cada operação, parâmetro e cabeçalho, consulte a referência da API Files 3.0.
O uso da API de arquivos pode incorrer em cobranças de transferência de dados do Databricks.
Envie solicitações para o hostname regional
Beta
Este recurso está em Beta. Para usá-lo, um administrador do workspace deve habilitar a API de Arquivos V3 com Suporte para Upload de Arquivos Grandes na página Prévias . Consulte Gerenciar prévias do Databricks.
Envie solicitações da API de arquivos 3.0 para o hostname regional do workspace ao qual o usuário que faz a solicitação pertence. O hostname regional tem o seguinte formato:
<workspace-id>.storage.<workspace-region>.<databricks-domain>
Por exemplo, 1234567890123456.storage.us-west-2.cloud.databricks.com.
Para localizar o ID do seu workspace e região, use o console de account. Consulte Nomes de instâncias, URLs e IDs de workspace. Você também pode localizar o ID do workspace na URL de implantação: em https://<databricks-instance>/?o=1234567890123456, o número após o= é o ID do workspace. A UI do workspace mostra a região abaixo do nome do workspace.
Configurar conectividade de rede
Beta
Este recurso está em Beta. Para usá-lo, um administrador do workspace deve habilitar a API de Arquivos V3 com Suporte para Upload de Arquivos Grandes na página Prévias . Consulte Gerenciar prévias do Databricks.
A API de arquivos 3.0 requer conectividade de rede da sua rede para o Databricks e do Databricks para o seu armazenamento.
Da sua rede para o Databricks
Se você permitir o acesso público à internet ao seu workspace, mas restringi-lo com um firewall, adicione à lista de permissões os intervalos de IP do plano de controle da sua região.
Inclua os IPs sob Storage default, OpenSharing SecureConnect, Zerobus Ingestion e Lakebase Autoscaling. Consulte IPs de entrada.
Se você não permite o acesso à Internet ao Databricks e se conecta através de um link privado de front-end, crie um segundo link privado de front-end para serviços com uso intensivo de desempenho. Consulte Configurar PrivateLink de entrada para serviços com uso intensivo de desempenho.
Do Databricks para o seu armazenamento
Se você permite o acesso público ao seu storage, mas aplica restrições de rede, para storage dentro da região, adicione à lista de permissões o Databricks serverless OrgPath. Caso contrário, adicione à lista de permissões os IPs de saída do Databricks.
Se você não permite o acesso público ao seu storage, crie um link privado para o Amazon S3. Consulte Configurar conectividade privada com recursos gerenciados pela AWS.
A cobrança da rede serverless se aplica. Consulte Entender os custos de rede do Databricks.
Fazer upload de arquivos grandes com upload multipart
Beta
Este recurso está em Beta. Para usá-lo, um administrador do workspace deve habilitar a API de Arquivos V3 com Suporte para Upload de Arquivos Grandes na página Prévias . Consulte Gerenciar prévias do Databricks.
Uma única solicitação de upload aceita arquivos de até 5000 MiB. Para fazer upload de um arquivo maior, ou de um arquivo cujo tamanho é desconhecido quando o upload começa, use o upload de várias partes: você faz upload do arquivo em partes, e o Databricks monta em um único arquivo.
Os números das partes variam de 1 a 10000. Cada parte, exceto a última, deve ter pelo menos 5 MiB, e cada parte pode ter no máximo 4000 MiB. O Databricks monta as partes na ordem crescente do número da parte. Para cada parâmetro, consulte Fazer upload de um arquivo e Executar uma ação em um arquivo.
Exemplo de upload multipart
O exemplo a seguir faz upload de um arquivo em duas partes.
Para começar a sessão de upload, inicie o upload. A resposta contém o upload_id que identifica a sessão:
POST /api/3.0/fs/files/Volumes/c/s/v/file?action=initiate-upload
200 OK
Content-Type: application/json
{
"upload_id": "dvOR6FE39mNb"
}
Para fazer upload da primeira parte, envie o seu conteúdo com o upload_id e o part_number. A resposta inclui o ETag da parte:
PUT /api/3.0/fs/files/Volumes/c/s/v/file?upload_id=dvOR6FE39mNb&part_number=1
Content-Length: 268435456
Content-Type: application/octet-stream
<binary data>
200 OK
ETag: "33a64df551425fcc55e4d42a148795d9f25f89d4"
Para fazer upload da segunda parte, repita a solicitação com o próximo part_number:
PUT /api/3.0/fs/files/Volumes/c/s/v/file?upload_id=dvOR6FE39mNb&part_number=2
Content-Length: 268435456
Content-Type: application/octet-stream
<binary data>
200 OK
ETag: "954fb694be262821177cfbc47f9d4a0aa06c349b"
Para finalizar, conclua o upload com um corpo que liste todas as partes e seu ETag armazenado:
POST /api/3.0/fs/files/Volumes/c/s/v/file?action=complete-upload&upload_id=dvOR6FE39mNb
Content-Type: application/json
{
"parts": [
{ "part_number": 1, "etag": "\"33a64df551425fcc55e4d42a148795d9f25f89d4\"" },
{ "part_number": 2, "etag": "\"954fb694be262821177cfbc47f9d4a0aa06c349b\"" }
]
}
200 OK
ETag: "b3f1c2a94d6e7085f2a1c0b9e8d7654321fedcba"
O ETag nesta resposta pertence ao arquivo inteiro montado, não a uma parte. Você pode usá-lo em solicitações condicionais posteriores, por exemplo, para substituir o arquivo apenas se ele não tiver sido alterado desde que você fez o upload.
Para cancelar o upload em vez de concluí-lo, envie a ação abort-upload com o upload_id:
POST /api/3.0/fs/files/Volumes/c/s/v/file?action=abort-upload&upload_id=dvOR6FE39mNb
200 OK
download arquivos grandes com solicitações de intervalo
Use solicitações de intervalo para fazer download de um arquivo grande em várias solicitações menores ou para retomar um download interrompido.
Solicitar um intervalo
Envie o cabeçalho Range com as posições baseadas em zero dos primeiros e últimos bytes que você deseja. O intervalo inclui ambas as posições. Por exemplo, bytes=0-1048575 solicita o primeiro 1 MiB de um arquivo de 10 MiB:
GET /api/3.0/fs/files/Volumes/main/default/my-volume/large-file.bin
Range: bytes=0-1048575
206 Partial Content
Accept-Ranges: bytes
Content-Range: bytes 0-1048575/10485760
Content-Length: 1048576
ETag: "33a64df551425fcc55e4d42a148795d9f25f89d4"
<binary data>
A resposta 206 Partial Content contém apenas os bytes solicitados, e Content-Range mostra quais bytes ele contém e o tamanho total do arquivo. Para ler até o final do arquivo, omita a última posição, como em bytes=1048576-. Se a última posição estiver depois do final do arquivo, a resposta contém os bytes até o final. Para outra sintaxe de Range, consulte download um arquivo.
Uma solicitação HEAD com um cabeçalho Range retorna o mesmo status e cabeçalhos que a solicitação GET correspondente, sem o corpo.
Retomar um download interrompido
Para retomar um download, solicite os bytes restantes com um intervalo que começa no primeiro byte que você não recebeu. Também envie If-Match com o ETag da sua primeira resposta, para não combinar bytes de duas versões do arquivo:
GET /api/3.0/fs/files/Volumes/main/default/my-volume/large-file.bin
Range: bytes=1048576-
If-Match: "33a64df551425fcc55e4d42a148795d9f25f89d4"
206 Partial Content
Accept-Ranges: bytes
Content-Range: bytes 1048576-10485759/10485760
Content-Length: 9437184
<binary data>
Se o arquivo for alterado, o servidor retornará 412 Precondition Failed, e você deverá começar o download novamente.
Usar solicitações condicionais
Beta
Este recurso está em Beta. Para usá-lo, um administrador do workspace deve habilitar a API de Arquivos V3 com Suporte para Upload de Arquivos Grandes na página Prévias . Consulte Gerenciar prévias do Databricks.
Uma solicitação condicional entra em vigor apenas se o arquivo estiver no estado que você espera. Use solicitações condicionais para evitar downloads repetidos, para impedir que escritores concorrentes sobrescrevam as alterações uns dos outros e para criar ou excluir arquivos com segurança. A Files API 3.0 suporta os quatro cabeçalhos condicionais HTTP padrão do RFC 9110:
cabeçalho | Compara com | Honrado em |
|---|---|---|
| O do arquivo | Lê, grava e exclui |
| O do arquivo | Leituras e gravações |
| A hora de | Lê apenas |
| A hora de | Lê apenas |
Quando a condição não é atendida, o servidor não executa a operação e retorna um dos seguintes status:
304 Not Modified, quando uma solicitaçãoGETouHEADcomIf-None-MatchouIf-Modified-Sincefalha. Sua cópia em cache ainda é válida.412 Precondition Failed, quando qualquer outra condição falha.
Validadores: ETag e Last-Modified
Os cabeçalhos condicionais comparam um valor fornecido por você com um dos validadores do arquivo. A API de Arquivos retorna ambos os validadores como cabeçalhos de resposta em GET e HEAD:
ETag: um identificador opaco para o conteúdo do arquivo, também retornado emPUTe na resposta multipartcomplete-upload. Armazene-o exatamente como retornado, incluindo as aspas circundantes, e não analise ou construa-o.Last-Modified: o horário da última modificação do arquivo, como uma data HTTP. Sua precisão é de um segundo, portantoIf-Modified-SinceeIf-Unmodified-Sincenão conseguem detectar várias alterações no mesmo segundo. Para controlar a concorrência, useETagcomIf-MatchouIf-None-Match.
Leituras condicionais
A leitura condicional mais comum é a revalidação do cache. Envie If-None-Match com o ETag da sua cópia em cache, ou If-Modified-Since com a hora em que você a buscou pela última vez. Se o arquivo não foi alterado, o servidor retorna 304 Not Modified sem corpo. Caso contrário, ele retorna 200 OK com o novo conteúdo:
GET /api/3.0/fs/files/Volumes/main/default/reports/report.csv
If-None-Match: "33a64df551425fcc55e4d42a148795d9f25f89d4"
304 Not Modified
If-Match e If-Unmodified-Since funcionam de maneira oposta: o servidor retorna o arquivo somente se ele não tiver sido alterado; caso contrário, retorna 412. Uma leitura pode incluir no máximo dois cabeçalhos condicionais, e a precedência deles segue a RFC 9110.
Gravações condicionais
No PUT, use If-None-Match e If-Match para evitar substituir alterações que você não viu, também chamado de problema de atualização perdida:
If-None-Match: *faz upload do arquivo apenas se nenhum arquivo existir no caminho. Caso contrário, a solicitação retornará412 Precondition Failed.If-Match: <etag>faz o upload do arquivo apenas se o seuETagatual corresponder ao que você fornece. Caso contrário, a solicitação retornará412 Precondition Failedou404se nenhum arquivo existir no caminho.
Para criar um arquivo apenas se ele ainda não existir, envie If-None-Match: *:
PUT /api/3.0/fs/files/Volumes/main/default/reports/report.csv
If-None-Match: *
Content-Type: application/octet-stream
<binary data>
200 OK
Para substituir um arquivo apenas se ele ainda for a versão que você buscou pela última vez, envie seu ETag com If-Match:
PUT /api/3.0/fs/files/Volumes/main/default/reports/report.csv
If-Match: "33a64df551425fcc55e4d42a148795d9f25f89d4"
Content-Type: application/octet-stream
<binary data>
200 OK
Para um upload de múltiplas partes, envie o cabeçalho condicional na chamada initiate-upload. A API de Arquivos o avalia quando o upload é concluído, portanto, a condição se aplica ao arquivo montado. Para os formulários de cabeçalho que cada chamada suporta, consulte Fazer upload de um arquivo e Executar uma ação em um arquivo.
Exclusões condicionais
Um DELETE simples é bem-sucedido mesmo se o arquivo não existir, então ele não pode lhe dizer se você removeu a versão pretendida. Para tornar uma exclusão condicional, envie If-Match:
If-Match: <etag>exclui o arquivo somente se oETagatual corresponder ao valor fornecido. Se alguém alterar o arquivo depois que você o buscar, a solicitação retornará412 Precondition Failed. Se o arquivo não existir mais, retorna404.If-Match: *exclui o arquivo apenas se ele existir e retorna404se ele não existir.
DELETE /api/3.0/fs/files/Volumes/main/default/reports/report.csv
If-Match: "33a64df551425fcc55e4d42a148795d9f25f89d4"
204 No Content
Versões da API Files
A Files API 2.0 envia solicitações ao hostname do seu workspace com o prefixo de endpoint /api/2.0/fs. Ela não suporta upload multipart, e seu único cabeçalho condicional é If-Unmodified-Since em downloads. Consulte a referência da Files API 2.0.
Para mover código da API de Arquivos 2.0 para 3.0, faça as seguintes alterações:
- Envie solicitações para o hostname regional com o prefixo de endpoint
/api/3.0/fse configure a conectividade de rede. - Envie o cabeçalho
Content-Lengthem cada upload. Se você não sabe o tamanho do arquivo com antecedência, use upload multipart. - Espere
200 OKem vez de204 No Contentde um upload bem-sucedido. - Espera-se
204 No Content, não404 Not Found, ao excluir um arquivo que não existe. Veja Exclusões condicionais.