Создание разностных таблиц

Завершено

При создании таблицы в Microsoft Fabric lakehouse разностная таблица определяется в хранилище метаданных для lakehouse, а данные для таблицы хранятся в базовых файлах Parquet для таблицы.

При использовании большинства интерактивных средств в среде Microsoft Fabric подробные сведения о сопоставлении определения таблицы в хранилище метаданных с базовыми файлами абстрагируются. Однако при работе с Apache Spark в lakehouse у вас есть более широкий контроль над созданием и управлением разностными таблицами.

Создание разностной таблицы из кадра данных

Одним из самых простых способов создания разностной таблицы в Spark является сохранение кадра данных в разностном формате. Например, следующий код PySpark загружает кадр данных с данными из существующего файла, а затем сохраняет этот кадр данных в виде разностной таблицы:

# Load a file into a dataframe
df = spark.read.load('Files/mydata.csv', format='csv', header=True)

# Save the dataframe as a delta table
df.write.format("delta").saveAsTable("mytable")

Код указывает, что таблица должна быть сохранена в разностном формате с указанным именем таблицы. Данные таблицы сохраняются в файлах Parquet (независимо от формата исходного файла, загруженного в кадр данных) в области хранилища таблиц в lakehouse, а также в папке _delta_log , содержащей журналы транзакций для таблицы. Таблица указана в папке "Таблицы " для lakehouse в области обозревателя данных.

Управляемые и внешние таблицы

В предыдущем примере кадр данных был сохранен в виде управляемой таблицы; это означает, что определение таблицы в хранилище метаданных и базовые файлы данных управляются средой выполнения Spark для Fabric lakehouse. Удаление таблицы также приведет к удалению базовых файлов из расположения хранилища таблиц для lakehouse.

Вы также можете создавать таблицы как внешние таблицы, в которых определение реляционной таблицы в хранилище метаданных сопоставляется с альтернативным расположением хранилища файлов. Например, следующий код создает внешнюю таблицу, для которой данные хранятся в папке в расположении хранилища файлов для lakehouse:

df.write.format("delta").saveAsTable("myexternaltable", path="Files/myexternaltable")

В этом примере определение таблицы создается в хранилище метаданных (поэтому таблица указана в пользовательском интерфейсе таблиц для lakehouse), но файлы данных Parquet и файлы журнала JSON для таблицы хранятся в расположении хранилища файлов (и будут отображаться в узле "Файлы" в области обозревателя Lakehouse).

Можно также указать полный путь для расположения хранилища, например:

df.write.format("delta").saveAsTable("myexternaltable", path="abfss://my_store_url..../myexternaltable")

Удаление внешней таблицы из хранилища метаданных Lakehouse не удаляет связанные файлы данных.

Создание метаданных таблицы

Хотя обычно создается таблица из существующих данных в кадре данных, часто возникают сценарии, в которых необходимо создать определение таблицы в хранилище метаданных, которые будут заполнены данными другими способами. Существует несколько способов достижения этой цели.

Использование API DeltaTableBuilder

API DeltaTableBuilder позволяет писать код Spark для создания таблицы на основе спецификаций. Например, следующий код создает таблицу с указанным именем и столбцами.

from delta.tables import *

DeltaTable.create(spark) \
  .tableName("products") \
  .addColumn("Productid", "INT") \
  .addColumn("ProductName", "STRING") \
  .addColumn("Category", "STRING") \
  .addColumn("Price", "FLOAT") \
  .execute()

Использование Spark SQL

Вы также можете создавать разностные таблицы с помощью инструкции Spark SQL CREATE TABLE , как показано в этом примере:

%%sql

CREATE TABLE salesorders
(
    Orderid INT NOT NULL,
    OrderDate TIMESTAMP NOT NULL,
    CustomerName STRING,
    SalesTotal FLOAT NOT NULL
)
USING DELTA

В предыдущем примере создается управляемая таблица. Вы также можете создать внешнюю таблицу, указав LOCATION параметр, как показано ниже:

%%sql

CREATE TABLE MyExternalTable
USING DELTA
LOCATION 'Files/mydata'

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

Сохранение данных в разностном формате

До сих пор вы узнали, как сохранить кадр данных в виде разностной таблицы (создание определения схемы таблицы в хранилище метаданных и файлов данных в разностном формате) и как создать определение таблицы (которое создает схему таблицы в хранилище метаданных без сохранения файлов данных). Третья возможность заключается в сохранении данных в разностном формате без создания определения таблицы в хранилище метаданных. Этот подход может быть полезен, если вы хотите сохранить результаты преобразований данных, выполненных в Spark в формате файла, по которому можно позже "наложить" определение таблицы или процесс непосредственно с помощью API разностного озера.

Например, следующий код PySpark сохраняет кадр данных в новом расположении папки в разностном формате:

delta_path = "Files/mydatatable"
df.write.format("delta").save(delta_path)

Разностные файлы сохраняются в формате Parquet в указанном пути и включают папку _delta_log , содержащую файлы журнала транзакций. Журналы транзакций записывают любые изменения данных, такие как обновления, внесенные во внешние таблицы или через API разностного озера.

Содержимое существующей папки можно заменить данными в кадре данных с помощью режима перезаписи , как показано ниже.

new_df.write.format("delta").mode("overwrite").save(delta_path)

Можно также добавить строки из кадра данных в существующую папку с помощью режима добавления :

new_rows_df.write.format("delta").mode("append").save(delta_path)

Совет

Если вы используете описанный здесь метод для сохранения кадра данных в расположении таблиц в lakehouse, Microsoft Fabric использует возможность автоматического обнаружения таблиц для создания соответствующих метаданных таблицы в хранилище метаданных.