文件元數據列
請注意
在Databricks Runtime 10.5及以上版本中可用。
方法可以獲取輸入文件的元數據信息_metadata
列。的_metadata
列是隱藏的列,並且可用於所有輸入文件格式。要包括_metadata
列,你必須顯式地引用它在你的查詢。
如果數據源包含名為_metadata
,查詢將返回來自數據源的列,而不是文件元數據。
警告
屬性中可以添加新的字段_metadata
專欄。來防止模式演變錯誤_metadata
列更新時,Databricks建議從查詢中的列中選擇特定的字段。看到例子.
支持元數據
的_metadata
列是結構體
包含以下字段:
名字 |
類型 |
描述 |
例子 |
---|---|---|---|
file_path |
|
輸入文件的路徑。 |
|
file_name |
|
輸入文件的名稱及其擴展名。 |
|
file_size |
|
輸入文件的長度,以字節為單位。 |
628 |
file_modification_time |
|
輸入文件的最後一次修改時間戳。 |
|
例子
在基本的基於文件的數據源閱讀器中使用
df=火花.讀\.格式(“csv”)\.模式(模式)\.負載(“dbfs: / tmp / *”)\.選擇(“*”,“_metadata”)顯示(df)“‘結果:+---------+-----+----------------------------------------------------+| name | age | _metadata | .使用實例+=========+=====+====================================================+| | | {|| | | "file_path": "dbfs:/tmp/f0.csv", || Debbie | 18 | "file_name": "f0.csv", | .csv"| | | "file_size": 12, || | | "file_modification_time": "2021-07-02 01:05:21" | .| | |} |+---------+-----+----------------------------------------------------+| | | {|| | | "file_path": "dbfs:/tmp/f1.csv", | | | "file_path": "dbfs:/tmp/f1.csv| Frank | 24 | "file_name": "f1.csv", || | | "file_size": 12, || | | "file_modification_time": "2021-12-20 02:06:21" || | |} |+---------+-----+----------------------------------------------------+“‘
瓦爾df=火花.讀.格式(“csv”).模式(模式).負載(“dbfs: / tmp / *”).選擇(“*”,“_metadata”)顯示(df_population)/ *結果:+---------+-----+----------------------------------------------------+| name | age | _metadata | .使用實例+=========+=====+====================================================+| | | {|| | | "file_path": "dbfs:/tmp/f0.csv", || Debbie | 18 | "file_name": "f0.csv", | .csv"| | | "file_size": 12, || | | "file_modification_time": "2021-07-02 01:05:21" | .| | |} |+---------+-----+----------------------------------------------------+| | | {|| | | "file_path": "dbfs:/tmp/f1.csv", | | | "file_path": "dbfs:/tmp/f1.csv| Frank | 24 | "file_name": "f1.csv", || | | "file_size": 10, || | | "file_modification_time": "2021-12-20 02:06:21" || | |} |+---------+-----+----------------------------------------------------+* /
選擇特定字段
火花.讀\.格式(“csv”)\.模式(模式)\.負載(“dbfs: / tmp / *”)\.選擇(“_metadata.file_name”,“_metadata.file_size”)
火花.讀.格式(“csv”).模式(模式).負載(“dbfs: / tmp / *”).選擇(“_metadata.file_name”,“_metadata.file_size”)
在過濾器中使用
火花.讀\.格式(“csv”)\.模式(模式)\.負載(“dbfs: / tmp / *”)\.選擇(“*”)\.過濾器(上校(“_metadata.file_name”)= =點燃(“test.csv”))
火花.讀.格式(“csv”).模式(模式).負載(“dbfs: / tmp / *”).選擇(“*”).過濾器(上校(“_metadata.file_name”)= = =點燃(“test.csv”))
在自動裝載機中使用
請注意
當寫_metadata
列,我們將其重命名為source_metadata
.寫成_metadata
將使它無法訪問目標表中的元數據列,因為如果數據源包含一個名為_metadata
,查詢將返回來自數據源的列,而不是文件元數據。
火花.readStream\.格式(“cloudFiles”)\.選項(“cloudFiles.format”,“csv”)\.模式(模式)\.負載(“gs: / /桶/ csvData”)\.selectExpr(“*”,"_metadata as source_metadata")\.writeStream\.格式(“δ”)\.選項(“checkpointLocation”,checkpointLocation)\.開始(targetTable)
火花.readStream.格式(“cloudFiles”).選項(“cloudFiles.format”,“csv”).模式(模式).負載(“gs: / /桶/ csvData”).selectExpr(“*”,"_metadata as source_metadata").writeStream.格式(“δ”).選項(“checkpointLocation”,checkpointLocation).開始(targetTable)