from_csv
函式
適用於: Databricks SQL Databricks Runtime
傳回具有 csvStr
和 schema
的結構值。
語法
from_csv(csvStr, schema [, options])
引數
csvStr
:指定 CSV 數據列的 STRING 運算式。schema
:schema_of_csv函式的 STRING 常值或調用。options
:選擇性的 MAP<STRING,STRING> 常值指定指示詞。
傳回
STRUCT,具有符合架構定義的功能變數名稱和型別。
csvStr
應該在和options
方面schema
形成良好的格式。
schema
必須定義為逗號分隔的資料列名稱和資料類型組,例如 CREATE TABLE
。
options
如果提供,可以是下列任一項:
sep
(預設值,
):為每個欄位和值設定分隔符。 此分隔符可以是一或多個字元。encoding
(預設 UTF-8):依指定的編碼類型譯碼 CSV 檔案。quote
(預設值"
):設定單一字元,用來逸出引號值,其中分隔符可以是值的一部分。 如果您想要關閉引號,您必須設定非 Null,但設定空字串。 此行為與com.databricks.spark.csv
不同。escape
(預設值\
):設定單一字元,用於逸出已經加上引號的值內的引號。charToEscapeQuoteEscaping
(預設值escape
或\0
):設定單一字元,用於逸出引號字元的逸出。 當 和quote
字元不同時escape
,預設值為逸出字元,\0
否則為逸出字元。comment
(預設空白字串):設定單一字元,用來略過以這個字元開頭的行。 根據預設,它會停用。- 標頭 (預設值
false
):使用第一行做為數據行的名稱。 enforceSchema
(預設值true
):如果設定為 true,則會強制將指定的或推斷的架構套用至數據源檔案,而且會忽略 CSV 檔案中的標頭。 如果選項設定為 false,則當標頭選項設定為 true 時,會針對 CSV 檔案中的所有標頭驗證架構。 架構和 CSV 標頭中數據行名稱的功能變數名稱會依考慮spark.sql.caseSensitive
的位置來檢查。 雖然預設值為 true,但建議停用 enforceSchema 選項,以避免不正確的結果。inferSchema
(預設值false
):從數據自動推斷輸入架構。 它需要一個額外的傳遞數據。samplingRatio
(預設值 1.0):定義用於架構推斷的數據列分數。ignoreLeadingWhiteSpace
(預設值false
):旗標,指出是否應該略過讀取值中的前置空格符。ignoreTrailingWhiteSpace
(預設值false
):旗標,指出是否應該略過正在讀取之值的尾端空格符。nullValue
(預設空白字串):設定 Null 值的字串表示。emptyValue
(預設空白字串):設定空值的字串表示。nanValue
(預設值NaN
):設定非數位值的字串表示。positiveInf
(預設值Inf
):設定正無限值的字串表示。negativeInf
(預設值-Inf)
:設定負無限大值的字串表示。dateFormat
(預設值yyyy-MM-dd
):設定表示日期格式的字串。 自訂日期格式會遵循 Datetime 模式的格式。 這適用於日期類型。timestampFormat
(預設值yyyy-MM-dd'T'HH:mm:ss[.SSS][XXX]
):設定表示時間戳格式的字串。 自訂日期格式會遵循 Datetime 模式的格式。 這適用於時間戳類型。maxColumns
(預設值20480
):定義記錄可以擁有多少數據行的硬性限制。maxCharsPerColumn
(預設值 -1):定義讀取任何指定值所允許的最大字元數。 根據預設,它是 -1,表示無限長度unescapedQuoteHandling
(預設值STOP_AT_DELIMITER
):定義 CSV 剖析器如何處理未逸出的引號值。STOP_AT_CLOSING_QUOTE
:如果在輸入中找到未逸出的引號,請累積引號字元,並繼續將值剖析為引號值,直到找到結尾引號為止。BACK_TO_DELIMITER
:如果在輸入中找到未逸出的引號,請將值視為未加上引號的值。 這會使剖析器累積目前剖析值的所有字元,直到找到分隔符為止。 如果在值中找不到分隔符,剖析器會繼續從輸入累積字元,直到找到分隔符或行尾為止。STOP_AT_DELIMITER
:如果在輸入中找到未逸出的引號,請將值視為未加上引號的值。 這會使剖析器累積所有字元,直到輸入中找到分隔符或行尾為止。STOP_AT_DELIMITER
:如果在輸入中找到未逸出的引號,則會略過指定值的內容剖析,並改為產生 中的nullValue
值。RAISE_ERROR
:如果在輸入中找到未逸出的引號,TextParsingException
則會擲回 。
mode
(預設值PERMISSIVE
):允許在剖析期間處理損毀記錄的模式。 它支援下列不區分大小寫的模式。 Spark 嘗試在數據行剪除下只剖析 CSV 中所需的數據行。 因此,損毀的記錄可能會根據必要的欄位集而有所不同。 此行為可由spark.sql.csv.parser.columnPruning.enabled
控制(預設為啟用)。PERMISSIVE
:當它符合損毀的記錄時,會將格式錯誤的字串放入 所設定columnNameOfCorruptRecord
的欄位中,並將格式不正確的欄位設定為 null。 若要保留損毀的記錄,用戶可以在使用者定義的架構中設定名為 columnNameOfCorruptRecord 的字串類型字段。 如果架構沒有 欄位,則會在剖析期間卸除損毀的記錄。 具有比架構少或更多令牌的記錄不是 CSV 損毀的記錄。 當它符合令牌少於架構長度的記錄時,請將 Null 設定為額外的欄位。 當記錄的令牌超過架構長度時,它會卸除額外的令牌。FAILFAST
:當它符合損毀的記錄時,會擲回例外狀況。
columnNameOfCorruptRecord
(預設值為 中指定的spark.sql.columnNameOfCorruptRecord
值):允許重新命名新字段,其格式不正確的字串是由PERMISSIVE
模式所建立。 這會覆寫spark.sql.columnNameOfCorruptRecord
。multiLine
(預設值false
):剖析一筆記錄,其可能跨越多行。locale
(預設值en-US
):以IETF BCP 47 格式設定地區設定為語言標記。 例如,這是在剖析日期和時間戳時使用。lineSep
(預設值涵蓋所有\r
、\r\n
和\n
):定義應該用於剖析的行分隔符。 最大長度為 1 個字元。pathGlobFilter
:選擇性的 Glob 模式,只包含符合模式路徑的檔案。 語法會org.apache.hadoop.fs.GlobFilter
遵循 。 它不會變更分割區探索的行為。
範例
> SELECT from_csv('1, 0.8', 'a INT, b DOUBLE');
{1,0.8}
> SELECT from_csv('26/08/2015', 'time Timestamp', map('timestampFormat', 'dd/MM/yyyy'));
{"time":2015-08-26 00:00:00}