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}