Anteckning
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
Du kan hämta metadatainformation för indatafiler med kolumnen _metadata. Kolumnen _metadata är en dold kolumn och är tillgänglig för alla indatafilformat. Om du vill inkludera _metadata kolumnen i den returnerade DataFrame måste du uttryckligen välja den i den läsfråga där du anger källan.
Om datakällan innehåller en kolumn med namnet _metadatareturnerar frågor kolumnen från datakällan och inte filmetadata.
Varning
Nya fält kan läggas till i kolumnen _metadata i framtida versioner. För att förhindra schemautvecklingsfel om kolumnen _metadata uppdateras rekommenderar Databricks att du väljer specifika fält från kolumnen i dina frågor. Se exempel.
Metadata som stöds
Kolumnen _metadata är en STRUCT som innehåller följande fält:
| Namn | Typ | Beskrivning | Exempel | Lägsta Databricks Runtime version |
|---|---|---|---|---|
| file_path | STRING |
Filsökvägen för indatafilen. | file:/tmp/f0.csv |
10.5 |
| file_name | STRING |
Namnet på indatafilen tillsammans med dess filändelse. | f0.csv |
10.5 |
| file_size | LONG |
Längden på indatafilen i byte. | 628 | 10.5 |
| filändringstid | TIMESTAMP |
Tidsstämpel för senaste ändring för indatafilen. | 2021-12-20 20:05:21 |
10.5 |
| file_block_start | LONG |
Startförskjutning i byte av blocket som läses. | 0 | 13,0 |
| file_block_length | LONG |
Längden på blocket som läses, i bytes. | 628 | 13,0 |
Exempel
Använda i en grundläggande filbaserad datakällaläsare
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" |
| | | } |
+---------+-----+----------------------------------------------------+
'''
Scala
val df = spark.read
.format("csv")
.schema(schema)
.load("dbfs:/tmp/*")
.select("*", "_metadata")
display(df_population)
/* 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": 10, |
| | | "file_block_start": 0, |
| | | "file_block_length": 12, |
| | | "file_modification_time": "2021-12-20 02:06:21" |
| | | } |
+---------+-----+----------------------------------------------------+
*/
Välj specifika fält
python
spark.read \
.format("csv") \
.schema(schema) \
.load("dbfs:/tmp/*") \
.select("_metadata.file_name", "_metadata.file_size")
Scala
spark.read
.format("csv")
.schema(schema)
.load("dbfs:/tmp/*")
.select("_metadata.file_name", "_metadata.file_size")
Använd i filter
python
spark.read \
.format("csv") \
.schema(schema) \
.load("dbfs:/tmp/*") \
.select("*") \
.filter(col("_metadata.file_name") == lit("test.csv"))
Scala
spark.read
.format("csv")
.schema(schema)
.load("dbfs:/tmp/*")
.select("*")
.filter(col("_metadata.file_name") === lit("test.csv"))
Använd i COPY INTO (äldre)
COPY INTO my_delta_table
FROM (
SELECT *, _metadata FROM 'abfss://my-container-name@storage-account-name.dfs.core.windows.net/csvData'
)
FILEFORMAT = CSV
Använda i automatisk inläsning
Om dina källdata innehåller en kolumn med namnet _metadatabyter du namn på den till source_metadata. Om du inte byter namn på den kan du inte komma åt kolumnen med filmetadata i måltabellen. frågor returnerar källkolumnen i stället.
python
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)
Om du använder foreachBatch och vill inkludera filmetadatakolumnen i streaming-DataFrame:en måste du referera den i strömningsläsningen av DataFrame:en före foreachBatch-funktionen. Om du bara refererar till kolumnen för filmetadata i foreachBatch funktionen inkluderas inte kolumnen.
python
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(...)