Función from_csv
Se aplica a: Databricks SQL Databricks Runtime
Devuelve un valor de estructura con csvStr
y schema
.
Sintaxis
from_csv(csvStr, schema [, options])
Argumentos
csvStr
: expresión STRING que especifica una fila de datos CSV.schema
: literal STRING o invocación de la función schema_of_csv.options
: literal MAP<STRING,STRING> opcional que especifica directivas.
Devoluciones
Una expresión STRUCT con nombres de campo y tipos que coinciden con la definición de esquema.
csvStr
debe tener un formato correcto con respecto a schema
y options
.
schema
se debe definir como pares de nombre de columna y tipo de datos separados por comas, como se usa en CREATE TABLE
, por ejemplo.
options
, si se proporciona, puede ser cualquiera de los valores siguientes:
sep
(valor,
predeterminado): establece un separador para cada campo y valor. Este separador puede tener uno o varios caracteres.encoding
(UTF-8 predeterminado): descodifica los archivos CSV según el tipo de codificación especificado.quote
(valor"
predeterminado): establece un carácter único que se usa para el escape de valores entre comillas donde el separador puede formar parte del valor. Si desea desactivar las expresiones de código delimitadas, no debe establecer NULL, sino una cadena vacía. Este comportamiento es diferente decom.databricks.spark.csv
.escape
(valor predeterminado\
): establece un carácter único que se usa para el escape de comillas dentro de un valor ya entrecomillado.charToEscapeQuoteEscaping
(valorescape
o\0
predeterminado): establece un carácter único que se usa para el escape del escape del carácter de comillas. El valor predeterminado es el carácter de escape cuando los caracteresescape
yquote
son diferentes; de lo contrario, es\0
.comment
(cadena vacía predeterminada): establece un carácter único que se usa para la omisión de líneas que empiezan con este carácter. De forma predeterminada, está deshabilitado.- header (valor
false
predeterminado): usa la primera línea como nombres de columnas. enforceSchema
(valortrue
predeterminado): si se establece en true, el esquema especificado o inferido se aplica a la fuerza a archivos de orígenes de datos y se omiten los encabezados de los archivos CSV. Si la opción se establece en false, el esquema se valida con todos los encabezados de los archivos CSV cuando la opción de encabezado se establece en true. Los nombres de campo del esquema y los nombres de columna de los encabezados CSV se comprueban por sus posiciones teniendo en cuentaspark.sql.caseSensitive
. Aunque el valor predeterminado es true, se recomienda deshabilitar la opción enforceSchema para evitar resultados incorrectos.inferSchema
(valorfalse
predeterminado): deduce automáticamente el esquema de entrada de los datos. Requiere un paso adicional sobre los datos.samplingRatio
(versión 1.0 predeterminada): define la fracción de filas que se usan para la inferencia de esquemas.ignoreLeadingWhiteSpace
(valorfalse
predeterminado): marca que indica si se deben omitir o no los espacios en blanco iniciales de los valores que se leen.ignoreTrailingWhiteSpace
(valorfalse
predeterminado): marca que indica si se deben omitir o no los espacios en blanco finales de los valores que se leen.nullValue
(cadena vacía predeterminada): establece la representación de cadena de un valor NULL.emptyValue
(cadena vacía predeterminada): establece la representación de cadena de un valor vacío.nanValue
(valorNaN
predeterminado): establece la representación de cadena de un valor no numérico.positiveInf
(valorInf
predeterminado): establece la representación de cadena de un valor de infinito positivo.negativeInf
(valor-Inf)
predeterminado): establece la representación de cadena de un valor de infinito negativo.dateFormat
(valor predeterminadoyyyy-MM-dd
): establece la cadena que indica un formato de fecha. Los formatos de fecha personalizados siguen los formatos de Patrones de fecha y hora. Esto se aplica al tipo de fecha.timestampFormat
(valoryyyy-MM-dd'T'HH:mm:ss[.SSS][XXX]
predeterminado): establece la cadena que indica un formato de marca de tiempo. Los formatos de fecha personalizados siguen los formatos de Patrones de fecha y hora. Esto se aplica al tipo timestamp.maxColumns
(valor20480
predeterminado): define un límite máximo de cuántas columnas puede tener un registro.maxCharsPerColumn
(valor predeterminado -1): define el número máximo de caracteres permitido para cualquier valor especificado que se lea. De forma predeterminada, es -1, lo que significa una longitud ilimitadaunescapedQuoteHandling
(valorSTOP_AT_DELIMITER
predeterminado): define cómo controla el analizador de CSV los valores con comillas sin escape.STOP_AT_CLOSING_QUOTE
: si se encuentran comillas sin escape en la entrada, acumulará la comilla y procederá a analizar el valor como un valor entrecomillado, hasta que se encuentren comillas de cierre.BACK_TO_DELIMITER
: si se encontrasen comillas sin escape en la entrada, considere el valor como un valor sin comillas. Esto hará que el analizador acumule todos los caracteres del valor analizado actual hasta que se encuentre el delimitador. Si no se encuentra ningún delimitador en el valor, el analizador seguirá acumulando caracteres de la entrada hasta que se encuentre un delimitador o un final de línea.STOP_AT_DELIMITER
: si se encontrasen comillas sin escape en la entrada, considere el valor como un valor sin comillas. Esto hará que el analizador acumule todos los caracteres hasta que se encuentre el delimitador o un final de línea en la entrada.STOP_AT_DELIMITER
: si se encuentran comillas sin escape en la entrada, se omitirá el contenido analizado para el valor especificado y, en su lugar, se generará el valor establecido ennullValue
.RAISE_ERROR
: si se encuentran comillas sin escape en la entrada, se iniciará una excepciónTextParsingException
.
mode
(valor predeterminadoPERMISSIVE
): permite un modo para controlar los registros dañados durante el análisis. Admite los siguientes modos que no distinguen mayúsculas de minúsculas. Spark intenta analizar solo las columnas necesarias en CSV que son objeto de eliminación. Por lo tanto, los registros dañados pueden ser diferentes en función del conjunto de campos necesario. Este comportamiento se puede controlar mediantespark.sql.csv.parser.columnPruning.enabled
(habilitado de forma predeterminada).PERMISSIVE
: cuando detecta un registro dañado, coloca la cadena con formato incorrecto en un campo configurado porcolumnNameOfCorruptRecord
y establece en NULL los campos con formato incorrecto. Para mantener los registros dañados, un usuario puede establecer un campo de tipo de cadena denominado columnNameOfCorruptRecord en un esquema definido por el usuario. Si un esquema no tiene el campo, quita los registros dañados durante el análisis. Un registro con menos o más tokens que el esquema no es un registro dañado en CSV. Cuando detecta un registro que tiene menos tokens que la longitud del esquema, establece NULL en campos adicionales. Cuando el registro tiene más tokens que la longitud del esquema, quita tokens adicionales.FAILFAST
: inicia una excepción cuando detecta registros dañados.
columnNameOfCorruptRecord
(el valor predeterminado es el especificado enspark.sql.columnNameOfCorruptRecord
): permite cambiar el nombre del nuevo campo con una cadena con formato incorrecto creada por el modoPERMISSIVE
. Esto invalidaspark.sql.columnNameOfCorruptRecord
.multiLine
(valorfalse
predeterminado): analiza un registro, que puede abarcar varias líneas.locale
(valoren-US
predeterminado): establece una configuración regional como etiqueta de idioma en formato IETF BCP 47. Por ejemplo, esto se usa al analizar fechas y marcas de tiempo.lineSep
(el valor predeterminado abarca\r
,\r\n
y\n
): define el separador de líneas que se debe usar para el análisis. La longitud máxima es de 1 carácter.pathGlobFilter
: patrón global para incluir solo archivos con rutas de acceso que coincidan con el patrón. La sintaxis sigueorg.apache.hadoop.fs.GlobFilter
. No cambia el comportamiento de la detección de particiones.
Ejemplos
> 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}