Spec-Zone.ru › DuckDB

Расширения

Загрузка (динамических) расширений DuckDB-Wasm моделируется по образцу загрузки расширений обычного DuckDB, с некоторыми существенными отличиями из-за различий в платформе.

Формат

Расширения в DuckDB представляют собой двоичные файлы, которые загружаются динамически через dlopen. К двоичному файлу добавляется криптографическая подпись. Расширение в DuckDB-Wasm представляет собой обычный файл Wasm, который загружается динамически через dlopen Emscripten. К файлу Wasm добавляется криптографическая подпись в виде специального раздела WebAssembly, называемого duckdb_signature. Это гарантирует, что файл остаётся корректным файлом WebAssembly.

В настоящее время мы требуем, чтобы этот специальный раздел был последним, но в будущем это может быть изменено.

INSTALL и LOAD

Семантика INSTALL в родственных встраиваниях DuckDB заключается в извлечении, распаковке из gzip и сохранении данных в локальном диске. Семантика LOAD в родственных встраиваниях DuckDB заключается в (необязательной) проверке подписи и динамической загрузке двоичного файла вместе с основным двоичным файлом DuckDB.

В DuckDB-Wasm, INSTALL является пустой операцией, так как нет долговременного хранения между сеансами. Операция LOAD будет извлекать (и распаковывать на лету), проверять подписи и динамически загружать через реализацию Emscripten dlopen.

Автозагрузка

Автозагрузка, т.е. возможность для DuckDB добавлять функциональность расширения в режиме реального времени, включена по умолчанию в DuckDB-Wasm.

Список официально доступных расширений

Название расширения Описание Псевдонимы
autocomplete Добавляет поддержку автозаполнения в оболочке
excel Добавляет поддержку строк формата, похожих на Excel
fts Добавляет поддержку индексов полнотекстового поиска
icu Добавляет поддержку часовых поясов и сортировок с использованием библиотеки ICU
inet Добавляет поддержку типов и функций, связанных с IP-адресами
json Добавляет поддержку операций с JSON
parquet Добавляет поддержку чтения и записи файлов Parquet
sqlite GitHub Добавляет поддержку чтения файлов баз данных SQLite sqlite, sqlite3
sqlsmith
substrait GitHub Добавляет поддержку интеграции Substrait
tpcds Добавляет поддержку генерации и запросов данных TPC-DS
tpch Добавляет поддержку генерации и запросов данных TPC-H

WebAssembly — это, по сути, дополнительная платформа, и могут быть платформенные ограничения, которые не позволяют некоторым расширениям соответствовать своим родственным возможностям или выполнять их по-другому. Здесь будут описаны существенные различия для расширений, размещаемых в DuckDB.

HTTPFS

Расширение HTTPFS в настоящее время недоступно в DuckDB-Wasm. Возможности протокола https требуют дополнительного уровня, браузера, который добавляет как отличия, так и некоторые ограничения на то, что можно сделать из родственной среды.

Вместо этого DuckDB-Wasm имеет отдельную реализацию, которая в большинстве случаев взаимозаменяема, но не поддерживает все варианты использования (поскольку она должна соблюдать правила безопасности, налагаемые браузером, такие как CORS). Из-за этого ограничения CORS любые запросы данных, сделанные с помощью расширения HTTPFS, должны направляться на веб-сайты, которые разрешают (с использованием заголовков CORS) веб-сайту, на котором размещается экземпляр DuckDB-Wasm, доступ к этим данным. Сайт MDN является отличным ресурсом для получения дополнительной информации о CORS.

Подпись расширений

Как и в обычных расширениях DuckDB, расширения DuckDB-Wasm по умолчанию проверяются на LOAD для проверки подписи, чтобы убедиться, что расширение не было повреждено. Проверка подписи расширения может быть отключена с помощью опции конфигурации. Подпись — это свойство самого двоичного файла, поэтому копирование расширения DuckDB (например, для его размещения в другом месте) сохранит действительную подпись (например, для локального разработки).

Загрузка расширений DuckDB-Wasm

Официальные расширения DuckDB размещаются по адресу extensions.duckdb.org, и это также значение по умолчанию для опции default_extension_repository. При установке расширений будет сгенерирован соответствующий URL, который будет выглядеть так: extensions.duckdb.org/$duckdb_version_hash/$duckdb_platform/$name.duckdb_extension.gz.

Расширения DuckDB-Wasm загружаются только при загрузке, и URL будет выглядеть так: extensions.duckdb.org/duckdb-wasm/$duckdb_version_hash/$duckdb_platform/$name.duckdb_extension.wasm.

Обратите внимание, что к структуре папок добавляется дополнительный duckdb-wasm, и файл предоставляется как файл .wasm.

Расширения DuckDB-Wasm предоставляются в предварительно сжатом виде с использованием сжатия Brotli. При загрузке из браузера расширения будут прозрачно распакованы. Если вы хотите вручную загрузить расширение duckdb-wasm, вы можете использовать curl --compress extensions.duckdb.org/<...>/icu.duckdb_extension.wasm.

Размещение расширений из стороннего репозитория

Как и в обычном DuckDB, если вы используете SET custom_extension_repository = some.url.com, последующие попытки загрузки будут выполняться по адресу some.url.com/duckdb-wasm/$duckdb_version_hash/$duckdb_platform/$name.duckdb_extension.wasm.

Обратите внимание, что запросы GET к расширениям должны быть разрешены CORS для браузера, чтобы разрешить подключение.

Инструменты

DuckDB-Wasm и его расширения были скомпилированы с использованием последней версии инструментальной цепочки Emscripten.

© Copyright 2018–2024 Stichting DuckDB Foundation
Licensed under the MIT License.
https://duckdb.org/docs/api/wasm/extensions.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API