Установка dlt с ClickHouse
Чтобы установить библиотеку dlt с зависимостями для ClickHouse:
Руководство по настройке
1
Инициализируйте проект dlt
Начните с инициализации нового проектаdlt:Эта команда инициализирует ваш конвейер, где chess будет источником, а ClickHouse — пунктом назначения.
.dlt/secrets.toml и файл requirements для ClickHouse. Установить необходимые зависимости, указанные в файле requirements, можно следующей командой:pip install dlt[clickhouse], которая устанавливает библиотеку dlt и необходимые зависимости для работы с ClickHouse в качестве пункта назначения.2
Настройте базу данных ClickHouse
Чтобы загружать данные в ClickHouse, вам нужно создать базу данных ClickHouse. Вот общий порядок действий:- Вы можете использовать существующую базу данных ClickHouse или создать новую.
-
Чтобы создать новую базу данных, подключитесь к серверу ClickHouse с помощью инструмента командной строки
clickhouse-clientили любого SQL-клиента на ваш выбор. - Выполните следующие SQL-команды, чтобы создать новую базу данных, пользователя и выдать необходимые разрешения:
3
Добавьте учетные данные
Затем настройте учетные данные ClickHouse в файле.dlt/secrets.toml, как показано ниже:HTTP_PORTПараметр
http_port задает номер порта, который используется при подключении к HTTP-интерфейсу сервера ClickHouse. Он отличается от порта 9000, используемого по умолчанию для нативного TCP-протокола.Необходимо задать http_port, если вы не используете внешнее промежуточное хранилище (то есть не задаете параметр staging в своем конвейере). Это связано с тем, что встроенное локальное промежуточное хранилище ClickHouse использует библиотеку clickhouse content, которая взаимодействует с ClickHouse по HTTP.Убедитесь, что сервер ClickHouse настроен на прием HTTP-соединений на порту, указанном в http_port. Например, если вы задали http_port = 8443, ClickHouse должен прослушивать HTTP-запросы на порту 8443. Если вы используете внешнее промежуточное хранилище, параметр http_port можно не указывать, так как в этом случае clickhouse-connect использоваться не будет.clickhouse-driver. В этом случае указанные выше учетные данные будут выглядеть так:Режим записи
merge необходимо указать для ресурса primary_key. Подробнее об этом можно узнать здесь.
Append: Это режим по умолчанию. Он добавляет данные к уже имеющимся данным в пункте назначения, игнорируя поле primary_key.
Загрузка данных
- Для локальных файлов библиотека
clickhouse-connectиспользуется для прямой загрузки файлов в таблицы ClickHouse с помощью командыINSERT. - Для файлов в удалённом хранилище, таком как
S3,Google Cloud StorageилиAzure Blob Storage, используются табличные функции ClickHouse, такие как s3, gcs и azureBlobStorage, для чтения файлов и вставки данных в таблицы.
Наборы данных
Clickhouse не поддерживает несколько наборов данных в одной базе данных, тогда как dlt по ряду причин использует наборы данных. Чтобы Clickhouse работал с dlt, к именам таблиц, создаваемых dlt в вашей базе данных Clickhouse, будет добавляться префикс с именем набора данных, отделённый настраиваемым dataset_table_separator. Кроме того, будет создана специальная служебная таблица-индикатор, не содержащая данных, которая позволит dlt определять, какие виртуальные наборы данных уже существуют в пункте назначения Clickhouse.
Поддерживаемые форматы файлов
- jsonl — предпочтительный формат как для прямой загрузки, так и для промежуточного хранилища.
- parquet поддерживается как для прямой загрузки, так и для промежуточного хранилища.
clickhouse есть несколько особенностей по сравнению со стандартными SQL-пунктами назначения:
- В
ClickHouseесть экспериментальный тип данныхobject, но, как мы выяснили, он может вести себя непредсказуемо, поэтому пункт назначения dlt для ClickHouse загружает сложные типы данных в текстовый столбец. Если вам нужна эта возможность, свяжитесь с нашим сообществом в Slack, и мы рассмотрим возможность её добавления. ClickHouseне поддерживает тип данныхtime. Значения времени будут загружаться в столбецtext.ClickHouseне поддерживает тип данныхbinary. Вместо этого бинарные данные будут загружаться в столбецtext. При загрузке изjsonlбинарные данные будут представлены строкой base64, а при загрузке из parquet объектbinaryбудет преобразован вtext.ClickHouseпозволяет добавлять в уже заполненную таблицу столбцы, не допускающиеNULL.ClickHouseпри определённых условиях может давать ошибки округления при использовании типов данных float или double. Если ошибки округления недопустимы, обязательно используйте тип данных decimal. Например, загрузка значения 12.7001 в столбец double при формате файла загрузчикаjsonlпредсказуемо приведёт к ошибке округления.
Поддерживаемые подсказки для столбцов
primary_key— помечает столбец как часть первичного ключа. Эту подсказку можно задать для нескольких столбцов, чтобы создать составной первичный ключ.
Движок таблицы
ReplicatedMergeTree. Вы можете указать другой движок таблицы с помощью параметра table_engine_type в адаптере clickhouse:
merge_tree— создает таблицы на движкеMergeTreereplicated_merge_tree(по умолчанию) — создает таблицы на движкеReplicatedMergeTree
Поддержка промежуточного хранилища
dlt будет загружать файлы Parquet или jsonl в промежуточное хранилище и использовать табличные функции ClickHouse для загрузки данных напрямую из этих файлов.
Обратитесь к документации по файловой системе, чтобы узнать, как настроить учетные данные для промежуточных хранилищ:
Чтобы запустить конвейер с включенным промежуточным хранилищем:
Использование Google Cloud Storage в качестве промежуточного хранилища
- Создайте ключи HMAC для своего сервисного аккаунта GCS, следуя руководству Google Cloud.
-
Настройте ключи HMAC, а также
client_email,project_idиprivate_keyдля своего сервисного аккаунта в настройках пункта назначения ClickHouse вашего проекта dlt вconfig.toml:
bashgcp_access_key_id и gcp_secret_access_key), теперь также необходимо указать client_email, project_id и private_key для вашего сервисного аккаунта в разделе [destination.filesystem.credentials]. Это связано с тем, что поддержка промежуточного хранилища GCS сейчас реализована как временное обходное решение и пока не оптимизирована.
dlt передаст эти учетные данные в ClickHouse, который будет выполнять аутентификацию и доступ к GCS.
В настоящее время активно ведётся работа над тем, чтобы в будущем упростить и улучшить настройку промежуточного хранилища GCS для пункта назначения ClickHouse в dlt. Полноценная поддержка промежуточного хранилища GCS отслеживается в следующих задачах GitHub:
- Обеспечить, чтобы пункт назначения filesystem работал с GCS в режиме совместимости с S3
- Поддержка промежуточного хранилища Google Cloud Storage