Создание таблиц каталога

Завершено

Ранее мы рассмотрели экземпляры таблиц Delta Lake, созданные из кадров данных и измененные с помощью API Delta Lake. Таблицы Delta Lake также можно определить как таблицы каталога в хранилище метаданных Hive для пула Spark и работать с ними с помощью SQL.

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

Таблицы в каталоге Spark, включая таблицы Delta Lake, могут быть управляемыми или внешними, и важно понимать различие между этими типами таблиц.

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

Создание таблиц каталога

Существует несколько способов создания таблиц каталога.

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

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

# Save a dataframe as a managed table
df.write.format("delta").saveAsTable("MyManagedTable")

## specify a path option to save as an external table
df.write.format("delta").option("path", "/mydata").saveAsTable("MyExternalTable")

Создание таблицы каталога с помощью SQL

Таблицу каталога также можно создать с помощью инструкции SQL CREATE TABLE с предложением USING DELTA и необязательным параметром LOCATION для внешних таблиц. Вы можете выполнить инструкцию с помощью API SparkSQL, как показано в следующем примере:

spark.sql("CREATE TABLE MyExternalTable USING DELTA LOCATION '/mydata'")

Кроме того, для выполнения инструкции можно использовать встроенную поддержку SQL в Spark:

%%sql

CREATE TABLE MyExternalTable
USING DELTA
LOCATION '/mydata'

Совет

Инструкция CREATE TABLE возвращает ошибку, если таблица с указанным именем уже существует в каталоге. Чтобы устранить эту проблему, можно использовать инструкцию CREATE TABLE IF NOT EXISTS или инструкцию CREATE OR REPLACE TABLE.

Определение схемы таблицы

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

%%sql

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

При использовании Delta Lake применяются схемы таблиц. Все операции вставки и обновления должны соответствовать заданной допустимости значений NULL столбца и типам данных.

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

Для создания таблицы каталога можно использовать API DeltaTableBuilder (часть API Delta Lake), как показано в следующем примере:

from delta.tables import *

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

Аналогично оператору SQL CREATE TABLE, метод create возвращает ошибку, если таблица с указанным именем уже существует. Вы можете исключить это поведение, используя метод createIfNotExists и createOrReplace.

Использование таблиц каталога

Чтоб использовать таблицы каталога, такие как таблицы в любой реляционной базе данных на основе SQL, их можно запрашивать и управлять ими с помощью стандартных инструкций SQL. Например, следующий пример кода использует инструкцию SELECT для запроса к таблице ManagedSalesOrders:

%%sql

SELECT orderid, salestotal
FROM ManagedSalesOrders

Совет

Дополнительные сведения о работе с Delta Lake см. в документации по Delta Lake в пакете чтения и записи таблиц .