適用対象:
Databricks SQL
Databricks Runtime 14.1 以上
重要
この機能はパブリック プレビュー段階にあります。
xmlStrを使用してschemaから解析された構造体またはバリアント型の値を返します。
構文
from_xml(xmlStr, schema [, options])
引数
-
xmlStr: 1 つの XML レコードを指定するSTRING式 -
schema:STRING式またはschema_of_xml関数の呼び出し。 -
options: ディレクティブを指定する省略可能なMAP<STRING,STRING>リテラル。
返品
スキーマ定義に一致するフィールド名と型を持つSTRUCT。スキーマが単一のVARIANT型の場合はVariant値。
xmlStr は、schema および options に関して適切な形式である必要があります。
xmlStr を解析できない場合は、NULL が返されます。
schema は、コンマで区切られた列名とデータ型のペアとして定義する必要があります (例: CREATE TABLE)。 Databricks Runtime 16.4 以降では、 schema は単一の VARIANT 型として定義することもできます。
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}]}
> SELECT from_xml('<p><a>1</a><b>0.8</b></p>', 'VARIANT');
{"p":{"a":1,"b":0.8}}