Skip to content

0.15.0 (2025-12-08)

Удаления

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

Критичные изменения

Добавлены Iceberg(catalog=..., warehouse=...) обязательные опции (#391, #393, #394, #397, #399, #413).

В версии 0.14.0 мы реализовали очень простой коннектор Iceberg, настраиваемый через словарь:

iceberg = Iceberg(
    catalog_name="mycatalog",
    extra={
        "type": "rest",
        "uri": "https://catalog.company.com/rest",
        "rest.auth.type": "oauth2",
        "token": "jwt_token",
        "warehouse": "s3a://mybucket/",
        "io-impl": "org.apache.iceberg.aws.s3.S3FileIO",
        "s3.endpoint": "http://localhost:9010",
        "s3.access-key-id": "access_key",
        "s3.secret-access-key": "secret_key",
        "s3.path-style-access": "true",
        "client.region": "us-east-1",
    },
    spark=spark,
)

Теперь мы реализовали классы-обертки, позволяющие настраивать различные каталоги Iceberg:

REST Catalog with Bearer token auth
iceberg = Iceberg(
    catalog_name="mycatalog",
    catalog=Iceberg.RESTCatalog(
        url="https://catalog.company.com/rest",
        auth=Iceberg.RESTCatalog.BearerAuth(
            access_token="jwt_token",
        ),
    ),
    warehouse=...,
)
REST Catalog with OAuth2 ClientCredentials auth
iceberg = Iceberg(
    catalog_name="mycatalog",
    catalog=Iceberg.RESTCatalog(
        url="https://catalog.company.com/rest",
        auth=Iceberg.RESTCatalog.OAuth2ClientCredentials(
            client_id="my_client",
            client_secret="my_secret",
            oauth2_token_endpoint="http://keycloak.company.com/realms/my-realm/protocol/openid-connect/token",
            scopes=["catalog"],
        ),
    ),
    warehouse=...,
    spark=spark,
)

А также набор классов для конфигурирования хранилища:

S3 warehouse
iceberg = Iceberg(
    catalog_name="mycatalog",
    catalog=...,
    # using Iceberg AWS integration
    warehouse=Iceberg.S3Warehouse(
        path="/",
        bucket="mybucket",
        host="localhost",
        port=9010,
        protocol="http",
        path_style_access=True,
        access_key="access_key",
        secret_key="secret_key",
        region="us-east-1",
    ),
    spark=spark,
)
For Lakekeeper, Polaris, Gravitino
iceberg = Iceberg(
    catalog_name="mycatalog",
    catalog=...,
    # Delegate warehouse config to REST Catalog
    warehouse=Iceberg.DelegatedWarehouse(
        warehouse="some-warehouse",
        access_delegation="vended-credentials",
    ),
    spark=spark,
)
HDFS warehouse
iceberg = Iceberg(
    catalog_name="mycatalog",
    # store both data and metadata on HadoopFilesystem
    catalog=Iceberg.FilesystemCatalog(),
    warehouse=Iceberg.FilesystemWarehouse(
        path="/some/warehouse",
        connection=SparkHDFS(cluster="dwh"),
    ),
    spark=spark,
)

Использование классов вместо словарей обеспечивает автозавершение кода в IDE и позволяет повторно использовать одни и те же параметры подключения к каталогу для нескольких хранилищ данных.

Функции

  • Добавлена поддержка для Iceberg.WriteOptions(table_properties={}) (#401).

    В частности, теперь можно задать "location": "/some/warehouse/mytable" для таблицы.

  • Добавлена поддержка для Hive.WriteOptions(table_properties={}) (#412).

    В частности, теперь можно установить параметр "auto.purge": "true" для таблицы.

Улучшения

  • Разрешена установка SparkS3(path_style_access=True) вместо SparkS3(extra={"path.style.access": True) (#392).

    Это изменение улучшает автозавершение кода в IDE и делает более очевидным, что этот параметр важен для функциональности коннектора.

  • Добавлено предупреждение во время запуска о недостающих параметрах S3(region=...) и SparkS3(region=...) (#418).

Рекомендуется явно передавать этот параметр, чтобы избежать потенциальных ошибок доступа.

Спасибо @yabel

Зависимости

  • Обновлены JDBC коннекторы:

    • MySQL 9.4.09.5.0
    • MSSQL 13.2.013.2.1
    • Oracle 23.9.0.25.0723.26.0.0.0
    • Postgres 42.7.742.7.8
  • Добавлена поддержка Clickhouse.get_packages(package_version="0.9.3") (#407).

    Версии в диапазоне 0.8.0-0.9.2 не поддерживаются по следующим причинам: issue #2625.

Версии 0.9.3 и выше по-прежнему не являются версией по умолчанию из-за различных проблем с совместимостью и производительностью. Используйте их на свой страх и риск.

Документация

  • Задокументировано использование Greenplum коннектора со Spark master=k8s