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
(既定値は,
): 各フィールドと値の区切り記号を設定します。 この区切り記号には、1 つ以上の文字を指定できます。encoding
(既定値は UTF-8): 指定されたエンコードの種類によって CSV ファイルをデコードします。quote
(既定値は"
): 区切り記号を値の一部にできる、引用符で囲まれた値をエスケープするために使用される 1 文字を設定します。 引用をオフにする場合は、null 値ではなく空の文字列を設定する必要があります。 この動作はcom.databricks.spark.csv
とは異なります。escape
(既定値は\
): 既に引用符で囲まれた値内の引用符をエスケープするために使用する 1 文字を設定します。charToEscapeQuoteEscaping
(既定値はescape
または\0
): 引用符文字のエスケープをエスケープするために使用する 1 文字を設定します。escape
とquote
の文字が異なる場合、既定値はエスケープ文字です。それ以外の場合は\0
です。comment
(既定値は空の文字列): この文字で始まる行をスキップするために使用される 1 文字を設定します。 既定では無効になっています。- header (既定値は
false
): 列の名前として最初の行を使用します。 enforceSchema
(既定値はtrue
): true に設定されている場合、指定したスキーマまたは推論されたスキーマがデータソース ファイルに強制的に適用され、CSV ファイル内のヘッダーは無視されます。 このオプションが false に設定されている場合、ヘッダー オプションが true に設定されている場合の CSV ファイル内のすべてのヘッダーに対してスキーマが検証されます。 スキーマのフィールド名と CSV ヘッダーの列名は、spark.sql.caseSensitive
を考慮に入れたそれぞれの位置によって確認されます。 既定値は true ですが、正しくない結果を回避するために enforceSchema オプションを無効にすることをお勧めします。inferSchema
(既定値はfalse
): 入力スキーマをデータから自動的に推論します。 データに対し追加パスが 1 つ必要です。samplingRatio
(既定値は 1.0): スキーマ推論に使用される行の割合を定義します。ignoreLeadingWhiteSpace
(既定値はfalse
): 読み取り中の値から先頭の空白文字をスキップするかどうかを示すフラグ。ignoreTrailingWhiteSpace
(既定値はfalse
): 読み取り中の値から末尾の空白文字をスキップするかどうかを示すフラグ。nullValue
(既定値は空の文字列): null 値の文字列表記を設定します。emptyValue
(既定値は空の文字列): 空の値の文字列表記を設定します。nanValue
(既定値はNaN
): 非数値の文字列表記を設定します。positiveInf
(既定値はInf
): 正の無限大の値の文字列表記を設定します。negativeInf
(既定値は-Inf)
): 負の無限大の値の文字列表記を設定します。dateFormat
(既定値はyyyy-MM-dd
): 日付形式を示す文字列を設定します。 カスタム日付形式は Datetime パターンの形式に従います。 これは、date 型に適用されます。timestampFormat
(既定値はyyyy-MM-dd'T'HH:mm:ss[.SSS][XXX]
): timestamp 形式を示す文字列を設定します。 カスタム日付形式は Datetime パターンの形式に従います。 これは、timestamp 型に適用されます。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
): 1 つのレコードを解析します。これは複数の行にまたがる場合があります。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}