from_xml
関数
適用対象: Databricks SQL Databricks Runtime 14.1 以上
重要
この機能はパブリック プレビュー段階にあります。
schema
を使用して xmlStr
から解析された構造体の値を返します。
構文
from_xml(xmlStr, schema [, options])
引数
xmlStr
: 1 つの XML レコードを指定するSTRING
式schema
:STRING
式または schema_of_xml 関数の呼び出し。options
: ディレクティブを指定する省略可能なMAP<STRING,STRING>
リテラル。
返品
スキーマ定義と一致するフィールド名と型を持つ STRUCT
。
xmlStr
は、schema
および options
に関して適切な形式である必要があります。 xmlStr
を解析できない場合は、NULL
が返されます。
schema
は、コンマで区切られた列名とデータ型のペアとして定義する必要があります (例: CREATE TABLE
)。
options
は、指定する場合は、次のいずれかを指定できます。
excludeAttribute
(既定値はfalse
): 要素内の属性を除外するかどうかを指定します。mode
(既定値はPERMISSIVE
): 解析中に破損したレコードを処理するモードを許可します。PERMISSIVE
: 破損したレコードに合致する場合は、columnNameOfCorruptRecord
によって構成されたフィールドに形式に誤りがある文字列を格納し、形式に誤りがあるフィールドを null 値に設定します。 破損したレコードを保持するには、ユーザー定義スキーマでcolumnNameOfCorruptRecord
という名前の文字列型フィールドを設定できます。 スキーマにフィールドがない場合、破損したレコードが解析中に削除されます。 スキーマを推論すると、出力スキーマにcolumnNameOfCorruptRecord
フィールドが暗黙的に追加されます。FAILFAST
: 破損したレコードに合致する場合に、例外をスローします。
columnNameOfCorruptRecord
(既定値はspark.sql.columnNameOfCorruptRecord
で指定された値):PERMISSIVE
モードによって作成された、形式に誤りがある文字列を含む新しいフィールドの名前を変更できます。 これはspark.sql.columnNameOfCorruptRecord
をオーバーライドします。inferSchema
(既定値はtrue
):true
の場合、ブール型、数値型、日付型など、結果の属性ごとに適切な型の推論を試みます。false
の場合、結果の列はすべて文字列型です。prefersDecimal
(既定値はfalse
): すべての浮動小数点値を 10 進型として推論します。 値が 10 進に合わない場合は、倍精度浮動小数点として推論します。attributePrefix
(既定値は_
): 属性と要素を区別するための属性のプレフィックス。 これはフィールド名のプレフィックスになります。 空の文字列を指定できます。valueTag
(既定値は_VALUE
): 属性または子要素の要素も持つ要素内の文字データに使用されるタグ。encoding
(既定値は UTF-8): 指定したエンコードの種類で XML ファイルをデコードします。ignoreSurroundingSpaces
(既定値はtrue
): 読み取られる値の周囲の空白をスキップするかどうかを定義します。rowValidationXSDPath
: 各行の XML を個別に検証するために使用される XSD ファイルへのパス。 検証に失敗した行は、上記のように解析エラーと同様に処理されます。 XSD から、指定または推論されたスキーマにそれ以外の影響は及びません。ignoreNamespace
(既定値はfalse
):true
の場合、XML 要素と属性の名前空間プレフィックスは無視されます。 たとえば、タグ<abc:author>
と<def:author>
は、どちらも単なる<author>
として扱われます。rowTag
要素では名前空間を無視できず、その子のみを無視できることに注意してください。 XML 解析は通常、false の場合でも名前空間を認識しないことに注意してください。timestampFormat
(既定値はyyyy-MM-dd'T'HH:mm:ss[.SSS][XXX]
): timestamp 形式を示す文字列を設定します。 カスタム日付形式は Datetime パターンの形式に従います。 これは、timestamp 型に適用されます。timestampNTZFormat
(既定値はyyyy-MM-dd'T'HH:mm:ss[.SSS]
): タイムゾーン形式のないタイムスタンプを示す文字列を設定します。 カスタム日付形式は Datetime パターンの形式に従います。 これは TimestampNTZType 型に適用されます。dateFormat
(既定値はyyyy-MM-dd
): 日付形式を示す文字列を設定します。 カスタム日付形式は Datetime パターンの形式に従います。 これは、date 型に適用されます。locale
(既定値はen-US
): IETF BCP 47 形式の言語タグとしてロケールを設定します。 たとえば、日付とタイムスタンプの解析中に使用されます。nullValue
(既定値はnull
): null 値の文字列表記を設定します。
例
> SELECT from_xml('<p><a>1</a><b>0.8</b></p>', 'a INT, b DOUBLE');
{"a":1,"b":0.8}
> SELECT from_xml('<p><time>26/08/2015</time></p>', 'time Timestamp', map('timestampFormat', 'dd/MM/yyyy'));
{ "time": "2015-08-26T00:00:00.000+0000"}
> SELECT from_xml('<p><teacher>Alice</teacher><student><name>Bob</name><rank>1</rank></student><student><name>Charlie</name><rank>2</rank></student></p>',
'STRUCT<teacher: STRING, student: ARRAY<STRUCT<name: STRING, rank: INT>>>');
{"teacher":"Alice","student":[{"name":"Bob","rank":1},{"name":"Charlie","rank":2}]}