Pular para o conteúdo principal
Página não listada
Esta página não está listada. Mecanismos de busca não armazenarão nenhuma informação, e somente usuários que possuam o link direto poderão acessá-la

Coluna de metadados do arquivo

O senhor pode obter informações de metadados para arquivos de entrada com a coluna _metadata. A coluna _metadata é uma coluna oculta e está disponível para todos os formatos de arquivo de entrada. Para incluir a coluna _metadata no DataFrame retornado, o senhor deve selecioná-la explicitamente na consulta de leitura em que especifica a fonte.

Se a fonte de dados contiver uma coluna chamada _metadata, as consultas retornarão a coluna da fonte de dados, e não os metadados do arquivo.

atenção

Novos campos podem ser adicionados à coluna _metadata em versões futuras. Para evitar erros de evolução do esquema se a coluna _metadata for atualizada, a Databricks recomenda selecionar campos específicos da coluna em suas consultas. Veja exemplos.

Metadados compatíveis

A coluna _metadata é STRUCT contendo os seguintes campos:

Nome

Tipo

Descrição

Exemplo

Versão mínima do Databricks Runtime

caminho_do_arquivo

STRING

Caminho do arquivo de entrada.

file:/tmp/f0.csv

10.5

nome_do_arquivo

STRING

Nome do arquivo de entrada junto com sua extensão.

f0.csv

10.5

tamanho_de_arquivo

LONG

Tamanho do arquivo de entrada, em bytes.

628

10.5

horário_modificação_do arquivo

TIMESTAMP

Data e hora da última modificação do arquivo de entrada.

2021-12-20 20:05:21

10.5

file_block_start

LONG

Começar offset do bloco que está sendo lido, em bytes.

0

13.0

tamanho do arquivo_bloque_do_arquivo

LONG

Comprimento do bloco que está sendo lido, em bytes.

628

13.0

Exemplos

Uso em um leitor básico de fontes de dados baseado em arquivos

Python
df = spark.read \
.format("csv") \
.schema(schema) \
.load("dbfs:/tmp/*") \
.select("*", "_metadata")

display(df)

'''
Result:
+---------+-----+----------------------------------------------------+
| name | age | _metadata |
+=========+=====+====================================================+
| | | { |
| | | "file_path": "dbfs:/tmp/f0.csv", |
| Debbie | 18 | "file_name": "f0.csv", |
| | | "file_size": 12, |
| | | "file_block_start": 0, |
| | | "file_block_length": 12, |
| | | "file_modification_time": "2021-07-02 01:05:21" |
| | | } |
+---------+-----+----------------------------------------------------+
| | | { |
| | | "file_path": "dbfs:/tmp/f1.csv", |
| Frank | 24 | "file_name": "f1.csv", |
| | | "file_size": 12, |
| | | "file_block_start": 0, |
| | | "file_block_length": 12, |
| | | "file_modification_time": "2021-12-20 02:06:21" |
| | | } |
+---------+-----+----------------------------------------------------+
'''

Selecione campos específicos

Python
spark.read \
.format("csv") \
.schema(schema) \
.load("dbfs:/tmp/*") \
.select("_metadata.file_name", "_metadata.file_size")

Uso em filtros

Python
spark.read \
.format("csv") \
.schema(schema) \
.load("dbfs:/tmp/*") \
.select("*") \
.filter(col("_metadata.file_name") == lit("test.csv"))

Uso em COPY INTO (legado)

SQL
COPY INTO my_delta_table
FROM (
SELECT *, _metadata FROM 'gs://my-bucket/csvData'
)
FILEFORMAT = CSV

Uso no Auto Loader

Se seus dados de origem contiverem uma coluna chamada _metadata, renomeie-a para source_metadata. Se você não renomeá-la, não poderá acessar a coluna de metadados do arquivo na tabela de destino; em vez disso, as consultas retornarão a coluna de origem.

Python
spark.readStream \
.format("cloudFiles") \
.option("cloudFiles.format", "csv") \
.schema(schema) \
.load("gs://my-bucket/csvData") \
.selectExpr("*", "_metadata as source_metadata") \
.writeStream \
.option("checkpointLocation", checkpointLocation) \
.start(targetTable)

Se o senhor usar foreachBatch e quiser incluir a coluna de metadados do arquivo na transmissão DataFrame, deverá fazer referência a ela na transmissão read DataFrame antes da função foreachBatch. Se você fizer referência apenas à coluna de metadados do arquivo dentro da função foreachBatch, a coluna não será incluída.

Python
spark.readStream \
.format("cloudFiles") \
.option("cloudFiles.format", "csv") \
.load("gs://my-bucket/csvData") \
.select("*", "metadata") \
.writeStream \
.foreachBatch(...)

Artigos relacionados