Вопросы и ответыFrequently asked questions (FAQ)

Что такое разностная Lake?What is Delta Lake?

Дельта Lake — это уровень хранилища с открытым исходным кодом , обеспечивающий надежность озера данных.Delta Lake is an open source storage layer that brings reliability to data lakes. Delta Lake поддерживает транзакции ACID и масштабируемую обработку метаданных, а также позволяет объединить обработку потоковых данных и пакетную обработку.Delta Lake provides ACID transactions, scalable metadata handling, and unifies streaming and batch data processing. Delta Lake работает на базе существующего озера данных и полностью совместим со всеми API Apache Spark.Delta Lake runs on top of your existing data lake and is fully compatible with Apache Spark APIs.

Delta Lake на Azure Databricks позволяет изменять настройки Delta Lake в зависимости от шаблонов рабочих нагрузок, обеспечивая оптимизированные макеты и индексы для быстрых интерактивных запросов.Delta Lake on Azure Databricks allows you to configure Delta Lake based on your workload patterns and provides optimized layouts and indexes for fast interactive queries.

Дельта Lake располагается поверх Apache Spark.Delta Lake sits on top of Apache Spark. Этот формат и уровень вычислений помогают упростить создание конвейеров больших данных и повысить общую эффективность конвейеров.The format and the compute layer helps to simplify building big data pipelines and increase the overall efficiency of your pipelines.

В каком формате Delta Lake хранит данные?What format does Delta Lake use to store data?

В разностной версии Lake используются файлы Parquet с версиями для хранения данных в облачном хранилище.Delta Lake uses versioned Parquet files to store your data in your cloud storage. Помимо версий, Дельта Lake также хранит журнал транзакций, чтобы контролировать все фиксации, сделанные в таблице или каталоге хранилища BLOB-объектов для выполнения транзакций ACID.Apart from the versions, Delta Lake also stores a transaction log to keep track of all the commits made to the table or blob store directory to provide ACID transactions.

Как выполнять чтение и запись данных в Delta Lake?How can I read and write data with Delta Lake?

Вы можете использовать избранные Apache Spark API для чтения и записи данных с помощью разностной версии Lake.You can use your favorite Apache Spark APIs to read and write data with Delta Lake. См. статью чтение таблицы и запись в таблицу.See Read a table and Write to a table.

Где Delta Lake хранит данные?Where does Delta Lake store the data?

При записи данных можно указать расположение в облачном хранилище.When writing data, you can specify the location in your cloud storage. Дельта Lake сохраняет данные в этом расположении в формате Parquet.Delta Lake stores the data in that location in Parquet format.

Можно ли выполнять потоковую передачу непосредственно в таблицы Delta и из них?Can I stream data directly into and from Delta tables?

Да, можно использовать структурированную потоковую передачу для непосредственной записи данных в разностные таблицы и чтения из разностных таблиц.Yes, you can use Structured Streaming to directly write data into Delta tables and read from Delta tables. См. статью потоковая передача данных в разностные таблицы и потоковые данные из разностных таблиц.See Stream data into Delta tables and Stream data from Delta tables.

Поддерживает ли Delta Lake операции записи и (или) чтения через API DStream для потоковой передачи в Spark?Does Delta Lake support writes or reads using the Spark Streaming DStream API?

Дельта не поддерживает API DStream.Delta does not support the DStream API. Мы рекомендуем использовать потоковую передачу и чтение и запись.We recommend Table streaming reads and writes.

Могу ли я легко перенести свой код из Delta Lake на другие платформы Spark?When I use Delta Lake, will I be able to port my code to other Spark platforms easily?

Да.Yes. При использовании дельты Lake вы используете открытые Apache Spark интерфейсы API, чтобы вы могли легко перенести код на другие платформы Spark.When you use Delta Lake, you are using open Apache Spark APIs so you can easily port your code to other Spark platforms. Чтобы перенести код, замените delta format на parquet format.To port your code, replace delta format with parquet format.

Как таблицы Delta отличаются от таблиц Hive SerDe?How do Delta tables compare to Hive SerDe tables?

Управление разностными таблицами выполняется в более высокой степени.Delta tables are managed to a greater degree. В частности, существует несколько параметров Hive SerDe, которые от вашего имени не следует указывать вручную:In particular, there are several Hive SerDe parameters that Delta Lake manages on your behalf that you should never specify manually:

  • ROWFORMAT
  • SERDE
  • OUTPUTFORMAT ПЕРЕТАСКИВАНИ INPUTFORMATOUTPUTFORMAT AND INPUTFORMAT
  • COMPRESSION
  • STORED AS

Какие функции DDL и DML не поддерживаются в Delta Lake?What DDL and DML features does Delta Lake not support?

  • Неподдерживаемые функции DDL:Unsupported DDL features:
    • ANALYZE TABLE PARTITION
    • ALTER TABLE [ADD|DROP] PARTITION
    • ALTER TABLE RECOVER PARTITIONS
    • ALTER TABLE SET SERDEPROPERTIES
    • CREATE TABLE LIKE
    • INSERT OVERWRITE DIRECTORY
    • LOAD DATA
  • Неподдерживаемые функции DML:Unsupported DML features:
    • INSERT INTO [OVERWRITE] Таблица со статическими секциямиINSERT INTO [OVERWRITE] table with static partitions
    • INSERT OVERWRITE TABLE для таблицы с динамическими секциямиINSERT OVERWRITE TABLE for table with dynamic partitions
    • ГруппированиеBucketing
    • Указание схемы при чтении из таблицыSpecifying a schema when reading from a table
    • Указание целевых секций с помощью PARTITION (part_spec) в TRUNCATE TABLESpecifying target partitions using PARTITION (part_spec) in TRUNCATE TABLE

Поддерживает ли Delta Lake транзакции с несколькими таблицами?Does Delta Lake support multi-table transactions?

Дельта Lake не поддерживает транзакции с несколькими таблицами и внешние ключи.Delta Lake does not support multi-table transactions and foreign keys. Дельта Lake поддерживает транзакции на уровне таблицы .Delta Lake supports transactions at the table level.

Как изменить тип столбца?How can I change the type of a column?

Для изменения типа столбца или удаления столбца необходимо переписать таблицу.Changing a column’s type or dropping a column requires rewriting the table. Пример см. в разделе изменение типа столбца.For an example, see Change column type.

Что означает, что Delta Lake поддерживает операции записи в несколько кластеров ? What does it mean that Delta Lake supports multi-cluster writes?

Это означает, что дельта Lake блокируется, чтобы гарантировать, что запросы, выполняющие запись в таблицу из нескольких кластеров в то же время, не будут повредить таблицу.It means that Delta Lake does locking to make sure that queries writing to a table from multiple clusters at the same time won’t corrupt the table. Однако это не означает, что при наличии конфликта записи (например, при обновлении и удалении того же объекта) все они будут выполнены.However, it does not mean that if there is a write conflict (for example, update and delete the same thing) that they will both succeed. Вместо этого одна из операций записи не будет выполнена атомарно, и ошибка сообщит вам повторить операцию.Instead, one of writes will fail atomically and the error will tell you to retry the operation.

Можно ли изменить таблицу Delta из других рабочих областей?Can I modify a Delta table from different workspaces?

Да, можно одновременно изменить одну и ту же разностную таблицу из разных рабочих областей.Yes, you can concurrently modify the same Delta table from different workspaces. Более того, если один процесс записывает из рабочей области, читатели в других рабочих областях увидят единообразное представление.Moreover, if one process is writing from a workspace, readers in other workspaces will see a consistent view.

Можно ли работать с таблицами Delta за пределами Databricks Runtime?Can I access Delta tables outside of Databricks Runtime?

Есть два варианта, которые следует учитывать: внешние операции записи и внешние операции чтения.There are two cases to consider: external writes and external reads.

  • Внешние операции записи: Дельта Lake поддерживает дополнительные метаданные в форме журнала транзакций для включения транзакций ACID и изоляции моментальных снимков для читателей.External writes: Delta Lake maintains additional metadata in the form of a transaction log to enable ACID transactions and snapshot isolation for readers. Чтобы убедиться в правильности обновления журнала транзакций и выполнении правильных проверок, операции записи должны проходить через Databricks Runtime.In order to ensure the transaction log is updated correctly and the proper validations are performed, writes must go through Databricks Runtime.

  • Внешние операции чтения. разностные таблицы хранят данные в открытом формате (Parquet), позволяя другим средствам, которые понимают этот формат, считывать данные.External reads: Delta tables store data encoded in an open format (Parquet), allowing other tools that understand this format to read the data. Однако, поскольку другие средства не поддерживают журнал изменений транзакций, скорее всего, они будут неправильно считать устаревшие удаленные данные, незафиксированные данные или частичные результаты неудачных транзакций.However, since other tools do not support the Delta Lake transaction log, it is likely that they will incorrectly read stale deleted data, uncommitted data, or the partial results of failed transactions.

    В случаях, когда данные статичны (т. е. нет активных заданий, выполняющих запись в таблицу), можно использовать VACUUM с сохранением ZERO HOURS для очистки устаревших файлов Parquet, которые в данный момент не являются частью таблицы.In cases where the data is static (that is, there are no active jobs writing to the table), you can use VACUUM with a retention of ZERO HOURS to clean up any stale Parquet files that are not currently part of the table. Эта операция помещает файлы Parquet, представленные в DBFS, в целостное состояние таким образом, что теперь они могут считываться внешними средствами.This operation puts the Parquet files present in DBFS into a consistent state such that they can now be read by external tools.

    Однако Дельта Lake использует устаревшие моментальные снимки для следующих функций, что приведет к сбою при использовании VACUUM с нулевой скидкой при хранении:However, Delta Lake relies on stale snapshots for the following functionality, which will fail when using VACUUM with zero retention allowance:

    • Изоляция моментальных снимков для читателей. длительные задания будут по-прежнему считывать последовательный моментальный снимок с момента запуска заданий, даже если таблица была изменена одновременно.Snapshot isolation for readers: Long running jobs will continue to read a consistent snapshot from the moment the jobs started, even if the table is modified concurrently. Выполнение VACUUM с удержанием меньше, чем длина этих заданий, может привести к сбою в работе с FileNotFoundException .Running VACUUM with a retention less than length of these jobs can cause them to fail with a FileNotFoundException.
    • Потоковая передача из разностных таблиц: потоки считываются из исходных файлов, записанных в таблицу, чтобы обеспечить ровно одну обработку.Streaming from Delta tables: Streams read from the original files written into a table in order to ensure exactly once processing. При объединении OPTIMIZE с VACUUM нулевым сроком хранения может удалить эти файлы, прежде чем поток сможет их обрабатывать, что приведет к сбою.When combined with OPTIMIZE, VACUUM with zero retention can remove these files before the stream has time to processes them, causing it to fail.

    По этим модулям данные рекомендуют использовать этот метод только для статических наборов данных, которые должны считываться внешними средствами.For these reasons Databricks recommends using this technique only on static data sets that must be read by external tools.