from_csv
函数
适用于: Databricks SQL Databricks Runtime
返回具有 csvStr
和 schema
的结构值。
语法
from_csv(csvStr, schema [, options])
参数
csvStr
:指定 CSV 数据行的字符串表达式。schema
:schema_of_csv 函数的字符串字面量或调用。options
:指定指令的可选 MAP<STRING,STRING> 字面量。
返回
一个结构,其字段名称和类型与架构定义匹配。
csvStr
在 schema
和 options
方面应格式正确。
schema
必须定义为逗号分隔的列名称和数据类型对(例如如同在 CREATE TABLE
中使用一样)。
如果提供,options
可以是下列任何内容:
sep
(默认值为,
):为每个字段和值设置分隔符。 此分隔符可以是一个或多个字符。encoding
(默认值为 UTF-8):按照指定编码类型对 CSV 文件进行解码。quote
(默认值为"
):设置单个字符,用于转义带引号值,其中分隔符可以是值的一部分。 如果要关闭引用,则需要设置不为 null,但是为空字符串。 此行为与com.databricks.spark.csv
不同。escape
(默认值为\
):设置单个字符,用于在带引号值内转义引号。charToEscapeQuoteEscaping
(默认值为escape
或\0
):设置单个字符,用于转义引号字符的转义。 当escape
与quote
字符不同时,默认值为转义字符,否则为\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}