from_csv 函数

适用于:Databricks SQL check marked yes Databricks Runtime

返回具有 csvStrschema 的结构值。

语法

from_csv(csvStr, schema [, options])

参数

  • csvStr:指定 CSV 数据行的字符串表达式。
  • schemaschema_of_csv 函数的字符串字面量或调用。
  • options:指定指令的可选 MAP<STRING,STRING> 字面量。

返回

一个结构,其字段名称和类型与架构定义匹配。

csvStrschemaoptions 方面应格式正确。 schema 必须定义为逗号分隔的列名称和数据类型对(例如如同在 CREATE TABLE 中使用一样)。

如果提供,options 可以是下列任何内容:

  • sep(默认值为 ,):为每个字段和值设置分隔符。 此分隔符可以是一个或多个字符。
  • encoding(默认值为 UTF-8):按照指定编码类型对 CSV 文件进行解码。
  • quote(默认值为 "):设置单个字符,用于转义带引号值,其中分隔符可以是值的一部分。 如果要关闭引用,则需要设置不为 null,但是为空字符串。 此行为与 com.databricks.spark.csv 不同。
  • escape(默认值为 \):设置单个字符,用于在带引号值内转义引号。
  • charToEscapeQuoteEscaping(默认值为 escape\0):设置单个字符,用于转义引号字符的转义。 当 escapequote 字符不同时,默认值为转义字符,否则为 \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):设置指示日期格式的字符串。 自定义日期格式遵循日期/时间模式中的格式。 这适用于日期类型。
  • timestampFormat(默认值为 yyyy-MM-dd'T'HH:mm:ss[.SSS][XXX]):设置指示时间戳格式的字符串。 自定义日期格式遵循日期/时间模式中的格式。 这适用于时间戳类型。
  • 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}