Função from_csv
Aplica-se a: SQL do Databricks Runtime do Databricks
Retorna um valor de struct com csvStr
e schema
.
Sintaxe
from_csv(csvStr, schema [, options])
Argumentos
csvStr
: uma expressão de STRING que especifica uma linha de dados CSV.schema
: um literal de cadeia de caracteres ou uma invocação da schema_of_csv function.options
: um literal de MAP<STRING,STRING> opcional que especifica diretivas.
Retornos
Um STRUCT com nomes de campo e tipos correspondentes à definição de esquema.
csvStr
deve ser bem formado em relação ao e schema
ao options
.
schema
precisa ser definido como pares de tipo de dados e nome de coluna separados por vírgula, como usado, por exemplo, em CREATE TABLE
.
options
, se fornecido, pode ser um dos seguintes:
sep
(padrão,
): define um separador para cada campo e valor. Esse separador pode ser um ou mais caracteres.encoding
(padrão UTF-8): decodifica os arquivos CSV pelo tipo de codificação especificado.quote
(padrão"
): define um único caractere usado para escapar valores entre aspas em que o separador pode ser parte do valor. Se você quiser desativar as aspas, será necessário definir uma cadeia de caracteres vazia e não nula. Esse comportamento é diferente decom.databricks.spark.csv
.escape
(padrão\
): define um único caractere usado para escape de aspas dentro de um valor já entre aspas.charToEscapeQuoteEscaping
(padrãoescape
ou\0
): define um único caractere usado para escapar o escape para o caractere de aspas. O valor padrão é caractere de escape quando os caracteresescape
equote
são diferentes, caso contrário,\0
.comment
(cadeia de caracteres vazia padrão): define um único caractere usado para ignorar linhas que começam com este caractere. Por padrão, ela fica desabilitada.- cabeçalho (padrão
false
): usa a primeira linha como nomes de colunas. enforceSchema
(padrãotrue
): se for definido como true, o esquema especificado ou inferido será aplicado de modo forçado aos arquivos DataSource e os cabeçalhos nos arquivos CSV serão ignorados. Se a opção for definida como false, o esquema será validado em relação a todos os cabeçalhos nos arquivos CSV, caso a opção de cabeçalho seja definida como true. Os nomes de campos nos nomes de esquema e coluna em cabeçalhos CSV são verificados por suas posições levando em contaspark.sql.caseSensitive
. Embora o valor padrão seja true, é recomendável desabilitar a opção enforceSchema para evitar resultados incorretos.inferSchema
(padrãofalse
): infere o esquema de entrada automaticamente dos dados. Requer uma passagem extra sobre os dados.samplingRatio
(padrão 1.0): define a fração de linhas usadas para inferir o esquema.ignoreLeadingWhiteSpace
(padrãofalse
): um sinalizador que indica se os espaços em branco à esquerda de valores que estão sendo lidos devem ser ignorados.ignoreTrailingWhiteSpace
(padrãofalse
): um sinalizador que indica se os espaços em branco à direita de valores que estão sendo lidos devem ser ignorados.nullValue
(cadeia de caracteres vazia padrão): define a representação da cadeia de caracteres de um valor nulo.emptyValue
(cadeia de caracteres vazia padrão): define a representação da cadeia de caracteres de um valor vazio.nanValue
(padrãoNaN
): define a representação da cadeia de caracteres de um valor não numérico.positiveInf
(padrãoInf
): define a representação da cadeia de caracteres de um valor infinito positivo.negativeInf
(padrão-Inf)
): define a representação da cadeia de caracteres de um valor infinito negativo.dateFormat
(padrãoyyyy-MM-dd
): define a cadeia de caracteres que indica um formato de data. Os formatos de data personalizados seguem os formatos dos padrões de datetime. Isso se aplica ao tipo de data.timestampFormat
(padrãoyyyy-MM-dd'T'HH:mm:ss[.SSS][XXX]
): define a cadeia de caracteres que indica um formato de carimbo de data/hora. Os formatos de data personalizados seguem os formatos dos padrões de datetime. Isso se aplica ao tipo de carimbo de data/hora.maxColumns
(padrão20480
): define um limite rígido de quantas colunas um registro pode ter.maxCharsPerColumn
(padrão -1): define o número máximo de caracteres permitidos para qualquer valor especificado que está sendo lido. Por padrão, é -1, o que significa comprimento ilimitadounescapedQuoteHandling
(padrãoSTOP_AT_DELIMITER
): define como o analisador de CSV lida com valores com aspas sem escape.STOP_AT_CLOSING_QUOTE
: se aspas sem escape forem encontradas na entrada, acumular o caractere de aspas e continuar analisando o valor como um valor entre aspas, até que uma aspa de fechamento seja encontrada.BACK_TO_DELIMITER
: se forem encontradas aspas sem escape na entrada, considere o valor como um valor sem aspas. Isso fará com que o analisador acumule todos os caracteres do valor atual analisado até que o delimitador seja encontrado. Se nenhum delimitador for encontrado no valor, o analisador continuará acumulando caracteres da entrada até que um delimitador ou uma terminação de linha seja encontrada.STOP_AT_DELIMITER
: se forem encontradas aspas sem escape na entrada, considere o valor como um valor sem aspas. Isso fará com que o analisador acumule todos os caracteres até que o delimitador ou uma terminação de linha seja encontrada na entrada.STOP_AT_DELIMITER
: se aspas sem escape forem encontradas na entrada, o conteúdo analisado do valor especificado será ignorado e o valor definido emnullValue
será gerado em seu lugar.RAISE_ERROR
: se forem encontradas aspas sem escape na entrada, umTextParsingException
será lançado.
mode
(padrãoPERMISSIVE
): permite um modo para lidar com registros corrompidos durante a análise. Ele dá suporte aos seguintes modos que não fazem diferenciação de maiúsculas e minúsculas. O Spark tenta analisar apenas as colunas obrigatórias no CSV na remoção de coluna. Portanto, os registros corrompidos podem ser diferentes com base no conjunto de campos necessários. Esse comportamento pode ser controlado pelospark.sql.csv.parser.columnPruning.enabled
(habilitado por padrão).PERMISSIVE
: quando ele encontra um registro corrompido, coloca a cadeia de caracteres malformada em um campo configurado porcolumnNameOfCorruptRecord
e define os campos malformados como nulos. Para manter os registros corrompidos, um usuário pode definir um campo do tipo cadeia de caracteres chamado columnNameOfCorruptRecord em um esquema definido pelo usuário. Se o esquema não tiver o campo, ele removerá os registros corrompidos durante a análise. Um registro com menos ou mais tokens do que o esquema não é um registro corrompido em CSV. Quando encontra um registro com menos tokens do que o comprimento do esquema, define como nulo para campos extras. Quando o registro tem mais tokens do que o comprimento do esquema, ele descarta os tokens extras.FAILFAST
: gera uma exceção quando encontra registros corrompidos.
columnNameOfCorruptRecord
(o padrão é o valor especificado emspark.sql.columnNameOfCorruptRecord
): permite renomear o novo campo que tem uma cadeia de caracteres malformada criada pelo modoPERMISSIVE
. Isso substituispark.sql.columnNameOfCorruptRecord
.multiLine
(padrãofalse
): analisar um registro, que pode abranger várias linhas.locale
(padrãoen-US
): define uma localidade como marca de idioma no formato IETF BCP 47. Por exemplo, isso é usado durante a análise de datas e de carimbos de data/hora.lineSep
(o padrão abrange todos:\r
,\r\n
e\n
): define o separador de linha que deve ser usado para análise. O comprimento máximo é de um caractere.pathGlobFilter
: um padrão glob opcional para incluir apenas os arquivos com caminhos correspondentes ao padrão. A sintaxe segueorg.apache.hadoop.fs.GlobFilter
. Ele não altera o comportamento da descoberta de partição.
Exemplos
> 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}