Nota:
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
Puede obtener información de metadatos para los archivos de entrada con la columna _metadata. La columna _metadata es una columna oculta y está disponible para todos los formatos de archivo de entrada. Para incluir la _metadata columna en el dataframe devuelto, debe seleccionarla explícitamente en la consulta de lectura donde especifique el origen.
Si el origen de datos contiene una columna denominada _metadata, las consultas devuelven la columna desde el origen de datos y no los metadatos del archivo.
Advertencia
Se pueden agregar nuevos campos a la columna _metadata en futuras versiones. Para evitar errores de evolución del esquema si se actualiza la columna _metadata, Databricks recomienda seleccionar campos específicos de la columna en las consultas. Consulte ejemplos.
Metadatos admitidos
La columna _metadata es un objeto STRUCT que contiene los campos siguientes:
| Nombre | Tipo | Descripción | Ejemplo | Versión mínima de Databricks Runtime |
|---|---|---|---|---|
| file_path | STRING |
Ruta de acceso del archivo de entrada. | file:/tmp/f0.csv |
10.5 |
| file_name | STRING |
Nombre del archivo de entrada junto con su extensión. | f0.csv |
10.5 |
| file_size | LONG |
Tamaño del archivo de entrada, en bytes. | 628 | 10.5 |
| hora_de_modificacion_del_archivo | TIMESTAMP |
Marca de tiempo de la última modificación del archivo de entrada. | 2021-12-20 20:05:21 |
10.5 |
| inicio_del_bloque_de_archivo | LONG |
Desplazamiento inicial del bloque que se va a leer, en bytes. | 0 | 13,0 |
| longitud_del_bloque_de_archivo | LONG |
Longitud del bloque que se lee, en bytes. | 628 | 13,0 |
Para obtener propiedades adicionales de nivel de objeto en la nube, consulte Columna metadatos de objeto.
Ejemplos
Uso en un lector de origen de datos basado en archivos básico
Pitón
df = spark.read \
.format("csv") \
.schema(schema) \
.load("/Volumes/catalog_name/schema_name/volume_name/data/*") \
.select("*", "_metadata")
display(df)
'''
Result:
+---------+-----+----------------------------------------------------+
| name | age | _metadata |
+=========+=====+====================================================+
| | | { |
| | | "file_path": "/Volumes/catalog_name/ |
| Debbie | 18 | schema_name/volume_name/data/f0.csv", |
| | | "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": "/Volumes/catalog_name/ |
| Frank | 24 | schema_name/volume_name/data/f1.csv", |
| | | "file_name": "f1.csv", |
| | | "file_size": 12, |
| | | "file_block_start": 0, |
| | | "file_block_length": 12, |
| | | "file_modification_time": "2021-12-20 02:06:21" |
| | | } |
+---------+-----+----------------------------------------------------+
'''
Scala
val df = spark.read
.format("csv")
.schema(schema)
.load("/Volumes/catalog_name/schema_name/volume_name/data/*")
.select("*", "_metadata")
display(df)
/* Result:
+---------+-----+----------------------------------------------------+
| name | age | _metadata |
+=========+=====+====================================================+
| | | { |
| | | "file_path": "/Volumes/catalog_name/ |
| Debbie | 18 | schema_name/volume_name/data/f0.csv", |
| | | "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": "/Volumes/catalog_name/ |
| Frank | 24 | schema_name/volume_name/data/f1.csv", |
| | | "file_name": "f1.csv", |
| | | "file_size": 10, |
| | | "file_block_start": 0, |
| | | "file_block_length": 12, |
| | | "file_modification_time": "2021-12-20 02:06:21" |
| | | } |
+---------+-----+----------------------------------------------------+
*/
Selección de campos específicos
Pitón
spark.read \
.format("csv") \
.schema(schema) \
.load("/Volumes/catalog_name/schema_name/volume_name/data/*") \
.select("_metadata.file_name", "_metadata.file_size")
Scala
spark.read
.format("csv")
.schema(schema)
.load("/Volumes/catalog_name/schema_name/volume_name/data/*")
.select("_metadata.file_name", "_metadata.file_size")
Uso en filtros
Pitón
spark.read \
.format("csv") \
.schema(schema) \
.load("/Volumes/catalog_name/schema_name/volume_name/data/*") \
.select("*") \
.filter(col("_metadata.file_name") == lit("test.csv"))
Scala
spark.read
.format("csv")
.schema(schema)
.load("/Volumes/catalog_name/schema_name/volume_name/data/*")
.select("*")
.filter(col("_metadata.file_name") === lit("test.csv"))
Uso en COPY INTO (heredado)
COPY INTO my_delta_table
FROM (
SELECT *, _metadata FROM 'abfss://my-container-name@storage-account-name.dfs.core.windows.net/csvData'
)
FILEFORMAT = CSV
Uso en el cargador automático
Si los datos de origen contienen una columna denominada _metadata, cámbiela por source_metadata. Si no cambia el nombre, no puede acceder a la columna de metadatos del archivo en la tabla de destino; las consultas devolverán la columna de origen en su lugar.
Pitón
spark.readStream \
.format("cloudFiles") \
.option("cloudFiles.format", "csv") \
.schema(schema) \
.load("abfss://my-container-name@storage-account-name.dfs.core.windows.net/csvData") \
.selectExpr("*", "_metadata as source_metadata") \
.writeStream \
.option("checkpointLocation", checkpointLocation) \
.start(targetTable)
Scala
spark.readStream
.format("cloudFiles")
.option("cloudFiles.format", "csv")
.schema(schema)
.load("abfss://my-container-name@storage-account-name.dfs.core.windows.net/csvData")
.selectExpr("*", "_metadata as source_metadata")
.writeStream
.option("checkpointLocation", checkpointLocation)
.start(targetTable)
Si usa foreachBatch y desea incluir la columna de metadatos de archivo en el DataFrame de streaming, debe hacer referencia a esta columna en el DataFrame de lectura de streaming antes de la función foreachBatch. Si solo hace referencia a la columna de metadatos de archivo dentro de la foreachBatch función , la columna no se incluye.
Pitón
spark.readStream \
.format("cloudFiles") \
.option("cloudFiles.format", "csv") \
.load("abfss://my-container-name@storage-account-name.dfs.core.windows.net/csvData") \
.select("*", "metadata") \
.writeStream \
.foreachBatch(...)
Scala
spark.readStream
.format("cloudFiles")
.option("cloudFiles.format", "csv")
.load("abfss://my-container-name@storage-account-name.dfs.core.windows.net/csvData")
.select("*", "metadata")
.writeStream
.foreachBatch(...)