read_file
表值函數
適用於:磚的SQL磚運行時13.1及以後
讀取文件在一個位置並返回數據以表格形式提供。
支持閱讀JSON
,CSV
,文本
,BINARYFILE
,拚花
,AVRO
,獸人
文件格式。可以自動檢測文件格式和推斷出一個統一的模式在所有文件。
文件發現
read_file
能讀懂一個人提供一個目錄下的文件或閱讀文件。read_file
遞歸地發現所提供的目錄下的所有文件,除非一個一團提供的指示嗎read_file
遞歸到一個特定的目錄模式。
過濾使用一滴目錄或文件模式
水珠模式可用於過濾目錄和文件時提供的路徑。
模式 |
描述 |
---|---|
|
匹配任何單個的字符 |
|
匹配零個或多個字符 |
|
匹配一個字符的字符集{a, b, c}。 |
|
匹配一個字符的字符範圍{…z}。 |
|
匹配一個字符不是字符集或距離{}。請注意, |
|
匹配字符串的字符串集{ab、cd}。 |
|
匹配字符串的字符串集{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 類型: 蜂巢的逗號分隔列表樣式分區列你想從文件的目錄結構推斷。蜂巢式分區列是鍵值對組合等一個平等的跡象
指定 默認值:無 |
schemaHints 類型: 模式信息期間,您提供自動加載程序模式推理。看到模式提示為更多的細節。 默認值:無 |
useStrictGlobber 類型: 是否使用默認的globbing行為相匹配的嚴格的水珠Apache引發的其他文件來源。看到常見的數據加載模式為更多的細節。在磚運行時12.0及以上。注意,這是相反的默認為自動加載程序。 默認值: |
通用選項
以下選項適用於所有文件格式。
選項 |
---|
ignoreCorruptFiles 類型: 是否忽略腐敗文件。如果這是真的,火花的工作將繼續運行,當遇到損壞文件和已讀過的內容仍將返回。可見, 默認值: |
ignoreMissingFiles 類型: 是否忽略丟失的文件。如果這是真的,火花的工作將繼續運行,當遇到丟失的文件和內容閱讀仍將返回。在磚運行時11.0及以上。 默認值: |
modifiedAfter 類型: 一個可選的時間戳來攝取文件修改時間戳後提供時間戳。 默認值:無 |
modifiedBefore 類型: 一個可選的時間戳來攝取文件修改時間戳之前提供的時間戳。 默認值:無 |
pathGlobFilter或fileNamePattern 類型: 一個潛在的水珠模式提供選擇文件。相當於 默認值:無 |
recursiveFileLookup 類型: 是否加載數據基地內遞歸目錄和跳過分區推斷。 默認值: |
JSON
選項
選項 |
---|
allowBackslashEscapingAnyCharacter 類型: 是否允許反斜杠轉義字符的任何成功。如果未啟用,隻有那些顯式列出字符由JSON規範可以逃脫。 默認值: |
allowComments 類型: 是否允許使用Java, C和c++風格的評論( 默認值: |
allowNonNumericNumbers 類型: 是否允許的集合不是一個數字( 默認值: |
allowNumericLeadingZeros 類型: 是否允許積分數字開始額外(循環)0(例如,000001)。 默認值: |
allowSingleQuotes 類型: 是否允許使用單引號(撇號,性格 默認值: |
allowUnquotedControlChars 類型: 是否允許JSON字符串包含保有的控製字符(ASCII字符值小於32,包括選項卡並換行字符)。 默認值: |
allowUnquotedFieldNames 類型: 是否允許使用非掛牌字段名稱(允許JavaScript,但不是通過JSON規範)。 默認值: |
badRecordsPath 類型: 存儲文件的路徑記錄壞JSON的信息記錄。 默認值:無 |
columnNameOfCorruptRecord 類型: 列存儲記錄,是畸形的,不能被解析。如果 默認值: |
dateFormat 類型: 解析日期的格式字符串。 默認值: |
dropFieldIfAllNull 類型: 是否要忽略所有空值的列或空數組和結構體在模式推理。 默認值: |
編碼或字符集 類型: JSON編碼的文件的名稱。看到 默認值: |
inferTimestamp 類型: 是否嚐試推斷作為時間戳字符串 默認值: |
lineSep 類型: 兩個連續的JSON記錄之間的字符串。 默認值:沒有,涵蓋 |
語言環境 類型: 一個 默認值: |
模式 類型: 解析器模式在處理畸形的記錄。之一 默認值: |
多行 類型: JSON記錄是否跨越多個行。 默認值: |
prefersDecimal 類型: 試圖推斷出字符串 默認值: |
primitivesAsString 類型: 是否要推斷數字和布爾值等基本類型 默認值: |
rescuedDataColumn 類型: 是否收集所有的數據不能被解析由於模式數據類型不匹配或不匹配(包括列套管)到一個單獨的列中。這一列包含在默認情況下使用時自動加載程序。有關更多細節,請參考獲救的數據列是什麼?。 默認值:無 |
timestampFormat 類型: 解析時間戳的格式字符串。 默認值: |
時區 類型: 的 默認值:無 |
CSV
選項
選項 |
---|
badRecordsPath 類型: 存儲文件的路徑記錄壞CSV信息記錄。 默認值:無 |
charToEscapeQuoteEscaping 類型: 使用的用來逃避字符轉義引號。例如,對於以下記錄:
默認值: |
columnNameOfCorruptRecord 類型: 一列來存儲記錄畸形,不能被解析。如果 默認值: |
評論 類型: 定義了字符代表一行評論時發現一行文本的開始。使用 默認值: |
dateFormat 類型: 解析日期的格式字符串。 默認值: |
emptyValue 類型: 空值的字符串表示。 默認值: |
編碼或字符集 類型: CSV文件的編碼的名稱。看到 默認值: |
enforceSchema 類型: 是否強行指定或推斷模式應用到CSV文件。如果啟用了選擇,CSV文件的標題將被忽略。這個選項默認是忽略了在使用自動加載程序來拯救數據並允許模式演化。 默認值: |
逃避 類型: 解析數據時使用的轉義字符。 默認值: |
頭 類型: CSV文件是否包含一個頭。自動加載程序假設推斷模式時文件頭。 默認值: |
ignoreLeadingWhiteSpace 類型: 是否忽略主要空白每個解析值。 默認值: |
ignoreTrailingWhiteSpace 類型: 是否忽略尾隨的空格為每個解析值。 默認值: |
inferSchema 類型: 是否來推斷的數據類型解析CSV或假設所有列的記錄 默認值: |
lineSep 類型: 兩個連續的CSV記錄之間的字符串。 默認值:沒有,涵蓋 |
語言環境 類型: 一個 默認值: |
maxCharsPerColumn 類型: 最大數量的角色期望從一個值來解析。可以用來避免內存錯誤。默認為 默認值: |
maxColumns 類型: 有多少列的硬限製記錄。 默認值: |
mergeSchema 類型: 是否來推斷模式跨多個文件和每個文件的合並模式。默認啟用推斷模式時自動加載程序。 默認值: |
模式 類型: 解析器模式在處理畸形的記錄。之一 默認值: |
多行 類型: CSV檔案是否跨越多個行。 默認值: |
nanValue 類型: 當解析non-a-number值的字符串表示 默認值: |
negativeInf 類型: 當解析的字符串表示負無窮 默認值: |
nullValue 類型: 空值的字符串表示。 默認值: |
parserCaseSensitive(棄用) 類型: 在閱讀文件,是否對齊列的標題模式中聲明的情況下敏感。這是 默認值: |
positiveInf 類型: 當解析的字符串表示正無窮 默認值: |
preferDate 類型: 試圖推斷出字符串作為日期的時間戳。您還必須使用模式推理,通過啟用 默認值: |
報價 類型: 使用的字符轉義值字段分隔符的值。 默認值: |
readerCaseSensitive 類型: 當指定大小寫敏感性行為 默認值: |
rescuedDataColumn 類型: 是否收集所有數據不能被解析由於:一個數據類型不匹配,不匹配和模式(包括列套管)到一個單獨的列中。這一列包含在默認情況下使用時自動加載程序。更多細節請參考獲救的數據列是什麼?。 默認值:無 |
9月或分隔符 類型: 列之間的分隔符字符串。 默認值: |
skipRows 類型: 的行數從一開始就應該被忽略的CSV文件(包括注釋和空行)。如果 默認值: |
timestampFormat 類型: 解析時間戳的格式字符串。 默認值: |
時區 類型: 的 默認值:無 |
unescapedQuoteHandling 類型: 策略來處理非轉義引號。允許選擇:
默認值: |
拚花
選項
選項 |
---|
datetimeRebaseMode 類型: 控製變基之間的日期和時間戳值朱利安和預期的公曆日曆。允許的值: 默認值: |
int96RebaseMode 類型: 控製的變基INT96時間戳值之間朱利安和預期的公曆日曆。允許的值: 默認值: |
mergeSchema 類型: 是否來推斷模式跨多個文件和每個文件的合並模式。 默認值: |
readerCaseSensitive 類型: 當指定大小寫敏感性行為 默認值: |
rescuedDataColumn 類型: 是否收集所有數據不能被解析由於:一個數據類型不匹配,不匹配和模式(包括列套管)到一個單獨的列中。這一列包含在默認情況下使用時自動加載程序。更多細節請參考獲救的數據列是什麼?。 默認值:無 |
AVRO
選項
選項 |
---|
avroSchema 類型: Avro格式的用戶提供的可選模式。閱讀Avro時,這個選項可以設置為一種進化模式,這是兼容與實際Avro但是不同的模式。反序列化的模式將與進化模式一致。例如,如果您設置一個進化模式包含一個額外的列的默認值,讀取結果將包含新列。 默認值:無 |
datetimeRebaseMode 類型: 控製變基之間的日期和時間戳值朱利安和預期的公曆日曆。允許的值: 默認值: |
mergeSchema 類型: 是否來推斷模式跨多個文件和每個文件的合並模式。 默認值: |
readerCaseSensitive 類型: 當指定大小寫敏感性行為 默認值: |
rescuedDataColumn 類型: 是否收集所有數據不能被解析由於:一個數據類型不匹配,不匹配和模式(包括列套管)到一個單獨的列中。這一列包含在默認情況下使用時自動加載程序。更多細節請參考獲救的數據列是什麼?。 默認值:無 |
BINARYFILE
選項
二進製文件沒有任何額外的配置選項。
文本
選項
選項 |
---|
編碼 類型: 文本文件的編碼的名稱。看到 默認值: |
lineSep 類型: 兩個連續的文本記錄之間的字符串。 默認值:沒有,涵蓋 |
wholeText 類型: 是否要讀取一個文件作為一個單獨的記錄。 默認值: |
獸人
選項
選項 |
---|
mergeSchema 類型: 是否來推斷模式跨多個文件和每個文件的合並模式。 默認值: |
流選項
當使用這些選項適用read_file
在一個流表查詢或流。
選項 |
---|
allowOverwrites 類型: 是否處理文檔文件被修改後的發現。最新版本的文件將被處理在刷新如果它已被修改自最後一次成功刷新查詢開始時間。 默認值: |
includeExistingFiles 類型: 是否在流處理的輸入包括現有的文件路徑或隻處理新文件初始設置後到達。評估這個選項隻有當你開始為第一次流。改變這個選項後重啟流沒有影響。 默認值: |
maxBytesPerTrigger 類型: 新處理字節的最大數量在每一個觸發器。您可以指定一個字節字符串等 默認值:無 |
maxFilesPerTrigger 類型: 處理新文件的最大數量在每一個觸發器。一起使用時 默認值:1000 |
schemaEvolutionMode 類型: 發展模式的模式中發現新列數據。默認情況下,列是推斷作為字符串當推斷JSON數據集。看到模式演化為更多的細節。這個選項不適用 默認值: |
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作為選擇*,_metadata。file_path從read_file(“gs: / /桶/ avroData”)——創建一個流表,流程文件,僅出現在表的創建。——表將最有可能是空的(如果沒有時鍾脈衝相位差)在第一次創建後,——未來的刷新會帶來新的數據。>創建或刷新流媒體表avro_data作為選擇*從流read_file(“gs: / /桶/ avroData”,includeExistingFiles= >假);