Выбор между SQL и Python

Конвейеры Lakeflow поддерживают интерфейсы SQL и Python для определения пакетных и потоковых конвейеров. Оба интерфейса создают один и тот же базовый граф потока данных, поэтому они обеспечивают эквивалентную функциональность для большинства обработки данных. Они отличаются гибкостью, специальными возможностями и охватом функций.

Используйте это руководство, чтобы решить, какой интерфейс следует использовать:

  • Если вы можете выразить логику в SQL, используйте SQL.
  • Если вам нужен программный контроль или функция только для Python, используйте Python.
  • Если вы более комфортно с Python, используйте Python. Он охватывает весь набор возможностей конвейера, так что одного знакомства с ним уже достаточно. Обратное неверно: SQL охватывает не все возможности, поэтому не стоит выбирать его только потому, что вы с ним знакомы.

Вы также можете объединить оба интерфейса в одном конвейере. См. Смешивание SQL и Python.

Когда следует использовать SQL?

SQL подходит, если вы хотите:

  • Понятные декларативные определения: чёткая логика, которую специалисты по данным и аналитики могут сопровождать.
  • Стандартные типы таблиц: конвейеры, созданные главным образом из потоковых таблиц и материализованных представлений.
  • Линейные цепочки преобразований: простая загрузка и преобразование данных, например поток из слоя Bronze в Silver, затем в Gold, без использования процедурной логики.
  • Автономные таблицы: автономные потоковые таблицы или материализованные представления, которые вы создаете в SQL.

Общие сведения о разработке конвейеров в SQL см. в статье "Разработка кода конвейеров Lakeflow с помощью SQL".

Когда следует использовать Python

Python хорошо подходит при необходимости:

  • Программный элемент управления: циклы, условные выражения и метапрограммирование для динамического создания определений конвейера.
  • Внешние библиотеки: Python пакеты, такие как faker илиboto3. См. Управление зависимостями Python для конвейеров.
  • Определяемые пользователем функции (UDFs): вы определяете определяемые пользователем функции в Python и может вызывать их как из Python, так и из исходных файлов SQL. См. скалярные пользовательские функции Python (UDF).
  • функции только Python:
    • create_auto_cdc_from_snapshot_flow() для применения захвата измененных данных из снимка базы данных.
    • create_sink() и foreach_batch_sink() для записи во внешние назначения потоковой передачи событий или назначения Delta.

Общие сведения о разработке конвейеров в Python см. в статье "Разработка кода конвейера с помощью Python".

Смешивание SQL и Python

Один конвейер может объединять определения SQL и Python, но каждый язык должен находиться в отдельном исходном файле. Например, вы можете определить бронзовые и серебряные таблицы в Python и золотые таблицы в SQL.

Доступность функций

В следующей таблице сравнивается, как каждый интерфейс поддерживает общие функции конвейера:

Функция SQL Python
потоковая таблица CREATE STREAMING TABLE create_streaming_table(), table()
материализованное представление CREATE MATERIALIZED VIEW materialized_view()
Материализованное представление, совместимое с Iceberg (общедоступная предварительная версия) CREATE MATERIALIZED VIEW ... USING ICEBERG. См. статью "Создание материализованного представления", совместимого с внешними читателями Iceberg. Не поддерживаются
Временное представление CREATE TEMPORARY VIEW temporary_view()
Закрытая таблица CREATE PRIVATE STREAMING TABLE, CREATE PRIVATE MATERIALIZED VIEW table(private=True)
Авто CDC AUTO CDC ... INTO create_auto_cdc_flow()
Автоматический CDC из снимка Не поддерживаются create_auto_cdc_from_snapshot_flow()
Flow CREATE FLOW append_flow()
Sink Не поддерживаются create_sink(), foreach_batch_sink()
Expectations CONSTRAINT ... EXPECT expect(), expect_or_drop(), expect_or_fail() и варианты expect_all

Обзор решения

Если вам нужно...

Goal Рекомендуемый интерфейс
Простота и удобочитаемость SQL
Быстрая декларативная настройка SQL
Автономная потоковая таблица или материализованное представление SQL
Логика условного или циклического цикла Python
Определяемые пользователем функции или внешние библиотеки Python Python
Автоматический CDC из снимка или приёмников Python
Полный программный контроль и модульность Python