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.
Aplica-se a:
Databricks SQL
Databricks Runtime 13.3 LTS e versões superiores
Lê arquivos em um local fornecido e retorna os dados em forma de tabela.
Suporta leitura JSON, CSV, XML, TEXT, BINARYFILE, PARQUET, AVRO, e ORC formatos de arquivo.
Pode detetar o formato de arquivo automaticamente e inferir um esquema unificado em todos os arquivos.
Sintaxe
read_files(path [, option_key => option_value ] [...])
Argumentos
Esta função requer invocação de parâmetro nomeado para as chaves de opção.
-
path: ASTRINGcom o URI da localização dos dados. Suporta leitura de Azure Data Lake Storage ('abfss://'), S3 (s3://) e Google Cloud Storage ('gs://'). Pode conter globs. Consulte Descoberta de arquivos para obter mais detalhes. -
option_key: O nome da opção a ser configurada. Você precisa usar os backticks () for options that contain dots (.`). -
option_value: Uma expressão constante para definir a opção. Aceita literais e funções escalares.
Devoluções
Uma tabela contendo os dados dos ficheiros lidos sob o dado path. O esquema depende do formato do ficheiro:
BINARYFILE: Devolve um esquema fixo:Coluna Tipo Descrição pathSTRINGO caminho completo para o ficheiro. modificationTimeTIMESTAMPA última modificação do ficheiro. lengthLONGO tamanho do arquivo em bytes. contentBINARYO conteúdo binário do ficheiro. Usar * EXCEPT (content)para excluir conteúdo binário ao consultar metadados de ficheiros.TEXT: Devolve um esquema fixo com uma únicavaluecoluna (STRING).Todos os outros formatos (JSON, CSV, XML, PARQUET, AVRO, ORC): O esquema é inferido a partir do conteúdo do ficheiro, ou fornecido explicitamente usando a
schemaopção.
_metadata Coluna
read_files expõe uma _metadata coluna com metadados ao nível do ficheiro. Esta coluna não está incluída nos SELECT * resultados e deve ser explicitamente selecionada. Contém os seguintes campos:
| Campo | Tipo | Descrição |
|---|---|---|
file_path |
STRING |
O caminho completo para o arquivo de origem. |
file_name |
STRING |
O nome do arquivo de origem. |
file_size |
LONG |
O tamanho do arquivo de origem em bytes. |
file_modification_time |
TIMESTAMP |
A última modificação do ficheiro fonte. |
file_block_start |
LONG |
O início do bloco do ficheiro a ser lido. |
file_block_length |
LONG |
O comprimento do bloco do ficheiro a ser lido. |
Para incluir _metadata nos resultados, selecione explicitamente:
SELECT * EXCEPT (content), _metadata
FROM read_files('/Volumes/my_catalog/my_schema/my_volume', format => 'binaryFile');
Descoberta de arquivos
read_files É capaz de ler um arquivo individual ou ler arquivos em um diretório fornecido.
read_files descobre todos os ficheiros no diretório fornecido de forma recursiva, exceto se for fornecido um glob, que especifica ao read_files para recursar num padrão específico de diretório.
Filtrando diretórios ou arquivos usando padrões glob
Os padrões de Glob podem ser usados para filtrar diretórios e arquivos quando fornecidos no caminho.
| Padrão | Descrição |
|---|---|
? |
Corresponde a qualquer caractere |
* |
Corresponde a zero ou mais caracteres |
[abc] |
Corresponde a um único caractere do conjunto de caracteres {a,b,c}. |
[a-z] |
Corresponde a um único caractere do intervalo de caracteres {a... z}. |
[^a] |
Corresponde a um único caractere que não é do conjunto de caracteres ou intervalo {a}. Observe que o ^ caractere deve ocorrer imediatamente à direita do colchete de abertura. |
{ab,cd} |
Corresponde a uma string do conjunto de strings {ab, cd}. |
{ab,c{de, fh}} |
Corresponde a uma string do conjunto de strings {ab, cde, cfh}. |
read_files usa o globber rigoroso do Auto Loader ao identificar ficheiros com globs. Isso é configurado pela useStrictGlobber opção. Quando o globber estrito é desativado, as barras finais (/) são descartadas e um padrão de asterisco como /*/ pode expandir-se para descobrir vários diretórios. Veja os exemplos abaixo para ver a diferença de comportamento.
| Padrão | Caminho do ficheiro | Globber em modo estrito desativado | Globber rigoroso ativado |
|---|---|---|---|
/a/b |
/a/b/c/file.txt |
Sim | Sim |
/a/b |
/a/b_dir/c/file.txt |
Não | Não |
/a/b |
/a/b.txt |
Não | Não |
/a/b/ |
/a/b.txt |
Não | Não |
/a/*/c/ |
/a/b/c/file.txt |
Sim | Sim |
/a/*/c/ |
/a/b/c/d/file.txt |
Sim | Sim |
/a/*/d/ |
/a/b/c/d/file.txt |
Sim | Não |
/a/*/c/ |
/a/b/x/y/c/file.txt |
Sim | Não |
/a/*/c |
/a/b/c_file.txt |
Sim | Não |
/a/*/c/ |
/a/b/c_file.txt |
Sim | Não |
/a/*/c |
/a/b/cookie/file.txt |
Sim | Não |
/a/b* |
/a/b.txt |
Sim | Sim |
/a/b* |
/a/b/file.txt |
Sim | Sim |
/a/{0.txt,1.txt} |
/a/0.txt |
Sim | Sim |
/a/*/{0.txt,1.txt} |
/a/0.txt |
Não | Não |
/a/b/[cde-h]/i/ |
/a/b/c/i/file.txt |
Sim | Sim |
Inferência do esquema
O esquema dos ficheiros pode ser explicitamente fornecido a read_files com a opção schema. Quando o esquema não é fornecido, read_files tenta inferir um esquema unificado nos arquivos descobertos, o que requer a leitura de todos os arquivos, a menos que uma LIMIT instrução seja usada. Mesmo ao usar uma LIMIT consulta, um conjunto maior de arquivos do que o necessário pode ser lido para retornar um esquema mais representativo dos dados. O Databricks adiciona automaticamente uma LIMIT instrução para SELECT consultas em notebooks e no editor SQL, se um utilizador não tiver fornecido uma.
A schemaHints opção pode ser usada para corrigir subconjuntos do esquema inferido. Consulte Como substituir a inferência de esquema por dicas de esquema para obter mais detalhes.
A rescuedDataColumn é fornecido por padrão para recuperar quaisquer dados que não correspondam ao esquema. Consulte O que é a coluna de dados resgatados? para obter mais detalhes. Você pode soltar o rescuedDataColumn definindo a opção schemaEvolutionMode => 'none'.
Inferência de esquema de partição
read_files também pode inferir colunas de partição se os arquivos forem armazenados em diretórios particionados ao estilo Hive, ou seja /column_name=column_value/. Se um schema for fornecido, as colunas de partição descobertas usarão os tipos fornecidos no schema. Se as colunas de partição não fizerem parte do fornecido schema, as colunas de partição inferidas serão ignoradas.
Se existir uma coluna no esquema de partição e nas colunas de dados, o valor lido a partir do valor da partição será usado em vez do valor de dados. Se você quiser ignorar os valores provenientes do diretório e usar a coluna de dados, você pode fornecer a lista de colunas de partição em uma lista separada por vírgulas com a partitionColumns opção.
A partitionColumns opção também pode ser usada para instruir read_files sobre quais colunas descobertas devem ser incluídas no esquema inferido final. Fornecer uma cadeia de caracteres vazia ignora todas as colunas de partição.
A schemaHints opção também pode ser fornecida para substituir o esquema inferido para uma coluna de partição.
Os TEXT formatos e BINARYFILE têm um esquema fixo, mas read_files também tentam inferir particionamento para esses formatos quando possível.
Autenticação para armazenamento na nuvem
read_files lê ficheiros de localizações externas do Catálogo Unity ou volumes do Catálogo Unity (tanto geridos como externos). Deve ter o READ FILES privilégio na localização externa ou READ VOLUME o privilégio no volume que contém os ficheiros que quer ler. Veja Conectar-se ao armazenamento de objetos na nuvem usando o Unity Catalog ou O que são volumes do Unity Catalog?.
Uso em tabelas de streaming
read_files pode ser usado em tabelas de streaming para ingerir arquivos no Delta Lake.
read_files tira partido do Auto Loader quando usado numa consulta de tabela de streaming. Você deve usar a STREAM palavra-chave com read_files. Consulte O que é o Auto Loader? para obter mais detalhes.
Quando usado em uma consulta de streaming, read_files usa uma amostra dos dados para inferir o esquema e pode evoluir o esquema à medida que processa mais dados. Consulte Configurar inferência e evolução de esquema no Auto Loader para obter mais detalhes.
Opções
Opções básicas
| Opção |
|---|
formatTipo: StringO formato de ficheiro de dados no caminho de origem. Inferido automaticamente se não for fornecido. Os valores permitidos incluem:
Valor padrão: Nenhum |
schemaTipo: StringO esquema dos ficheiros a ler. Forneça uma string de esquema usando o formato DDL, por exemplo 'id int, ts timestamp, event string'. Quando o esquema não é fornecido, read_files tenta inferir um esquema unificado entre os ficheiros descobertos.Valor padrão: Nenhum |
inferColumnTypesTipo: BooleanDecidir se se deve inferir tipos exatos de coluna ao utilizar a inferência de esquema. Por padrão, as colunas são inferidas ao inferir conjuntos de dados JSON e CSV. Consulte inferência de esquema para obter mais detalhes. Observe que isso é o oposto do padrão do Auto Loader. Valor predefinido: true |
partitionColumnsTipo: StringUma lista separada por vírgulas de colunas de partição no estilo Hive que você gostaria de inferir da estrutura de diretórios dos arquivos. As colunas de partição no estilo Hive são pares chave-valor ligados por um sinal de igualdade, como <base-path>/a=x/b=1/c=y/file.format. Neste exemplo, as colunas de partição são a, be c. Por padrão, estas colunas serão adicionadas automaticamente ao seu esquema se estiver a utilizar a inferência de esquema e fornecer o <base-path> de onde carregar dados. Se você fornecer um esquema, o Auto Loader espera que essas colunas sejam incluídas no esquema. Se você não quiser essas colunas como parte do seu esquema, você pode especificar "" para ignorar essas colunas. Além disso, podes usar esta opção quando pretenderes que as colunas determinem o caminho do ficheiro em diretórios complexos, como no exemplo abaixo:<base-path>/year=2022/week=1/file1.csv<base-path>/year=2022/month=2/day=3/file2.csv<base-path>/year=2022/month=2/day=4/file3.csvEspecificando cloudFiles.partitionColumns como year,month,day retornaráyear=2022 para file1.csv, mas as colunas month e day serão null.month e day será analisado corretamente para file2.csv e file3.csv.Valor padrão: Nenhum |
schemaHintsTipo: StringInformações de esquema que você fornece ao Auto Loader durante a inferência do esquema. Veja dicas do esquema para mais detalhes. Valor padrão: Nenhum |
useStrictGlobberTipo: BooleanSe deve utilizar um globber estrito que corresponda ao comportamento padrão de globbing de outras fontes de arquivos no Apache Spark. Consulte Padrões comuns de carregamento de dados para obter mais detalhes. Disponível no Databricks Runtime 12.2 LTS e superior. Observe que isso é o oposto do padrão para Auto Loader. Valor predefinido: true |
Opções específicas de formato
Para opções específicas para cada formato de ficheiro (JSON, CSV, XML, Parquet, Avro, texto, ORC e binário), consulte opções DataFrameReader.
Opções de streaming
Essas opções se aplicam ao usar read_files numa tabela ou consulta de transmissão.
| Opção |
|---|
allowOverwritesTipo: BooleanSe os arquivos que foram modificados após a descoberta devem ser reprocessados. A versão mais recente disponível do arquivo será processada durante uma atualização se tiver sido modificada desde a última hora de início da consulta de atualização bem-sucedida. Valor predefinido: false |
includeExistingFilesTipo: BooleanSe deve incluir arquivos existentes no caminho de entrada de processamento de fluxo ou apenas processar novos arquivos que chegam após a configuração inicial. Essa opção é avaliada somente quando você inicia um fluxo pela primeira vez. Alterar essa opção depois de reiniciar o fluxo não tem efeito. Valor predefinido: true |
maxBytesPerTriggerTipo: Byte StringO número máximo de novos bytes a serem processados em cada acionamento. Você pode especificar uma cadeia de caracteres de byte, como 10g para limitar cada microlote a 10 GB de dados. Este é um máximo suave. Se tiver ficheiros com 3 GB cada, o Azure Databricks processa 12 GB em microbatch. Quando usado em conjunto com maxFilesPerTrigger, Azure Databricks consome até ao limite inferior de maxFilesPerTrigger ou maxBytesPerTrigger, o que for atingido primeiro.Nota: Para tabelas de streaming criadas em armazéns SQL sem servidor, esta opção e maxFilesPerTrigger não devem ser configurados para tirar proveito do controlo de admissão dinâmica, que se adapta ao tamanho da carga de trabalho e aos recursos de computação sem servidor para proporcionar a melhor latência e desempenho.Valor padrão: Nenhum |
maxFilesPerTriggerTipo: IntegerO número máximo de novos arquivos a serem processados em cada gatilho. Quando usado em conjunto com maxBytesPerTrigger, Azure Databricks consome até ao limite inferior de maxFilesPerTrigger ou maxBytesPerTrigger, o que for atingido primeiro.Nota: Para tabelas de streaming criadas em armazéns SQL sem servidor, esta opção e maxBytesPerTrigger não devem ser configurados para tirar proveito do controlo de admissão dinâmica, que se adapta ao tamanho da carga de trabalho e aos recursos de computação sem servidor para proporcionar a melhor latência e desempenho.Valor padrão: 1000 |
schemaEvolutionModeTipo: StringO modo para evoluir o esquema à medida que novas colunas são descobertas nos dados. Por padrão, as colunas são inferidas como cadeias de caracteres ao inferir conjuntos de dados JSON. Consulte a evolução do esquema para obter mais detalhes. Esta opção não se aplica a text e binaryFile ficheiros.Valor padrão: "addNewColumns" quando um esquema não é fornecido."none" caso contrário. |
schemaLocationTipo: StringO local para armazenar o esquema inferido e as alterações subsequentes. Consulte inferência de esquema para obter mais detalhes. O local do esquema não é necessário quando usado em uma consulta de tabela de streaming. Valor padrão: Nenhum |
Exemplos
-- Reads the files available in the given path. Auto-detects the format and schema of the data.
> SELECT * FROM read_files('abfss://container@storageAccount.dfs.core.windows.net/base/path');
-- Reads the headerless CSV files in the given path with the provided schema.
> SELECT * FROM read_files(
's3://bucket/path',
format => 'csv',
schema => 'id int, ts timestamp, event string');
-- Infers the schema of CSV files with headers. Because the schema is not provided,
-- the CSV files are assumed to have headers.
> SELECT * FROM read_files(
's3://bucket/path',
format => 'csv')
-- Reads files that have a csv suffix.
> SELECT * FROM read_files('s3://bucket/path/*.csv')
-- Reads a single JSON file
> SELECT * FROM read_files(
'abfss://container@storageAccount.dfs.core.windows.net/path/single.json')
-- Reads JSON files and overrides the data type of the column `id` to integer.
> SELECT * FROM read_files(
's3://bucket/path',
format => 'json',
schemaHints => 'id int')
-- Reads files that have been uploaded or modified yesterday.
> SELECT * FROM read_files(
'gs://my-bucket/avroData',
modifiedAfter => date_sub(current_date(), 1),
modifiedBefore => current_date())
-- Creates a Delta table and stores the source file path as part of the data
> CREATE TABLE my_avro_data
AS SELECT *, _metadata.file_path
FROM read_files('gs://my-bucket/avroData')
-- Creates a streaming table that processes files that appear only after the table's creation.
-- The table will most likely be empty (if there's no clock skew) after being first created,
-- and future refreshes will bring new data in.
> CREATE OR REFRESH STREAMING TABLE avro_data
AS SELECT * FROM STREAM read_files('gs://my-bucket/avroData', includeExistingFiles => false);
Trabalho com ficheiros não estruturados
Os exemplos seguintes usam BINARYFILE o formato para ler e filtrar ficheiros não estruturados armazenados em volumes do Catálogo Unity, e combinam-se read_files com funções de IA para processar o conteúdo dos ficheiros.
Liste todos os ficheiros num volume: Use * EXCEPT (content) para devolver metadados do ficheiro sem carregar conteúdo binário, e selecione _metadata explicitamente para incluir campos de metadados ao nível do ficheiro.
SELECT
* EXCEPT (content),
_metadata
FROM read_files(
'/Volumes/<catalog>/<schema>/<volume>',
format => 'binaryFile'
);
Listar ficheiros de imagem filtrados por tamanho: Use fileNamePattern para direcionar tipos específicos de ficheiros de imagem e filtre para _metadata.file_size devolver apenas ficheiros dentro de um determinado intervalo de tamanho.
SELECT
* EXCEPT (content),
_metadata
FROM read_files(
'/Volumes/my_catalog/my_schema/my_volume',
format => 'binaryFile',
fileNamePattern => '*.{jpg,jpeg,png,JPG,JPEG,PNG}'
)
WHERE _metadata.file_size BETWEEN 20000 AND 1000000;
Listar ficheiros PDF modificados no último dia: Usar fileNamePattern para direcionar ficheiros PDF e filtrar modificationTime para devolver apenas ficheiros alterados no dia anterior.
SELECT
* EXCEPT (content),
_metadata
FROM read_files(
'/Volumes/my_catalog/my_schema/my_volume',
format => 'binaryFile',
fileNamePattern => '*.{pdf,PDF}'
)
WHERE modificationTime >= current_timestamp() - INTERVAL 1 DAY;
Executar uma função de IA em ficheiros de imagem: Usar ai_query para processar ficheiros de imagem lidos a partir de um caminho de armazenamento na cloud. Filtra os _metadata campos para direcionar ficheiros específicos.
SELECT
path AS file_path,
ai_query(
'databricks-llama-4-maverick',
'Describe this image in ten words or less: ',
files => content
) AS result
FROM read_files(
's3://my-s3-bucket/path/to/images/',
format => 'binaryFile',
fileNamePattern => '*.{jpg,jpeg,png,JPG,JPEG,PNG}'
)
WHERE _metadata.file_size < 1000000
AND _metadata.file_name LIKE '%robots%';
Analisar documentos que correspondam a um padrão de nomes de ficheiro: Usar ai_parse_document para extrair conteúdo estruturado de PDFs e imagens. Filtra por _metadata.file_name para direcionar ficheiros específicos.
SELECT
path AS file_path,
ai_parse_document(
content,
map('version', '2.0')
) AS result
FROM read_files(
'/Volumes/main/public/my_files/',
format => 'binaryFile',
fileNamePattern => '*.{jpg,jpeg,pdf,png}'
)
WHERE _metadata.file_name ILIKE '%receipt%';
Juntar ficheiros com uma tabela estruturada: Fluxos de trabalho não estruturados frequentemente exigem a fusão de dados estruturados armazenados em tabelas com ficheiros não estruturados. O exemplo seguinte une ficheiros num caminho de armazenamento na nuvem com duas tabelas estruturadas, filtrando pelo tamanho do ficheiro e por um atributo do utilizador. A junção com user_files é feita extraindo o ID do ficheiro do caminho do ficheiro usando split e element_at.
SELECT
users.user_id,
user_files.file_id,
files._metadata.file_name AS file_name,
files.* EXCEPT (content),
ai_parse_document(files.content, map('version', '2.0')) AS parsed_document
FROM read_files(
's3://my-bucket-name/files/',
format => 'binaryFile',
fileNamePattern => '*.{pdf,doc,docx,ppt,pptx,png,jpg,jpeg}'
) AS files
JOIN user_files
ON user_files.file_id = element_at(split(files.path, '/'), -2)
JOIN users
ON users.user_id = user_files.user_id
WHERE users.email LIKE '%@databricks.com'
AND files._metadata.file_size < 10000000;