Сколько времени занимает экспорт данных в ClickHouse?
| Таблица | Строки | Экспортировано файлов | Объём данных | Экспорт из BigQuery | Время слотов | Импорт в ClickHouse |
|---|---|---|---|---|---|---|
| blocks | 16,569,489 | 73 | 14.53GB | 23 сек | 37 мин | 15.4 сек |
| transactions | 1,864,514,414 | 5169 | 957GB | 1 мин 38 сек | 1 дн 8 ч | 18 мин 5 сек |
| traces | 6,325,819,306 | 17,985 | 2.896TB | 5 мин 46 сек | 5 дн 19 ч | 34 мин 55 сек |
| contracts | 57,225,837 | 350 | 45.35GB | 16 сек | 1 ч 51 мин | 39.4 сек |
| Итого | 8.26 млрд | 23,577 | 3.982TB | 8 мин 3 сек | > 6 дн 5 ч | 53 мин 45 сек |
Экспорт данных таблицы в GCS
На этом шаге мы используем рабочее пространство SQL в BigQuery для выполнения SQL-команд. Ниже показано, как экспортировать таблицу BigQuerymytable в бакет GCS с помощью оператора EXPORT DATA.uri также используется символ *. Это гарантирует, что результат будет разбит на несколько файлов с численно возрастающим суффиксом, если объём экспорта превысит 1 ГБ данных.У этого подхода есть ряд преимуществ:- Google позволяет бесплатно экспортировать в GCS до 50 ТБ в день. Пользователи платят только за хранение в GCS.
- При экспорте автоматически создаётся несколько файлов, при этом размер каждого не превышает 1 ГБ данных таблицы. Это полезно для ClickHouse, поскольку позволяет распараллелить импорт.
- Parquet как столбцово-ориентированный формат лучше подходит для обмена данными, поскольку он изначально сжат и позволяет BigQuery быстрее выполнять экспорт, а ClickHouse — запросы
Импорт данных из GCS в ClickHouse
После завершения экспорта эти данные можно импортировать в таблицу ClickHouse. Для выполнения приведённых ниже команд можно использовать консоль ClickHouse SQL илиclickhouse-client.Сначала необходимо создать таблицу в ClickHouse:parallel_distributed_insert_select, если в вашем кластере несколько реплик ClickHouse, чтобы ускорить экспорт. Если у вас только один узел ClickHouse, этот шаг можно пропустить:INSERT INTO SELECT, которая добавляет данные в таблицу на основе результатов запроса SELECT.Чтобы получить данные для INSERT, можно использовать функцию s3Cluster и загрузить данные из нашего GCS-бакета, поскольку GCS совместим с Amazon S3. Если у вас только один узел ClickHouse, вместо функции s3Cluster можно использовать табличную функцию s3.ACCESS_ID и SECRET, используемые в приведённом выше запросе, — это ваши HMAC-ключи, связанные с вашим бакетом GCS.Используйте
ifNull при экспорте столбцов с типом NullableВ приведённом выше запросе мы используем функцию ifNull со столбцом some_text, чтобы вставить данные в таблицу ClickHouse, подставляя значение по умолчанию. Вы также можете сделать столбцы в ClickHouse Nullable, но это не рекомендуется, так как это может негативно сказаться на производительности.В качестве альтернативы можно задать SET input_format_null_as_default=1, и любые отсутствующие значения или значения NULL будут заменяться значениями по умолчанию для соответствующих столбцов, если такие значения заданы.Проверка успешного экспорта данных
Чтобы проверить, что данные были успешно вставлены, просто выполните запросSELECT к новой таблице: