Share via


from_xml 関数

適用対象:check marked yes Databricks SQL check marked yes 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}]}