Pular para o conteúdo principal

Gerenciar arquivos em volumes com o driver Databricks JDBC (OSS)

Databricks oferece recursos de ingestão em massa usando volumes Unity Catalog, o que permite aos usuários transferir conjuntos de dados de e para arquivos locais, como arquivos CSV. Consulte O que são volumes do Unity Catalog?

Este artigo descreve como gerenciar arquivos em volumes, bem como a transmissão de leitura e gravação de e para volumes, usando o driverDatabricks JDBC (OSS).

Habilitar operações de volume

Para ativar as operações de volume do Unity Catalog, defina a propriedade de conexão VolumeOperationAllowedLocalPaths como uma lista separada por vírgulas de caminhos locais permitidos para as operações de volume. Veja outras propriedades de recurso

O Unity Catalog deve estar ativado para usar esse recurso. Funcionalidade semelhante está disponível usando a interface do usuário do Databricks. Consulte Fazer upload de arquivos para um volume do Unity Catalog.

O comando de ingestão Unity Catalog são declarações SQL. Os exemplos abaixo demonstram as operações PUT, GET e REMOVE.

Fazer upload de um arquivo local

Para upload um arquivo local /tmp/test.csv em um caminho de volume Unity Catalog como /Volumes/main/default/e2etests/file1.csv, use as operações PUT:

Text
  PUT '/tmp/test.csv' INTO '/Volumes/main/default/e2etests/file1.csv' OVERWRITE

baixar um arquivo

Para download um arquivo do caminho do volume Unity Catalog /Volumes/main/default/e2etests/file1.csv em um arquivo local /tmp/test.csv, use as operações GET:

Text
  GET '/Volumes/main/default/e2etests/file1.csv' TO '/tmp/test.csv'

Excluir um arquivo

Para excluir um arquivo com um caminho de volume Unity Catalog /Volumes/main/default/e2etests/file1.csv, use as operações REMOVE:

Text
  REMOVE '/Volumes/main/default/e2etests/file1.csv'

Leitura/gravação uso de dados a transmissão

O driver JDBC oferece suporte à transmissão para ler e gravar dados de e para volumes Unity Catalog, fornecendo a interface IDatabricksVolumeClient. Consulte a referência do IDatabricksVolumeClient para obter as APIs disponíveis.

O IDatabricksVolumeClient pode ser inicializado usando as utilidades de fábrica do DatabricksVolumeClientFactory:

Java
import com.databricks.jdbc.api.impl.volume.DatabricksVolumeClientFactory;
import com.databricks.jdbc.api.volume.IDatabricksVolumeClient;

IDatabricksVolumeClient volumeClient = DatabricksVolumeClientFactory.getVolumeClient(Connection conn);

Gravar um arquivo em um volume a partir de uma transmissão

Java
Connection connection = DriverManager.getConnection(url, prop);
File file = new File("/tmp/test.csv");
FileInputStream fileInputStream = new FileInputStream(file);

// Upload the file stream to UC Volume path
IDatabricksVolumeClient volumeClient = DatabricksVolumeClientFactory.getVolumeClient(Connection conn);
volumeClient.putObject(catalog, schema, volume, objectPath, inputStream, contentLength, true /* overwrite */);

Ler um arquivo de volume como uma transmissão

Java
import org.apache.http.entity.InputStreamEntity;

Connection connection = DriverManager.getConnection(url, prop);
File file = new File("/tmp/test.csv");
FileInputStream fileInputStream = new FileInputStream(file);

// Upload the file stream to UC Volume path
IDatabricksVolumeClient volumeClient = DatabricksVolumeClientFactory.getVolumeClient(Connection conn);
InputStreamEntity volumeDataStream = volumeClient.getObject(catalog, schema, volume, objectPath);

Interface iDatabricksVolumeClient

O prefixo existe

boolean prefixExists(String catalog, String schema, String volume, String prefix, boolean caseSensitive) throws SQLException

Determina se existe um prefixo específico (estrutura semelhante a uma pasta) no volume do Unity Catalog. O prefixo deve fazer parte do nome do arquivo.

Parâmetros:

  • catalog - o nome do catálogo do armazenamento em nuvem.
  • schema - o nome do esquema do armazenamento em nuvem.
  • volume - o nome do volume do Unity Catalog do armazenamento em nuvem.
  • prefix - o prefixo para verificar a existência junto com o caminho relativo do volume como diretório raiz.
  • caseSensitive - se o cheque deve diferenciar maiúsculas de minúsculas ou não.

Devoluções:

Um booleano que indica se o prefixo existe ou não.

O objeto existe

boolean objectExists(String catalog, String schema, String volume, String objectPath, boolean caseSensitive) throws SQLException

Determina se um objeto específico (arquivo) existe no volume do Unity Catalog. O objeto deve corresponder exatamente ao nome do arquivo.

Parâmetros:

  • catalog - o nome do catálogo do armazenamento em nuvem.
  • schema - o nome do esquema do armazenamento em nuvem.
  • volume - o nome do volume do Unity Catalog do armazenamento em nuvem.
  • objectPath - o caminho do objeto (arquivo) do volume como diretório raiz para verificar a existência dentro do volume (dentro de qualquer subpasta).
  • caseSensitive - um booleano que indica se a verificação deve ser sensível a maiúsculas e minúsculas ou não.

Devoluções:

Um booleano que indica se o objeto existe ou não.

O volume existe

boolean volumeExists(String catalog, String schema, String volumeName, boolean caseSensitive) throws SQLException

Determina se existe um volume específico no catálogo e no esquema fornecidos. O volume deve corresponder exatamente ao nome do volume.

Parâmetros:

  • catalog - o nome do catálogo do armazenamento em nuvem.
  • schema - o nome do esquema do armazenamento em nuvem.
  • volumeName - o nome do volume a ser verificado.
  • caseSensitive um booleano que indica se a verificação deve ser sensível a maiúsculas e minúsculas ou não.

Devoluções:

Um booleano que indica se o volume existe ou não.

Listar objetos

List<String> listObjects(String catalog, String schema, String volume, String prefix, boolean caseSensitive) throws SQLException

Retorna a lista de todos os nomes de arquivos no volume Unity Catalog que começam com um prefixo especificado. O prefixo deve fazer parte do caminho do arquivo do volume como raiz.

Parâmetros:

  • catalog - o nome do catálogo do armazenamento em nuvem.
  • schema - o nome do esquema do armazenamento em nuvem.
  • volume - o nome do volume de UC do armazenamento em nuvem.
  • prefix - o prefixo dos nomes dos arquivos a serem listados. Isso inclui o caminho relativo do volume como o diretório raiz.
  • caseSensitive - um booleano que indica se a verificação deve ser sensível a maiúsculas e minúsculas ou não.

Devoluções:

Uma lista de strings indicando os nomes de arquivos que começam com o prefixo especificado.

GetObject (arquivo)

boolean getObject(String catalog, String schema, String volume, String objectPath, String localPath) throws SQLException

Recupera um objeto (arquivo) do volume do Unity Catalog e o armazena no caminho local especificado.

Parâmetros:

  • catalog - o nome do catálogo do armazenamento em nuvem.
  • schema - o nome do esquema do armazenamento em nuvem.
  • volume - o nome do volume de UC do armazenamento em nuvem.
  • objectPath - o caminho do objeto (arquivo) do volume como diretório raiz.
  • localPath - o caminho local onde os dados recuperados devem ser armazenados.

Devoluções:

Um valor booleano que indica o status das operações GET.

getObject (transmissão)

InputStreamEntity getObject(String catalog, String schema, String volume, String objectPath) throws SQLException

Recupera um objeto como uma transmissão de entrada do volume Unity Catalog.

Parâmetros:

  • catalog - o nome do catálogo do armazenamento em nuvem.
  • schema - o nome do esquema do armazenamento em nuvem.
  • volume - o nome do volume de UC do armazenamento em nuvem.
  • objectPath - o caminho do objeto (arquivo) do volume como diretório raiz.

Devoluções:

Uma instância da entidade de transmissão de entrada.

PutObject (arquivo)

boolean putObject(String catalog, String schema, String volume, String objectPath, String localPath, boolean toOverwrite) throws SQLException

Faz o upload de dados de um caminho local para um caminho especificado em um volume do Unity Catalog.

Parâmetros:

  • catalog - o nome do catálogo do armazenamento em nuvem.
  • schema - o nome do esquema do armazenamento em nuvem.
  • volume - o nome do volume de UC do armazenamento em nuvem.
  • objectPath o caminho de destino para onde o objeto (arquivo) deve ser carregado a partir do volume como o diretório raiz.
  • localPath o caminho local de onde os dados devem ser carregados.
  • toOverwrite um booleano que indica se o objeto deve ser sobrescrito caso já exista.

Devoluções:

Um valor booleano que indica o status das operações PUT.

putObject (transmissão)

boolean putObject(String catalog, String schema, String volume, String objectPath, InputStream inputStream, long contentLength, boolean toOverwrite) throws SQLException

carregar dados de uma transmissão de entrada para um caminho especificado em um volume Unity Catalog.

Parâmetros:

  • catalog - o nome do catálogo do armazenamento em nuvem.
  • schema - o nome do esquema do armazenamento em nuvem.
  • volume - o nome do volume de UC do armazenamento em nuvem.
  • objectPath - o caminho de destino para onde o objeto (arquivo) deve ser carregado do volume como o diretório raiz.
  • inputStream - a transmissão de entrada de onde os dados devem ser carregados.
  • contentLength - o comprimento da transmissão de entrada.
  • toOverwrite um booleano que indica se o objeto deve ser sobrescrito caso já exista.

Devoluções:

Um valor booleano que indica o status das operações PUT.

Excluir objeto

boolean deleteObject(String catalog, String schema, String volume, String objectPath) throws SQLException

Remove um objeto de um caminho especificado em um volume do Unity Catalog.

Parâmetros:

  • catalog - o nome do catálogo do armazenamento em nuvem.
  • schema - o nome do esquema do armazenamento em nuvem.
  • volume - o nome do volume de UC do armazenamento em nuvem.
  • objectPath - o caminho do objeto (arquivo) do volume como o diretório raiz a ser excluído.

Devoluções:

Um valor booleano que indica o status das operações DELETE.