共用方式為


from_csv 功能

適用于:核取標示為是 Databricks SQL 檢查標示為是 Databricks Runtime

傳回具有 csvStrschema 的結構值。

語法

from_csv(csvStr, schema [, options])

參數

  • csvStr:指定 CSV 資料列的 STRING 運算式。
  • schemaschema_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}