This guide is compatible with ClickHouse Cloud and for self-hosted ClickHouse v23.5+. This guide shows how to migrate data from BigQuery to ClickHouse. We first export a table to Google’s object store (GCS) and then import that data into ClickHouse Cloud. These steps need to be repeated for each table you wish to export from BigQuery to ClickHouse.Documentation Index
Fetch the complete documentation index at: https://private-7c7dfe99-page-updates.mintlify.app/llms.txt
Use this file to discover all available pages before exploring further.
How long will exporting data to ClickHouse take?
Exporting data from BigQuery to ClickHouse is dependent on the size of your dataset. As a comparison, it takes about an hour to export the 4TB public Ethereum dataset from BigQuery to ClickHouse using this guide.| Table | Rows | Files Exported | Data Size | BigQuery Export | Slot Time | ClickHouse Import |
|---|---|---|---|---|---|---|
| blocks | 16,569,489 | 73 | 14.53GB | 23 secs | 37 min | 15.4 secs |
| transactions | 1,864,514,414 | 5169 | 957GB | 1 min 38 sec | 1 day 8hrs | 18 mins 5 secs |
| traces | 6,325,819,306 | 17,985 | 2.896TB | 5 min 46 sec | 5 days 19 hr | 34 mins 55 secs |
| contracts | 57,225,837 | 350 | 45.35GB | 16 sec | 1 hr 51 min | 39.4 secs |
| Total | 8.26 billion | 23,577 | 3.982TB | 8 min 3 sec | > 6 days 5 hrs | 53 mins 45 secs |
Export table data to GCS
In this step, we utilize the BigQuery SQL workspace to execute our SQL commands. Below, we export a BigQuery table namedmytable to a GCS bucket using the EXPORT DATA statement.* character in our uri parameter. This ensures the output is sharded into multiple files, with a numerically increasing suffix, should the export exceed 1GB of data.This approach has a number of advantages:- Google allows up to 50TB per day to be exported to GCS for free. Users only pay for GCS storage.
- Exports produce multiple files automatically, limiting each to a maximum of 1GB of table data. This is beneficial to ClickHouse since it allows imports to be parallelized.
- Parquet, as a column-oriented format, represents a better interchange format since it is inherently compressed and faster for BigQuery to export and ClickHouse to query
Importing data into ClickHouse from GCS
Once the export is complete, we can import this data into a ClickHouse table. You can use the ClickHouse SQL console orclickhouse-client to execute the commands below.You must first create your table in ClickHouse:parallel_distributed_insert_select if you have multiple ClickHouse replicas in your cluster to speed up our export. If you only have one ClickHouse node, you can skip this step:INSERT INTO SELECT command, which inserts data into a table based on the results from a SELECT query.To retrieve the data to INSERT, we can use the s3Cluster function to retrieve data from our GCS bucket since GCS is interoperable with Amazon S3. If you only have one ClickHouse node, you can use the s3 table function instead of the s3Cluster function.ACCESS_ID and SECRET used in the above query is your HMAC key associated with your GCS bucket.Use
ifNull when exporting nullable columnsIn the above query, we use the ifNull function with the some_text column to insert data into our ClickHouse table with a default value. You can also make your columns in ClickHouse Nullable, but this isn’t recommended as it may affect negatively performance.Alternatively, you can SET input_format_null_as_default=1 and any missing or NULL values will be replaced by default values for their respective columns, if those defaults are specified.Testing successful data export
To test whether your data was properly inserted, simply run aSELECT query on your new table: