開始
加載和管理數據
處理數據
政府
引用和資源
更新2023年8月9日
給我們反饋
read_file
適用於:磚的SQL磚運行時13.1及以後
讀取文件在一個位置並返回數據以表格形式提供。
支持閱讀JSON,CSV,文本,BINARYFILE,拚花,AVRO,獸人文件格式。可以自動檢測文件格式和推斷出一個統一的模式在所有文件。
JSON
CSV
文本
BINARYFILE
拚花
AVRO
獸人
read_file(路徑(,option_key= >option_value](…])
路徑:一個字符串的URI的位置數據。支持閱讀從Azure數據存儲Gen2湖(“abfss: / /”),S3 (s3: / /)和穀歌雲存儲(“gs: / /”)。可以包含著。看到文件發現為更多的細節。
路徑
字符串
“abfss: / /”
s3: / /
“gs: / /”
option_key:的名稱選項配置。你需要使用引號(“)選項包含點(。)。
option_key
。
option_value:一個常數表達式設置選項。接受文字和標量函數。
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選擇。當嚴格的水珠被禁用,斜杠(/),一個明星模式等/ * /可以擴展到發現多個目錄。看下麵的例子的不同行為。
useStrictGlobber
/
/ * /
文件路徑
嚴格的水珠禁用
嚴格的水珠啟用
/ / b
/ a / b / c / file.txt
是的
/ / b_dir / c / file.txt
沒有
/ / b.txt
/ a / b /
/ / * / c /
/ a / b / c / d / file.txt
/ / * / d /
/ a / b / x / y / c / file.txt
/ / * / c
/ a / b / c_file.txt
/ / b / cookie / file.txt
/ / b *
/ a / b / file.txt
/ / {0. txt, 1. txt}
/ / 0.三種
/ / * / {0. txt, 1. txt}
/ a / b / [cde-h] /我/
/ a / b / c / i / file.txt
可以顯式地提供文件的模式read_file與模式選擇。不提供模式時,read_file試圖推斷出一個統一的模式發現的文件,除非需要閱讀所有的文件限製聲明中使用。即使使用限製查詢,一個更大的比所需的文件集可能讀取返回一個更具代表性的數據模式。磚自動添加一個限製聲明為選擇查詢在筆記本和SQL編輯器如果用戶沒有提供。
限製
選擇
的schemaHints選項可以用來修複推斷模式的子集。看到覆蓋模式推理與提示為更多的細節。
schemaHints
一個rescuedDataColumn默認情況下提供救援模式不匹配的任何數據。看到獲救的數據列是什麼?為更多的細節。你可以放下rescuedDataColumn通過設置選項schemaEvolutionMode= >“沒有”。
rescuedDataColumn
schemaEvolutionMode= >“沒有”
read_file也可以推斷出分區列如果文件被存儲Hive-style分區目錄,/ column_name = column_value /。如果一個模式,發現分區列利用類型提供的嗎模式。如果分區列不提供的一部分模式,然後推斷出分區列將被忽略。
/ column_name = column_value /
如果一列存在的分區模式和數據列,的值讀取數據的分區使用價值而不是價值。如果你想忽略來自目錄和使用數據的值列,您可以提供的列表分區列以逗號分隔的列表partitionColumns選擇。
partitionColumns
的partitionColumns選項還可以用來指導read_file在最後發現列包括推斷模式。提供一個空字符串忽略所有分區列。
的schemaHints選項也可以覆蓋推斷模式提供一個分區列。
的文本和BINARYFILE格式有固定的模式,但是read_file也為這些格式試圖推斷出分區。
請注意
流隻能用於三角洲生活表。
read_file可用於流表來攝取文件到三角洲湖。read_file利用自動加載器使用時在一個流表中查詢。你必須使用流關鍵字與read_file。看到自動加載器是什麼?為更多的細節。
流
當流查詢中使用,read_file將使用一個示例來推斷數據的模式,並且可以動態演變模式,因為它處理更多的數據。看到配置模式推理和進化自動加載程序為更多的細節。
基本選項
通用選項
JSON選項
CSV選項
拚花選項
AVRO選項
BINARYFILE選項
文本選項
獸人選項
流選項
選項
格式
類型:字符串
的數據文件格式在源路徑中。Auto-inferred如果沒有提供。允許的值包括:
avro:Avro文件
avro
binaryFile:二進製文件
binaryFile
csv:CSV文件
csv
json:JSON文件
json
獸人:獸人文件
拚花:閱讀使用磚鋪文件
文本:文本文件
默認值:無
inferColumnTypes
類型:布爾
布爾
是否當利用模式推理推斷出準確的列類型。默認情況下,列是推斷當推斷JSON和CSV數據集。看到模式推理為更多的細節。注意,這是默認的自動加載程序的反麵。
默認值:真正的
真正的
蜂巢的逗號分隔列表樣式分區列你想從文件的目錄結構推斷。蜂巢式分區列是鍵值對組合等一個平等的跡象<基本路徑> / = x / b = 1 / c = y / file.format。在這個例子中,分區列一個,b,c。默認情況下,這些列將自動添加到您的模式如果使用模式推理並提供<基本路徑>加載數據。如果你提供了一個模式,自動加載程序預計這些列將包含在模式。如果你不想要這些列作為模式的一部分,您可以指定”“忽略這些列。此外,您可以使用這個選項,當你想要列推斷複雜的目錄結構的文件路徑,像下麵的例子:
<基本路徑> / = x / b = 1 / c = y / file.format
一個
b
c
”“
<基本路徑> /年= 2022 /周= 1 / file1.csv<基本路徑> /年= 2022 /月= 2 /天= 3 / file2.csv<基本路徑> /年= 2022 /月= 2 /天= 4 / file3.csv
<基本路徑> /年= 2022 /周= 1 / file1.csv
<基本路徑> /年= 2022 /月= 2 /天= 3 / file2.csv
<基本路徑> /年= 2022 /月= 2 /天= 4 / file3.csv
指定cloudFiles.partitionColumns作為年、月、日將返回年= 2022為file1.csv,但月和一天列會零。月和一天將解析正確嗎file2.csv和file3.csv。
cloudFiles.partitionColumns
年、月、日
年= 2022
file1.csv
月
一天
零
file2.csv
file3.csv
模式信息期間,您提供自動加載程序模式推理。看到模式提示為更多的細節。
是否使用默認的globbing行為相匹配的嚴格的水珠Apache引發的其他文件來源。看到常見的數據加載模式為更多的細節。在磚運行時12.0及以上。注意,這是相反的默認為自動加載程序。
以下選項適用於所有文件格式。
ignoreCorruptFiles
是否忽略腐敗文件。如果這是真的,火花的工作將繼續運行,當遇到損壞文件和已讀過的內容仍將返回。可見,numSkippedCorruptFiles在operationMetrics列的三角洲湖曆史。在磚運行時11.0及以上。
numSkippedCorruptFiles
operationMetrics
默認值:假
假
ignoreMissingFiles
是否忽略丟失的文件。如果這是真的,火花的工作將繼續運行,當遇到丟失的文件和內容閱讀仍將返回。在磚運行時11.0及以上。
默認值:假(真正的為複製成)
複製成
modifiedAfter
類型:時間戳字符串例如,2021-01-0100:00:00.000000UTC + 0
時間戳字符串
2021-01-0100:00:00.000000UTC + 0
一個可選的時間戳來攝取文件修改時間戳後提供時間戳。
modifiedBefore
一個可選的時間戳來攝取文件修改時間戳之前提供的時間戳。
pathGlobFilter或fileNamePattern
一個潛在的水珠模式提供選擇文件。相當於模式在複製成。fileNamePattern可以用在read_file。
fileNamePattern
recursiveFileLookup
是否加載數據基地內遞歸目錄和跳過分區推斷。
allowBackslashEscapingAnyCharacter
是否允許反斜杠轉義字符的任何成功。如果未啟用,隻有那些顯式列出字符由JSON規範可以逃脫。
allowComments
是否允許使用Java, C和c++風格的評論(' / ',‘*’,' / / '品種)在解析內容。
' / '
‘*’
' / / '
allowNonNumericNumbers
是否允許的集合不是一個數字(南)令牌作為法定數量浮動值。
南
allowNumericLeadingZeros
是否允許積分數字開始額外(循環)0(例如,000001)。
allowSingleQuotes
是否允許使用單引號(撇號,性格“\”)引用字符串(字符串名稱和值)。
“\”
allowUnquotedControlChars
是否允許JSON字符串包含保有的控製字符(ASCII字符值小於32,包括選項卡並換行字符)。
allowUnquotedFieldNames
是否允許使用非掛牌字段名稱(允許JavaScript,但不是通過JSON規範)。
badRecordsPath
存儲文件的路徑記錄壞JSON的信息記錄。
columnNameOfCorruptRecord
列存儲記錄,是畸形的,不能被解析。如果模式解析設置DROPMALFORMED,本專欄將是空的。
DROPMALFORMED
默認值:_corrupt_record
_corrupt_record
dateFormat
解析日期的格式字符串。
默認值:yyyy-MM-dd
yyyy-MM-dd
dropFieldIfAllNull
是否要忽略所有空值的列或空數組和結構體在模式推理。
編碼或字符集
JSON編碼的文件的名稱。看到charset選項列表。你不能使用utf - 16和utf - 32當多行是真正的。
charset
utf - 16
utf - 32
多行
默認值:utf - 8
utf - 8
inferTimestamp
是否嚐試推斷作為時間戳字符串TimestampType。當設置為真正的、模式推理明顯可能需要更長時間。您必須啟用cloudFiles.inferColumnTypes使用自動加載程序。
TimestampType
cloudFiles.inferColumnTypes
lineSep
兩個連續的JSON記錄之間的字符串。
默認值:沒有,涵蓋r \,\ r \ n,\ n
r \
\ r \ n
\ n
語言環境
一個java.util.Locale標識符。影響默認日期、時間戳和十進製解析JSON。
java.util.Locale
默認值:我們
我們
解析器模式在處理畸形的記錄。之一“寬容”,“DROPMALFORMED”,或“FAILFAST”。
“寬容”
“DROPMALFORMED”
“FAILFAST”
默認值:寬容的
寬容的
JSON記錄是否跨越多個行。
prefersDecimal
試圖推斷出字符串DecimalType而不是浮點數和雙精度類型。您還必須使用模式推理,通過啟用inferSchema或使用cloudFiles.inferColumnTypes自動加載程序。
DecimalType
inferSchema
primitivesAsString
是否要推斷數字和布爾值等基本類型StringType。
StringType
是否收集所有的數據不能被解析由於模式數據類型不匹配或不匹配(包括列套管)到一個單獨的列中。這一列包含在默認情況下使用時自動加載程序。有關更多細節,請參考獲救的數據列是什麼?。
timestampFormat
解析時間戳的格式字符串。
默認值:yyyy-MM-dd 'HH: mm: ss [.SSS] [XXX]
yyyy-MM-dd 'HH: mm: ss [.SSS] [XXX]
時區
的java.time.ZoneId解析時使用時間戳和日期。
java.time.ZoneId
存儲文件的路徑記錄壞CSV信息記錄。
charToEscapeQuoteEscaping
類型:字符
字符
使用的用來逃避字符轉義引號。例如,對於以下記錄:(”\ \ ",b]:
(”\ \ ",b]
如果字符逃離“\”未定義時,記錄不會被解析。解析器會讀取字符:[一],[\],["],[,],[]、[b]拋出一個錯誤,因為它找不到關閉報價。
[一],[\],["],[,],[]、[b]
如果字符逃離“\”被定義為“\”記錄將被讀取2的值:[一個\]和[b]。
[一個\]
[b]
默認值:' \ 0
' \ 0
一列來存儲記錄畸形,不能被解析。如果模式解析設置DROPMALFORMED,本專欄將是空的。
評論
定義了字符代表一行評論時發現一行文本的開始。使用' \ 0禁用不發表評論。
默認值:“\ u0000”
“\ u0000”
emptyValue
空值的字符串表示。
默認值:”“
CSV文件的編碼的名稱。看到charset選項列表中。utf - 16和utf - 32時不能使用多行是真正的。
enforceSchema
是否強行指定或推斷模式應用到CSV文件。如果啟用了選擇,CSV文件的標題將被忽略。這個選項默認是忽略了在使用自動加載程序來拯救數據並允許模式演化。
逃避
解析數據時使用的轉義字符。
默認值:“\”
頭
CSV文件是否包含一個頭。自動加載程序假設推斷模式時文件頭。
ignoreLeadingWhiteSpace
是否忽略主要空白每個解析值。
ignoreTrailingWhiteSpace
是否忽略尾隨的空格為每個解析值。
是否來推斷的數據類型解析CSV或假設所有列的記錄StringType。需要一個額外的如果設置在數據傳遞給真正的。自動加載程序,使用cloudFiles.inferColumnTypes代替。
兩個連續的CSV記錄之間的字符串。
一個java.util.Locale標識符。影響默認日期、時間戳和小數解析CSV。
maxCharsPerColumn
類型:Int
Int
最大數量的角色期望從一個值來解析。可以用來避免內存錯誤。默認為1,這意味著無限的。
1
默認值:1
maxColumns
有多少列的硬限製記錄。
默認值:20480年
20480年
mergeSchema
是否來推斷模式跨多個文件和每個文件的合並模式。默認啟用推斷模式時自動加載程序。
解析器模式在處理畸形的記錄。之一“寬容”,“DROPMALFORMED”,“FAILFAST”。
CSV檔案是否跨越多個行。
nanValue
當解析non-a-number值的字符串表示FloatType和倍增式列。
FloatType
倍增式
默認值:“南”
“南”
negativeInf
當解析的字符串表示負無窮FloatType或倍增式列。
默認值:“負”
“負”
nullValue
parserCaseSensitive(棄用)
在閱讀文件,是否對齊列的標題模式中聲明的情況下敏感。這是真正的默認為自動加載程序。列情況下將獲救的差異rescuedDataColumn如果啟用。這個選項已經被棄用的readerCaseSensitive。
readerCaseSensitive
positiveInf
當解析的字符串表示正無窮FloatType或倍增式列。
默認值:“正”
“正”
preferDate
試圖推斷出字符串作為日期的時間戳。您還必須使用模式推理,通過啟用inferSchema或使用cloudFiles.inferColumnTypes自動加載程序。
報價
使用的字符轉義值字段分隔符的值。
默認值:”
”
當指定大小寫敏感性行為rescuedDataColumn啟用。如果這是真的,拯救數據列的名字的情況下不同模式;否則,以不區分大小寫的方式讀取數據。
是否收集所有數據不能被解析由於:一個數據類型不匹配,不匹配和模式(包括列套管)到一個單獨的列中。這一列包含在默認情況下使用時自動加載程序。更多細節請參考獲救的數據列是什麼?。
9月或分隔符
列之間的分隔符字符串。
默認值:”、“
”、“
skipRows
的行數從一開始就應該被忽略的CSV文件(包括注釋和空行)。如果頭是真的,標題將第一unskipped和注釋行。
默認值:0
0
unescapedQuoteHandling
策略來處理非轉義引號。允許選擇:
STOP_AT_CLOSING_QUOTE:如果保有的報價在輸入,積累援引性格和價值進行解析的引用值,直到找到關閉報價。
STOP_AT_CLOSING_QUOTE
BACK_TO_DELIMITER:如果保有的報價在輸入,考慮到價值作為非上市價值。這將使當前的解析值的解析器積累所有字符直到定義的分隔符9月是發現。如果沒有找到分隔符的值,解析器將繼續積累從輸入直到分隔符或行結束字符。
BACK_TO_DELIMITER
9月
STOP_AT_DELIMITER:如果保有的報價在輸入,考慮到價值作為非上市價值。這將使解析器積累所有字符直到定義的分隔符9月或發現一行結束輸入。
STOP_AT_DELIMITER
SKIP_VALUE:輸入,如果找到保有的報價的內容解析給定的值將被忽略(直到找到下一個分隔符)和價值nullValue將會產生。
SKIP_VALUE
RAISE_ERROR:輸入,如果找到保有的報價TextParsingException將拋出。
RAISE_ERROR
TextParsingException
默認值:STOP_AT_DELIMITER
datetimeRebaseMode
控製變基之間的日期和時間戳值朱利安和預期的公曆日曆。允許的值:異常,遺產,糾正。
異常
遺產
糾正
默認值:遺產
int96RebaseMode
控製的變基INT96時間戳值之間朱利安和預期的公曆日曆。允許的值:異常,遺產,糾正。
是否來推斷模式跨多個文件和每個文件的合並模式。
avroSchema
Avro格式的用戶提供的可選模式。閱讀Avro時,這個選項可以設置為一種進化模式,這是兼容與實際Avro但是不同的模式。反序列化的模式將與進化模式一致。例如,如果您設置一個進化模式包含一個額外的列的默認值,讀取結果將包含新列。
是否來推斷模式跨多個文件和每個文件的合並模式。mergeSchemaAvro不放鬆的數據類型。
二進製文件沒有任何額外的配置選項。
編碼
文本文件的編碼的名稱。看到charset選項列表。
兩個連續的文本記錄之間的字符串。
默認值:沒有,涵蓋r \,\ r \ n和\ n
wholeText
是否要讀取一個文件作為一個單獨的記錄。
當使用這些選項適用read_file在一個流表查詢或流。
allowOverwrites
是否處理文檔文件被修改後的發現。最新版本的文件將被處理在刷新如果它已被修改自最後一次成功刷新查詢開始時間。
includeExistingFiles
是否在流處理的輸入包括現有的文件路徑或隻處理新文件初始設置後到達。評估這個選項隻有當你開始為第一次流。改變這個選項後重啟流沒有影響。
maxBytesPerTrigger
類型:字節字符串
字節字符串
新處理字節的最大數量在每一個觸發器。您可以指定一個字節字符串等10克限製每個microbatch 10 GB的數據。這是一個軟最大。如果你有文件3 GB,磚過程microbatch 12 GB。一起使用時maxFilesPerTrigger,磚消耗的下限maxFilesPerTrigger或maxBytesPerTrigger,首先達到哪個。
10克
maxFilesPerTrigger
類型:整數
整數
處理新文件的最大數量在每一個觸發器。一起使用時maxBytesPerTrigger,磚消耗的下限maxFilesPerTrigger或maxBytesPerTrigger,首先達到哪個。
默認值:1000
schemaEvolutionMode
發展模式的模式中發現新列數據。默認情況下,列是推斷作為字符串當推斷JSON數據集。看到模式演化為更多的細節。這個選項不適用文本和binaryFile文件。
默認值:“addNewColumns”當一個模式沒有提供。“沒有”否則。
“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作為選擇*,_metadata。file_path從read_file(“gs: / /桶/ avroData”)——創建一個流表,流程文件,僅出現在表的創建。——表將最有可能是空的(如果沒有時鍾脈衝相位差)在第一次創建後,——未來的刷新會帶來新的數據。>創建或刷新流媒體表avro_data作為選擇*從流read_file(“gs: / /桶/ avroData”,includeExistingFiles= >假);
創建流表
read_kafka表值函數