分享方式:


from_csv函式

適用於: 檢查標示為是 Databricks SQL 檢查標示為是 Databricks Runtime

傳回具有 csvStrschema的結構值。

語法

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}