Поделиться через


Функция from_xml

Область применения:отмечено как да Databricks SQL отмечено как да Databricks Runtime 14.1 и выше

Внимание

Эта функция предоставляется в режиме общедоступной предварительной версии.

Возвращает структуру или значение варианта, проанализированное с xmlStr помощью schema.

Синтаксис

from_xml(xmlStr, schema [, options])

Аргументы

  • xmlStr STRING: выражение, указывающее одну XML-запись
  • 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): выводит все значения с плавающей запятой в виде десятичного типа. Если значения не помещаются в десятичное значение, оно определяет их как двойные.
  • attributePrefix (по умолчанию _): префикс атрибутов для отличия атрибутов от элементов. Это будет префикс для имен полей. Может быть пустой строкой.
  • valueTag (по умолчанию _VALUE): тег, используемый для символьных данных в элементах, которые также имеют атрибуты или дочерние элементы.
  • encoding (по умолчанию UTF-8): декодирует XML-файлы по указанному типу кодирования.
  • ignoreSurroundingSpaces (по умолчанию true): определяет, следует ли пропускать окружающие пробелы из считываемых значений.
  • rowValidationXSDPath: Путь к XSD-файлу, который используется для проверки XML для каждой строки по отдельности. Строки, которые не удается проверить, обрабатываются как ошибки синтаксического анализа, как описано выше. XSD иным образом не влияет на предоставленную или выведенную схему.
  • ignoreNamespace (по умолчанию false): если true, префиксы пространств имен для XML-элементов и атрибутов игнорируются. Теги <abc:author> и <def:author> будут рассматриваться, например, как если бы они оба были просто <author>. Обратите внимание, что пространства имен нельзя игнорировать на элементе rowTag, а только на его дочерних элементах. Обратите внимание, что синтаксический анализ XML обычно не распознает пространства имен, даже если это явно не задано.
  • timestampFormat (по умолчанию yyyy-MM-dd'T'HH:mm:ss[.SSS][XXX]): задает строку, которая обозначает формат метки времени. Пользовательские форматы даты следуют форматам из шаблонов даты и времени. Это относится к типу timestamp.
  • timestampNTZFormat (yyyy-MM-dd'T'HH:mm:ss[.SSS]по умолчанию): задает строку, указывающую метку времени без формата часового пояса. Пользовательские форматы даты следуют форматам из шаблонов даты и времени. Это относится к типу TimestampNTZType.
  • dateFormat (по умолчанию yyyy-MM-dd): задает строку, которая указывает формат даты. Пользовательские форматы даты следуют форматам из шаблонов даты и времени. Это относится к типу данных "дата".
  • 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}}