read_file表值函數

適用於:檢查標記是的”src=磚的SQL檢查標記是的”src=磚運行時13.1及以後

讀取文件在一個位置並返回數據以表格形式提供。

支持閱讀JSON,CSV,文本,BINARYFILE,拚花,AVRO,獸人文件格式。可以自動檢測文件格式和推斷出一個統一的模式在所有文件。

語法

read_file(路徑(,option_key= >option_value](])

參數

  • 路徑:一個字符串的URI的位置數據。支持閱讀從Azure數據存儲Gen2湖(“abfss: / /”),S3 (s3: / /)和穀歌雲存儲(“gs: / /”)。可以包含著。看到文件發現為更多的細節。

  • option_key:的名稱選項配置。你需要使用引號(“)選項包含點()。

  • option_value:一個常數表達式設置選項。接受文字和標量函數。

返回

下一個表組成的數據從文件讀取給定路徑

文件發現

read_file能讀懂一個人提供一個目錄下的文件或閱讀文件。read_file遞歸地發現所提供的目錄下的所有文件,除非一個一團提供的指示嗎read_file遞歸到一個特定的目錄模式。

過濾使用一滴目錄或文件模式

水珠模式可用於過濾目錄和文件時提供的路徑。

模式

描述

嗎?

匹配任何單個的字符

*

匹配零個或多個字符

(美國廣播公司)

匹配一個字符的字符集{a, b, c}。

的[a -ž]

匹配一個字符的字符範圍{…z}。

(^)

匹配一個字符不是字符集或距離{}。請注意,^字符必須立即出現右邊的支架。

{ab、cd}

匹配字符串的字符串集{ab、cd}。

{ab, c{德,跳頻}}

匹配字符串的字符串集{ab, cde, cfh}。

read_file使用自動加載程序嚴格的水珠時發現文件的粘稠。這是配置的useStrictGlobber選擇。當嚴格的水珠被禁用,斜杠(/),一個明星模式等/ * /可以擴展到發現多個目錄。看下麵的例子的不同行為。

模式

文件路徑

嚴格的水珠禁用

嚴格的水珠啟用

/ / b

/ a / b / c / file.txt

是的

是的

/ / b

/ / b_dir / c / file.txt

沒有

沒有

/ / b

/ / b.txt

沒有

沒有

/ a / b /

/ / b.txt

沒有

沒有

/ / * / c /

/ a / b / c / file.txt

是的

是的

/ / * / c /

/ a / b / c / d / file.txt

是的

是的

/ / * / d /

/ a / b / c / d / file.txt

是的

沒有

/ / * / c /

/ a / b / x / y / c / file.txt

是的

沒有

/ / * / c

/ a / b / c_file.txt

是的

沒有

/ / * / c /

/ a / b / c_file.txt

是的

沒有

/ / * / c

/ / b / cookie / file.txt

是的

沒有

/ / b *

/ / b.txt

是的

是的

/ / b *

/ a / b / file.txt

是的

是的

/ / {0. txt, 1. txt}

/ / 0.三種

是的

是的

/ / * / {0. txt, 1. txt}

/ / 0.三種

沒有

沒有

/ a / b / [cde-h] /我/

/ a / b / c / i / file.txt

是的

是的

模式推理

可以顯式地提供文件的模式read_file模式選擇。不提供模式時,read_file試圖推斷出一個統一的模式發現的文件,除非需要閱讀所有的文件限製聲明中使用。即使使用限製查詢,一個更大的比所需的文件集可能讀取返回一個更具代表性的數據模式。磚自動添加一個限製聲明為選擇查詢在筆記本和SQL編輯器如果用戶沒有提供。

schemaHints選項可以用來修複推斷模式的子集。看到覆蓋模式推理與提示為更多的細節。

一個rescuedDataColumn默認情況下提供救援模式不匹配的任何數據。看到獲救的數據列是什麼?為更多的細節。你可以放下rescuedDataColumn通過設置選項schemaEvolutionMode= >“沒有”

分區模式推理

read_file也可以推斷出分區列如果文件被存儲Hive-style分區目錄,/ column_name = column_value /。如果一個模式,發現分區列利用類型提供的嗎模式。如果分區列不提供的一部分模式,然後推斷出分區列將被忽略。

如果一列存在的分區模式和數據列,的值讀取數據的分區使用價值而不是價值。如果你想忽略來自目錄和使用數據的值列,您可以提供的列表分區列以逗號分隔的列表partitionColumns選擇。

partitionColumns選項還可以用來指導read_file在最後發現列包括推斷模式。提供一個空字符串忽略所有分區列。

schemaHints選項也可以覆蓋推斷模式提供一個分區列。

文本BINARYFILE格式有固定的模式,但是read_file也為這些格式試圖推斷出分區。

使用流表中

read_file可用於流表來攝取文件到三角洲湖。read_file利用自動加載器使用時在一個流表中查詢。你必須使用關鍵字與read_file。看到自動加載器是什麼?為更多的細節。

當流查詢中使用,read_file將使用一個示例來推斷數據的模式,並且可以動態演變模式,因為它處理更多的數據。看到配置模式推理和進化自動加載程序為更多的細節。

選項

基本選項

選項

格式

類型:字符串

數據文件格式在源路徑中。Auto-inferred如果沒有提供。允許的值包括:

默認值:無

inferColumnTypes

類型:布爾

是否當利用模式推理推斷出準確的列類型。默認情況下,列是推斷當推斷JSON和CSV數據集。看到模式推理為更多的細節。注意,這是默認的自動加載程序的反麵。

默認值:真正的

partitionColumns

類型:字符串

蜂巢的逗號分隔列表樣式分區列你想從文件的目錄結構推斷。蜂巢式分區列是鍵值對組合等一個平等的跡象<基本路徑> / = x / b = 1 / c = y / file.format。在這個例子中,分區列一個,b,c。默認情況下,這些列將自動添加到您的模式如果使用模式推理並提供<基本路徑>加載數據。如果你提供了一個模式,自動加載程序預計這些列將包含在模式。如果你不想要這些列作為模式的一部分,您可以指定”“忽略這些列。此外,您可以使用這個選項,當你想要列推斷複雜的目錄結構的文件路徑,像下麵的例子:

<基本路徑> /年= 2022 /周= 1 / file1.csv<基本路徑> /年= 2022 /月= 2 /天= 3 / file2.csv<基本路徑> /年= 2022 /月= 2 /天= 4 / file3.csv

指定cloudFiles.partitionColumns作為年、月、日將返回年= 2022file1.csv,但一天列會一天將解析正確嗎file2.csvfile3.csv

默認值:無

schemaHints

類型:字符串

模式信息期間,您提供自動加載程序模式推理。看到模式提示為更多的細節。

默認值:無

useStrictGlobber

類型:布爾

是否使用默認的globbing行為相匹配的嚴格的水珠Apache引發的其他文件來源。看到常見的數據加載模式為更多的細節。在磚運行時12.0及以上。注意,這是相反的默認為自動加載程序。

默認值:真正的

通用選項

以下選項適用於所有文件格式。

選項

ignoreCorruptFiles

類型:布爾

是否忽略腐敗文件。如果這是真的,火花的工作將繼續運行,當遇到損壞文件和已讀過的內容仍將返回。可見,numSkippedCorruptFilesoperationMetrics列的三角洲湖曆史。在磚運行時11.0及以上。

默認值:

ignoreMissingFiles

類型:布爾

是否忽略丟失的文件。如果這是真的,火花的工作將繼續運行,當遇到丟失的文件和內容閱讀仍將返回。在磚運行時11.0及以上。

默認值:(真正的複製)

modifiedAfter

類型:時間戳字符串例如,2021-01-0100:00:00.000000UTC + 0

一個可選的時間戳來攝取文件修改時間戳後提供時間戳。

默認值:無

modifiedBefore

類型:時間戳字符串例如,2021-01-0100:00:00.000000UTC + 0

一個可選的時間戳來攝取文件修改時間戳之前提供的時間戳。

默認值:無

pathGlobFilterfileNamePattern

類型:字符串

一個潛在的水珠模式提供選擇文件。相當於模式複製fileNamePattern可以用在read_file

默認值:無

recursiveFileLookup

類型:布爾

是否加載數據基地內遞歸目錄和跳過分區推斷。

默認值:

JSON選項

選項

allowBackslashEscapingAnyCharacter

類型:布爾

是否允許反斜杠轉義字符的任何成功。如果未啟用,隻有那些顯式列出字符由JSON規範可以逃脫。

默認值:

allowComments

類型:布爾

是否允許使用Java, C和c++風格的評論(' / ',‘*’,' / / '品種)在解析內容。

默認值:

allowNonNumericNumbers

類型:布爾

是否允許的集合不是一個數字()令牌作為法定數量浮動值。

默認值:真正的

allowNumericLeadingZeros

類型:布爾

是否允許積分數字開始額外(循環)0(例如,000001)。

默認值:

allowSingleQuotes

類型:布爾

是否允許使用單引號(撇號,性格“\”)引用字符串(字符串名稱和值)。

默認值:真正的

allowUnquotedControlChars

類型:布爾

是否允許JSON字符串包含保有的控製字符(ASCII字符值小於32,包括選項卡並換行字符)。

默認值:

allowUnquotedFieldNames

類型:布爾

是否允許使用非掛牌字段名稱(允許JavaScript,但不是通過JSON規範)。

默認值:

badRecordsPath

類型:字符串

存儲文件的路徑記錄壞JSON的信息記錄。

默認值:無

columnNameOfCorruptRecord

類型:字符串

列存儲記錄,是畸形的,不能被解析。如果模式解析設置DROPMALFORMED,本專欄將是空的。

默認值:_corrupt_record

dateFormat

類型:字符串

解析日期的格式字符串。

默認值:yyyy-MM-dd

dropFieldIfAllNull

類型:布爾

是否要忽略所有空值的列或空數組和結構體在模式推理。

默認值:

編碼字符集

類型:字符串

JSON編碼的文件的名稱。看到charset選項列表。你不能使用utf - 16utf - 32多行真正的

默認值:utf - 8

inferTimestamp

類型:布爾

是否嚐試推斷作為時間戳字符串TimestampType。當設置為真正的、模式推理明顯可能需要更長時間。您必須啟用cloudFiles.inferColumnTypes使用自動加載程序。

默認值:

lineSep

類型:字符串

兩個連續的JSON記錄之間的字符串。

默認值:沒有,涵蓋r \,\ r \ n,\ n

語言環境

類型:字符串

一個java.util.Locale標識符。影響默認日期、時間戳和十進製解析JSON。

默認值:我們

模式

類型:字符串

解析器模式在處理畸形的記錄。之一“寬容”,“DROPMALFORMED”,或“FAILFAST”

默認值:寬容的

多行

類型:布爾

JSON記錄是否跨越多個行。

默認值:

prefersDecimal

類型:布爾

試圖推斷出字符串DecimalType而不是浮點數和雙精度類型。您還必須使用模式推理,通過啟用inferSchema或使用cloudFiles.inferColumnTypes自動加載程序。

默認值:

primitivesAsString

類型:布爾

是否要推斷數字和布爾值等基本類型StringType

默認值:

rescuedDataColumn

類型:字符串

是否收集所有的數據不能被解析由於模式數據類型不匹配或不匹配(包括列套管)到一個單獨的列中。這一列包含在默認情況下使用時自動加載程序。有關更多細節,請參考獲救的數據列是什麼?

默認值:無

timestampFormat

類型:字符串

解析時間戳的格式字符串。

默認值:yyyy-MM-dd 'HH: mm: ss [.SSS] [XXX]

時區

類型:字符串

java.time.ZoneId解析時使用時間戳和日期。

默認值:無

CSV選項

選項

badRecordsPath

類型:字符串

存儲文件的路徑記錄壞CSV信息記錄。

默認值:無

charToEscapeQuoteEscaping

類型:字符

使用的用來逃避字符轉義引號。例如,對於以下記錄:(\ \ ",b]:

  • 如果字符逃離“\”未定義時,記錄不會被解析。解析器會讀取字符:[一],[\],["],[,],[]、[b]拋出一個錯誤,因為它找不到關閉報價。

  • 如果字符逃離“\”被定義為“\”記錄將被讀取2的值:[一個\][b]

默認值:' \ 0

columnNameOfCorruptRecord

類型:字符串

一列來存儲記錄畸形,不能被解析。如果模式解析設置DROPMALFORMED,本專欄將是空的。

默認值:_corrupt_record

評論

類型:字符

定義了字符代表一行評論時發現一行文本的開始。使用' \ 0禁用不發表評論。

默認值:“\ u0000”

dateFormat

類型:字符串

解析日期的格式字符串。

默認值:yyyy-MM-dd

emptyValue

類型:字符串

空值的字符串表示。

默認值:”“

編碼字符集

類型:字符串

CSV文件的編碼的名稱。看到charset選項列表中。utf - 16utf - 32時不能使用多行真正的

默認值:utf - 8

enforceSchema

類型:布爾

是否強行指定或推斷模式應用到CSV文件。如果啟用了選擇,CSV文件的標題將被忽略。這個選項默認是忽略了在使用自動加載程序來拯救數據並允許模式演化。

默認值:真正的

逃避

類型:字符

解析數據時使用的轉義字符。

默認值:“\”

類型:布爾

CSV文件是否包含一個頭。自動加載程序假設推斷模式時文件頭。

默認值:

ignoreLeadingWhiteSpace

類型:布爾

是否忽略主要空白每個解析值。

默認值:

ignoreTrailingWhiteSpace

類型:布爾

是否忽略尾隨的空格為每個解析值。

默認值:

inferSchema

類型:布爾

是否來推斷的數據類型解析CSV或假設所有列的記錄StringType。需要一個額外的如果設置在數據傳遞給真正的。自動加載程序,使用cloudFiles.inferColumnTypes代替。

默認值:

lineSep

類型:字符串

兩個連續的CSV記錄之間的字符串。

默認值:沒有,涵蓋r \,\ r \ n,\ n

語言環境

類型:字符串

一個java.util.Locale標識符。影響默認日期、時間戳和小數解析CSV。

默認值:我們

maxCharsPerColumn

類型:Int

最大數量的角色期望從一個值來解析。可以用來避免內存錯誤。默認為1,這意味著無限的。

默認值:1

maxColumns

類型:Int

有多少列的硬限製記錄。

默認值:20480年

mergeSchema

類型:布爾

是否來推斷模式跨多個文件和每個文件的合並模式。默認啟用推斷模式時自動加載程序。

默認值:

模式

類型:字符串

解析器模式在處理畸形的記錄。之一“寬容”,“DROPMALFORMED”,“FAILFAST”

默認值:寬容的

多行

類型:布爾

CSV檔案是否跨越多個行。

默認值:

nanValue

類型:字符串

當解析non-a-number值的字符串表示FloatType倍增式列。

默認值:“南”

negativeInf

類型:字符串

當解析的字符串表示負無窮FloatType倍增式列。

默認值:“負”

nullValue

類型:字符串

空值的字符串表示。

默認值:”“

parserCaseSensitive(棄用)

類型:布爾

在閱讀文件,是否對齊列的標題模式中聲明的情況下敏感。這是真正的默認為自動加載程序。列情況下將獲救的差異rescuedDataColumn如果啟用。這個選項已經被棄用的readerCaseSensitive

默認值:

positiveInf

類型:字符串

當解析的字符串表示正無窮FloatType倍增式列。

默認值:“正”

preferDate

類型:布爾

試圖推斷出字符串作為日期的時間戳。您還必須使用模式推理,通過啟用inferSchema或使用cloudFiles.inferColumnTypes自動加載程序。

默認值:真正的

報價

類型:字符

使用的字符轉義值字段分隔符的值。

默認值:

readerCaseSensitive

類型:布爾

當指定大小寫敏感性行為rescuedDataColumn啟用。如果這是真的,拯救數據列的名字的情況下不同模式;否則,以不區分大小寫的方式讀取數據。

默認值:真正的

rescuedDataColumn

類型:字符串

是否收集所有數據不能被解析由於:一個數據類型不匹配,不匹配和模式(包括列套管)到一個單獨的列中。這一列包含在默認情況下使用時自動加載程序。更多細節請參考獲救的數據列是什麼?

默認值:無

9月分隔符

類型:字符串

列之間的分隔符字符串。

默認值:”、“

skipRows

類型:Int

的行數從一開始就應該被忽略的CSV文件(包括注釋和空行)。如果是真的,標題將第一unskipped和注釋行。

默認值:0

timestampFormat

類型:字符串

解析時間戳的格式字符串。

默認值:yyyy-MM-dd 'HH: mm: ss [.SSS] [XXX]

時區

類型:字符串

java.time.ZoneId解析時使用時間戳和日期。

默認值:無

unescapedQuoteHandling

類型:字符串

策略來處理非轉義引號。允許選擇:

  • STOP_AT_CLOSING_QUOTE:如果保有的報價在輸入,積累援引性格和價值進行解析的引用值,直到找到關閉報價。

  • BACK_TO_DELIMITER:如果保有的報價在輸入,考慮到價值作為非上市價值。這將使當前的解析值的解析器積累所有字符直到定義的分隔符9月是發現。如果沒有找到分隔符的值,解析器將繼續積累從輸入直到分隔符或行結束字符。

  • STOP_AT_DELIMITER:如果保有的報價在輸入,考慮到價值作為非上市價值。這將使解析器積累所有字符直到定義的分隔符9月或發現一行結束輸入。

  • SKIP_VALUE:輸入,如果找到保有的報價的內容解析給定的值將被忽略(直到找到下一個分隔符)和價值nullValue將會產生。

  • RAISE_ERROR:輸入,如果找到保有的報價TextParsingException將拋出。

默認值:STOP_AT_DELIMITER

拚花選項

選項

datetimeRebaseMode

類型:字符串

控製變基之間的日期和時間戳值朱利安和預期的公曆日曆。允許的值:異常,遺產,糾正

默認值:遺產

int96RebaseMode

類型:字符串

控製的變基INT96時間戳值之間朱利安和預期的公曆日曆。允許的值:異常,遺產,糾正

默認值:遺產

mergeSchema

類型:布爾

是否來推斷模式跨多個文件和每個文件的合並模式。

默認值:

readerCaseSensitive

類型:布爾

當指定大小寫敏感性行為rescuedDataColumn啟用。如果這是真的,拯救數據列的名字的情況下不同模式;否則,以不區分大小寫的方式讀取數據。

默認值:真正的

rescuedDataColumn

類型:字符串

是否收集所有數據不能被解析由於:一個數據類型不匹配,不匹配和模式(包括列套管)到一個單獨的列中。這一列包含在默認情況下使用時自動加載程序。更多細節請參考獲救的數據列是什麼?

默認值:無

AVRO選項

選項

avroSchema

類型:字符串

Avro格式的用戶提供的可選模式。閱讀Avro時,這個選項可以設置為一種進化模式,這是兼容與實際Avro但是不同的模式。反序列化的模式將與進化模式一致。例如,如果您設置一個進化模式包含一個額外的列的默認值,讀取結果將包含新列。

默認值:無

datetimeRebaseMode

類型:字符串

控製變基之間的日期和時間戳值朱利安和預期的公曆日曆。允許的值:異常,遺產,糾正

默認值:遺產

mergeSchema

類型:布爾

是否來推斷模式跨多個文件和每個文件的合並模式。mergeSchemaAvro不放鬆的數據類型。

默認值:

readerCaseSensitive

類型:布爾

當指定大小寫敏感性行為rescuedDataColumn啟用。如果這是真的,拯救數據列的名字的情況下不同模式;否則,以不區分大小寫的方式讀取數據。

默認值:真正的

rescuedDataColumn

類型:字符串

是否收集所有數據不能被解析由於:一個數據類型不匹配,不匹配和模式(包括列套管)到一個單獨的列中。這一列包含在默認情況下使用時自動加載程序。更多細節請參考獲救的數據列是什麼?

默認值:無

BINARYFILE選項

二進製文件沒有任何額外的配置選項。

文本選項

選項

編碼

類型:字符串

文本文件的編碼的名稱。看到charset選項列表。

默認值:utf - 8

lineSep

類型:字符串

兩個連續的文本記錄之間的字符串。

默認值:沒有,涵蓋r \,\ r \ n\ n

wholeText

類型:布爾

是否要讀取一個文件作為一個單獨的記錄。

默認值:

獸人選項

選項

mergeSchema

類型:布爾

是否來推斷模式跨多個文件和每個文件的合並模式。

默認值:

流選項

當使用這些選項適用read_file在一個流表查詢或流。

選項

allowOverwrites

類型:布爾

是否處理文檔文件被修改後的發現。最新版本的文件將被處理在刷新如果它已被修改自最後一次成功刷新查詢開始時間。

默認值:

includeExistingFiles

類型:布爾

是否在流處理的輸入包括現有的文件路徑或隻處理新文件初始設置後到達。評估這個選項隻有當你開始為第一次流。改變這個選項後重啟流沒有影響。

默認值:真正的

maxBytesPerTrigger

類型:字節字符串

新處理字節的最大數量在每一個觸發器。您可以指定一個字節字符串等10克限製每個microbatch 10 GB的數據。這是一個軟最大。如果你有文件3 GB,磚過程microbatch 12 GB。一起使用時maxFilesPerTrigger,磚消耗的下限maxFilesPerTriggermaxBytesPerTrigger,首先達到哪個。

默認值:無

maxFilesPerTrigger

類型:整數

處理新文件的最大數量在每一個觸發器。一起使用時maxBytesPerTrigger,磚消耗的下限maxFilesPerTriggermaxBytesPerTrigger,首先達到哪個。

默認值:1000

schemaEvolutionMode

類型:字符串

發展模式的模式中發現新列數據。默認情況下,列是推斷作為字符串當推斷JSON數據集。看到模式演化為更多的細節。這個選項不適用文本binaryFile文件。

默認值:“addNewColumns”當一個模式沒有提供。“沒有”否則。

schemaLocation

類型:字符串

存儲位置推斷模式和後續更改。看到模式推理為更多的細節。模式位置使用時不需要在流表查詢。

默認值:無

例子

在給定的路徑,讀取文件可用。檢測數據的格式和模式。>選擇*read_file(“abfss: / / container@storageAccount.dfs.core.windows.net/base/path');——在給定的路徑讀取headerless CSV文件提供的模式。>選擇*read_file(“s3: / /桶/路徑”,格式= >“csv”,模式= >“int id、ts時間戳、事件字符串”);——推斷CSV文件頭的模式。因為不提供的模式,認為頭——CSV文件。>選擇*read_file(“s3: / /桶/路徑”,格式= >“csv”)——讀起來有一個csv文件後綴。>選擇*read_file(s3: / /桶/道路/ * . csv”)——讀一個JSON文件>選擇*read_file(“abfss: / / container@storageAccount.dfs.core.windows.net/path/single.json')——讀取JSON文件和覆蓋的數據類型列id的整數。>選擇*read_file(“s3: / /桶/路徑”,格式= >json的,schemaHints= >“int id”)——昨天讀取文件上傳或修改。>選擇*read_file(“gs: / /桶/ avroData”,modifiedAfter= >date_sub(當前日期(),1),modifiedBefore= >當前日期())——創建一個增量表和存儲源文件路徑的一部分數據>創建my_avro_data作為選擇*,_metadatafile_pathread_file(“gs: / /桶/ avroData”)——創建一個流表,流程文件,僅出現在表的創建。——表將最有可能是空的(如果沒有時鍾脈衝相位差)在第一次創建後,——未來的刷新會帶來新的數據。>創建刷新流媒體avro_data作為選擇*read_file(“gs: / /桶/ avroData”,includeExistingFiles= >);