from_xml
函式
適用於: Databricks SQL Databricks Runtime 14.1 和更新版本
重要
這項功能處於公開預覽狀態。
傳回使用 schema
剖析的結構xmlStr
值。
語法
from_xml(xmlStr, schema [, options])
引數
xmlStr
STRING
:指定單一 XML 記錄的表達式schema
STRING
:schema_of_xml函式的表達式或調用。options
:指定指示詞的選擇性常MAP<STRING,STRING>
值。
傳回
STRUCT
,具有符合架構定義的功能變數名稱和型別。
xmlStr
應該在和options
方面schema
形成良好的格式。 如果 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
):將所有浮點值推斷為十進位類型。 如果值不符合小數,則會將其推斷為雙精度浮點數。attributePrefix
(預設值_
):屬性的前置詞,用來區分屬性與元素。 這會是功能變數名稱的前置詞。 可以是空字串。valueTag
(預設值_VALUE
):用於元素內也具有 attribute(s) 或子元素(s) 元素之字元數據的標記。encoding
(預設 UTF-8):依指定的編碼類型譯碼 XML 檔案。ignoreSurroundingSpaces
(預設值true
):定義是否應該略過正在讀取值周圍的空格符。rowValidationXSDPath
:XSD 檔案的路徑,用來個別驗證每個數據列的 XML。 無法驗證的數據列會被視為如上所示剖析錯誤。 XSD 不會影響提供的架構或推斷。ignoreNamespace
(預設值false
):如果true
為 ,則會忽略 XML 元素和屬性上的命名空間前置詞。 例如,標記<abc:author>
和<def:author>
會被視為兩者都只是<author>
。 請注意,元素上rowTag
不能忽略命名空間,只有其子系。 請注意,XML 剖析通常不是命名空間感知,即使為 false 也一樣。timestampFormat
(預設值yyyy-MM-dd'T'HH:mm:ss[.SSS][XXX]
):設定表示時間戳格式的字串。 自訂日期格式會遵循 Datetime 模式的格式。 這適用於時間戳類型。timestampNTZFormat
(預設值yyyy-MM-dd'T'HH:mm:ss[.SSS]
):設定字串,指出不含時區格式的時間戳。 自訂日期格式會遵循 Datetime 模式的格式。 這適用於 TimestampNTZType 類型。dateFormat
(預設值yyyy-MM-dd
):設定表示日期格式的字串。 自訂日期格式會遵循 Datetime 模式的格式。 這適用於日期類型。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}]}