Чтение файлов Excel

Это важно

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

Вы можете получать, анализировать и запрашивать файлы Excel для пакетных и потоковых рабочих нагрузок с помощью встроенной поддержки формата файлов Excel. Он автоматически вводит схему и типы данных, устраняя необходимость в внешних библиотеках или преобразованиях вручную файлов. Эта функция обеспечивает простое прием как из локальных отправк, так и из облачного хранилища.

Ключевые особенности

  • Непосредственное чтение файлов .xls и .xlsx с помощью Databricks SQL и Spark API.
  • Непосредственная загрузка .xls и .xlsx файлов с помощью интерфейса добавления данных. См. как создать или изменить таблицу с помощью загрузки файлов.
  • Считывает любой лист из файла с несколькими листами.
  • Укажите точные границы или диапазоны ячеек.
  • Автоматически выводить схему, заголовки и типы данных.
  • Загрузка оценённых формул.
  • Используйте автозагрузчик для структурированной потоковой передачи файлов Excel.

Предпосылки

Databricks Runtime 17.1 или более поздней версии.

Создание или изменение таблицы в пользовательском интерфейсе

Вы можете использовать интерфейс Create or modify table для создания таблиц из файлов Excel. Начните с загрузки файла Excel или выбора файла Excel из тома или внешнего источника. Выберите лист, настройте количество строк заголовка и при необходимости укажите диапазон ячеек. Пользовательский интерфейс поддерживает создание одной таблицы из выбранного файла и листа.

Запрос файлов Excel

Вы можете запросить файлы Excel с помощью пакета Spark (spark.read) и API потоковой передачи (spark.readstream). Вы можете автоматически вывести схему или указать собственную схему для анализа Excel файлов. По умолчанию средство синтаксического анализа считывает все ячейки, начиная с левой верхней ячейки до последней непустой ячейки в правом нижнем углу на первом листе. Чтобы прочитать другой лист или диапазон ячеек, используйте опцию dataAddress.

Список листов в файле Excel можно запросить, установив параметр operation в listSheets.

параметры синтаксического анализа Excel

Для синтаксического анализа Excel файлов доступны следующие параметры:

Параметр источника данных Description
dataAddress Адрес диапазона ячеек, который нужно прочитать, в синтаксисе Excel. Если он не указан, средство синтаксического анализа считывает все допустимые ячейки из первого листа.
  • "" или не указан: считывает все данные из первого листа.
  • "MySheet!C5:H10": считывает диапазон C5H10 от листа с именем MySheet.
  • "C5:H10": считывает диапазон C5H10 от первого листа.
  • "Sheet1!A1:A1": считывает только ячейку A1 из Sheet1.
  • "Sheet1": считывает все данные из Sheet1.
  • "My Sheet!?>!D5:G10": считывает D5 до G10.My Sheet!?>
headerRows Количество начальных строк в файле Excel, которые следует обрабатывать как строки заголовков и читать как имена столбцов. При указании dataAddress, headerRows применяется к строкам заголовков в пределах этого диапазона ячеек. Поддерживаемые значения: 0 и 1. Значением по умолчанию является 0, в этом случае имена столбцов создаются автоматически путем добавления номера столбца к _c (например, _c1, _c2, _c3, ...).
Примеры.
  • dataAddress: "A2:D5", headerRows: "0": определять имена столбцов как _c1..._c4. Считывает первую строку данных из строки 2: A2 в D2.
  • dataAddress: "A2:D5", headerRows: "1": задает имена столбцов в качестве значений ячеек в строке 2: A2 до D2. Считывает первую строку данных из строки 3: A3 в D3.
operation Указывает операцию, выполняемую в книге Excel. Значение по умолчанию — readSheet, которое считывает данные с листа. Другая поддерживаемая операция — listSheetsэто функция, которая возвращает список листов в книге. Для операции listSheets возвращаемая схема представляет собой struct, имеющий следующие поля:
  • sheetIndex:длинный
  • sheetName:Струна
timestampNTZFormat Строка настраиваемого формата для значения метки времени (хранящегося в виде строки в Excel) без часового пояса, соответствующего формату шаблона даты и времени. Это относится к строковым значениям, считываемым как TimestampNTZType. По умолчанию: yyyy-MM-dd'T'HH:mm:ss[.SSS].
dateFormat Строка настраиваемого формата даты, которая соответствует формату шаблона datetime. Это относится к строковым значениям, считываемым как Date. По умолчанию: yyyy-MM-dd.

Примеры

Найдите примеры кода для чтения Excel файлов с помощью встроенного соединителя Lakeflow Connect.

Чтение файлов Excel с использованием побочного чтения в пакете Spark

Файл Excel можно считывать из облачного хранилища (например, S3, ADLS) с помощью spark.read.excel. Рассмотрим пример.

# Read the first sheet from a single Excel file or from multiple Excel files in a directory
df = (spark.read.excel(<path to excel directory or file>))

# Infer schema field name from the header row
df = (spark.read
       .option("headerRows", 1)
       .excel(<path to excel directory or file>))

# Read a specific sheet and range
df = (spark.read
       .option("headerRows", 1)
       .option("dataAddress", "Sheet1!A1:E10")
       .excel(<path to excel directory or file>))

Чтение Excel файлов с помощью SQL

Вы можете использовать функцию read_files для загрузки файлов Excel непосредственно через SQL. Рассмотрим пример.

-- Read an entire Excel file
CREATE TABLE my_table AS
SELECT * FROM read_files(
  "<path to excel directory or file>",
  schemaEvolutionMode => "none"
);

-- Read a specific sheet and range
CREATE TABLE my_sheet_table AS
SELECT * FROM read_files(
  "<path to excel directory or file>",
  format => "excel",
  headerRows => 1,
  dataAddress => "Sheet1!A2:D10",
  schemaEvolutionMode => "none"
);

Потоковая обработка файлов Excel с помощью Auto Loader

Вы можете передавать файлы Excel с помощью автозагрузчика, задав для параметра cloudFiles.format значение excel. Рассмотрим пример.

df = (
  spark
    .readStream
    .format("cloudFiles")
    .option("cloudFiles.format", "excel")
    .option("cloudFiles.inferColumnTypes", True)
    .option("headerRows", 1)
    .option("cloudFiles.schemaLocation", "<path to schema location dir>")
    .option("cloudFiles.schemaEvolutionMode", "none")
    .load(<path to excel directory or file>)
)
df.writeStream
  .format("delta")
  .option("mergeSchema", "true")
  .option("checkpointLocation", "<path to checkpoint location dir>")
  .table(<table name>)

Импортировать файлы Excel с помощью COPY INTO

CREATE TABLE IF NOT EXISTS excel_demo_table;

COPY INTO excel_demo_table
FROM "<path to excel directory or file>"
FILEFORMAT = EXCEL
FORMAT_OPTIONS ('mergeSchema' = 'true')
COPY_OPTIONS ('mergeSchema' = 'true');

Анализ сложных неструктурированных Excel листов

Для сложных, неструктурированных листов Excel (например, листы с несколькими таблицами или участками данных), Databricks рекомендует извлекать диапазоны ячеек, необходимые для создания ваших DataFrame в Spark, с помощью параметров dataAddress. Рассмотрим пример.

df = (spark.read.format("excel")
       .option("headerRows", 1)
       .option("dataAddress", "Sheet1!A1:E10")
       .load(<path to excel directory or file>))

Список листов

Вы можете перечислить листы в файле Excel с помощью операции listSheets. Возвращаемая схема — это struct, содержащий следующие поля:

  • sheetIndex:длинный
  • sheetName:Струна

Рассмотрим пример.

Python

# List the name of the Sheets in an Excel file
df = (spark.read.format("excel")
       .option("operation", "listSheets")
       .load(<path to excel directory or file>))

SQL

SELECT * FROM read_files("<path to excel directory or file>",
  schemaEvolutionMode => "none",
  operation => "listSheets"
)

Ограничения

  • Запись кадров данных в формат Excel не поддерживается. Данные можно экспортировать в другие форматы, такие как CSV или Parquet.
  • Защищенные паролем файлы не поддерживаются.
  • Поддерживается только одна строка заголовка.
  • Объединенные значения ячеек находятся только в левой верхней ячейке. Оставшиеся дочерние ячейки имеют значение NULL.
  • Потоковая передача Excel файлов с помощью Auto Loader поддерживается, но эволюция схем не поддерживается. Необходимо явно задать schemaEvolutionMode="None".
  • "Строгая электронная таблица Open XML (Strict OOXML)" не поддерживается.
  • Выполнение макроса в файлах .xlsm не поддерживается.
  • Параметр ignoreCorruptFiles не поддерживается.

Часто задаваемые вопросы

Найдите ответы на часто задаваемые вопросы о соединителе Excel в Lakeflow Connect.

Можно ли одновременно читать все листы?

Средство синтаксического анализа считывает только один лист из файла Excel одновременно. По умолчанию он считывает первый лист. Можно указать другой лист с помощью dataAddress параметра. Чтобы обработать несколько листов, сначала получите список листов, задав operation параметр listSheets, а затем выполните итерацию по именам листов и прочитайте каждый из них, указав его имя в параметре dataAddress .

Могу ли я обрабатывать Excel-файлы со сложными макетами или несколькими таблицами на одном листе?

По умолчанию средство синтаксического анализа считывает все ячейки Excel из левой верхней ячейки до правой нижней непустой ячейки. Можно указать другой диапазон ячеек с помощью dataAddress параметра.

Как обрабатываются формулы и объединенные ячейки?

Формулы воспринимаются в виде их вычисленных значений. Для объединенных ячеек сохраняется только значение из левого верхнего угла, а дочерние ячейки — NULL.

Могу ли я использовать загрузку данных из Excel в заданиях Auto Loader и потоковыми заданиями?

Да, можно передавать файлы Excel с помощью cloudFiles.format = "excel". Однако эволюция схемы не поддерживается, поэтому необходимо установить "schemaEvolutionMode" в "None".

Могу ли я записать DataFrames в формате Excel?

Нет. Встроенный соединитель Excel поддерживает только чтение. Чтобы экспортировать данные, используйте поддерживаемый формат записи, например CSV или Parquet.

Поддерживается ли защищенный паролем Excel?

Нет. Если эта функция важна для рабочих процессов, обратитесь к представителю учетной записи Databricks.