ClickHouse クイックスタート
このページでは、オープンソースのClickHouseを自分のマシンにセットアップする方法を説明します。最速でClickHouseをデプロイし、専用のSQLコンソールにアクセスする方法は、ClickHouse Cloudを使用することです。
新しいユーザーは、$300の無料トライアルクレジットを受け取ることができます。サインアップはこちらからどうぞ。
1. バイナリのダウンロード
ClickHouseは、Linux、FreeBSD、macOSでネイティブに動作し、WindowsではWSLを通じて動作します。ClickHouseをローカルにダウンロードする最も簡単な方法は、以下のcurl
コマンドを実行することです。このコマンドは、オペレーティングシステムがサポートされているかどうかを確認し、適切なClickHouseバイナリをダウンロードします。
curl https://clickhouse.com/ | sh
2. サーバーの起動
ClickHouseサーバーを開始するには、次のコマンドを実行します。
./clickhouse server
3. クライアントの起動
clickhouse-client
を使用して、ClickHouseサービスに接続します。新しいターミナルを開き、clickhouse
バイナリが保存されているディレクトリに移動し、次のコマンドを実行してください。
./clickhouse client
ローカルホストで実行中のサービスに接続されると、笑顔の顔文字が表示されます。
my-host :)
4. テーブルの作成
CREATE TABLE
を使用して新しいテーブルを定義します。一般的なSQLのDDLコマンドがClickHouseでも機能しますが、ClickHouseのテーブルにはENGINE
句が必要です。ClickHouseのパフォーマンス向上効果を活用するために、MergeTree
を使用します。
CREATE TABLE my_first_table
(
user_id UInt32,
message String,
timestamp DateTime,
metric Float32
)
ENGINE = MergeTree
PRIMARY KEY (user_id, timestamp)
5. データの挿入
ClickHouseでは、INSERT INTO TABLE
コマンドを使うことができます。ただし、MergeTree
テーブルにデータを挿入するたびにパーツ(フォルダ)がストレージに作成されることを理解しておくことが重要です。パーツを最小限にするために、大量の行を一度にバルクインサートすることをお勧めします(数万行以上、または数百万行)。
INSERT INTO my_first_table (user_id, message, timestamp, metric) VALUES
(101, 'Hello, ClickHouse!', now(), -1.0 ),
(102, 'Insert a lot of rows per batch', yesterday(), 1.41421 ),
(102, 'Sort your data based on your commonly-used queries', today(), 2.718 ),
(101, 'Granules are the smallest chunks of data read', now() + 5, 3.14159 )
6. 新しいテーブルにクエリを実行
他のSQLデータベースと同様に、SELECT
クエリを書くことができます。
SELECT *
FROM my_first_table
ORDER BY timestamp
結果はすっきりしたテーブル形式で返されます。
┌─user_id─┬─message────────────────────────────────────────────┬───────────timestamp─┬──metric─┐
│ 102 │ Insert a lot of rows per batch │ 2022-03-21 00:00:00 │ 1.41421 │
│ 102 │ Sort your data based on your commonly-used queries │ 2022-03-22 00:00:00 │ 2.718 │
│ 101 │ Hello, ClickHouse! │ 2022-03-22 14:04:09 │ -1 │
│ 101 │ Granules are the smallest chunks of data read │ 2022-03-22 14:04:14 │ 3.14159 │
└─────────┴────────────────────────────────────────────────────┴─────────────────────┴─────────┘
4 rows in set. Elapsed: 0.008 sec.
7. 独自のデータを挿入
次のステップは、現在のデータをClickHouseに取り込むことです。データを取り込むためのテーブル関数や統合が多数あります。以下のタブにいくつかの例を示しますが、ClickHouseとの統合の長いリストを統合ガイドで確認できます。
- S3
- GCS
- Web
- ローカル
- PostgreSQL
- MySQL
- ODBC/JDBC
- メッセージキュー
- データレイク
- その他
s3
テーブル関数を使用して、S3からファイルを読み取ります。これはテーブル関数です。このため、結果は以下のようにテーブルとして使用できます。
SELECT
クエリのソースとして使用できます(これによりアドホッククエリを実行し、データをS3に残したままにできます)。- 結果のテーブルを
MergeTree
テーブルに挿入する(データをClickHouseに移行する準備ができたとき)。
アドホッククエリの例は以下の通りです。
SELECT
passenger_count,
avg(toFloat32(total_amount))
FROM s3(
'https://datasets-documentation.s3.eu-west-3.amazonaws.com/nyc-taxi/trips_0.gz',
'TabSeparatedWithNames'
)
GROUP BY passenger_count
ORDER BY passenger_count;
ClickHouseテーブルにデータを移行するには、次のようにします。nyc_taxi
がMergeTree
テーブルの場合:
INSERT INTO nyc_taxi
SELECT * FROM s3(
'https://datasets-documentation.s3.eu-west-3.amazonaws.com/nyc-taxi/trips_0.gz',
'TabSeparatedWithNames'
)
SETTINGS input_format_allow_errors_num=25000;
S3をClickHouseと一緒に使用する例と詳細については、AWS S3ドキュメントページのコレクションを参照してください。
AWS S3でのデータ読み取りに使用されるs3
テーブル関数は、Google Cloud Storageのファイルでも動作します。例えば:
SELECT
*
FROM s3(
'https://storage.googleapis.com/my-bucket/trips.parquet',
'MY_GCS_HMAC_KEY',
'MY_GCS_HMAC_SECRET_KEY',
'Parquet'
)
LIMIT 1000
詳細はs3
テーブル関数ページを参照してください。
url
テーブル関数は、Webからアクセス可能なファイルを読み取ります。
--デフォルトでは、ClickHouseはSSRF攻撃から保護するためにリダイレクトを防止します。
--以下のURLはリダイレクトを必要とするため、max_http_get_redirects > 0に設定する必要があります。
SET max_http_get_redirects=10;
SELECT *
FROM url(
'http://prod2.publicdata.landregistry.gov.uk.s3-website-eu-west-1.amazonaws.com/pp-complete.csv',
'CSV'
);
url
テーブル関数ページを参照して詳細をご覧ください。
file
テーブルエンジンを使用してローカルファイルを読み取ります。簡単のため、ファイルをuser_files
ディレクトリにコピーします(ClickHouseバイナリをダウンロードしたディレクトリにあります)。
DESCRIBE TABLE file('comments.tsv')
Query id: 8ca9b2f9-65a2-4982-954a-890de710a336
┌─name──────┬─type────────────────────┬─default_type─┬─default_expression─┬─comment─┬─codec_expression─┬─ttl_expression─┐
│ id │ Nullable(Int64) │ │ │ │ │ │
│ type │ Nullable(String) │ │ │ │ │ │
│ author │ Nullable(String) │ │ │ │ │ │
│ timestamp │ Nullable(DateTime64(9)) │ │ │ │ │ │
│ comment │ Nullable(String) │ │ │ │ │ │
│ children │ Array(Nullable(Int64)) │ │ │ │ │ │
└───────────┴─────────────────────────┴──────────────┴────────────────────┴─────────┴──────────────────┴────────────────┘
ClickHouseは、大量の行を分析してカラムの名前とデータ型を推測することに注意してください。 ClickHouseがファイル名からストレージタイプを決定できない場合、第2引数として指定できます。
SELECT count()
FROM file(
'comments.tsv',
'TabSeparatedWithNames'
)
詳細はfile
テーブル関数ページを確認してください。
postgresql
テーブル関数を使用して、PostgreSQLのテーブルからデータを読み取ります。
SELECT *
FROM
postgresql(
'localhost:5432',
'my_database',
'my_table',
'postgresql_user',
'password')
;
詳細はpostgresql
テーブル関数ページを参照してください。
mysql
テーブル関数を使用して、MySQLのテーブルからデータを読み取ります。
SELECT *
FROM
mysql(
'localhost:3306',
'my_database',
'my_table',
'postgresql_user',
'password')
;
詳細はmysql
テーブル関数ページを参照してください。
ClickHouseは、任意のODBCまたはJDBCデータソースからデータを読み取ることができます。
SELECT *
FROM
odbc(
'DSN=mysqlconn',
'my_database',
'my_table'
);
詳細はodbc
テーブル関数ページおよびjdbc
テーブル関数ページを参照してください。
メッセージキューは、対応するテーブルエンジンを使用して、ClickHouseにデータをストリーミングできます。
- Kafka:
Kafka
テーブルエンジンを使用してKafkaと統合 - Amazon MSK: Amazon Managed Streaming for Apache Kafka (MSK)と統合
- RabbitMQ:
RabbitMQ
テーブルエンジンを使用してRabbitMQと統合
ClickHouseは、以下のソースからデータを読み取るためのテーブル関数を備えています。
- Hadoop:
hdfs
テーブル関数を使用してApache Hadoopと統合 - Hudi:
hudi
テーブル関数を使用してS3の既存のApache Hudiテーブルを読み取り - Iceberg:
iceberg
テーブル関数を使用してS3の既存のApache Icebergテーブルを読み取り - DeltaLake:
deltaLake
テーブル関数を使用してS3の既存のDelta Lakeテーブルを読み取り
ClickHouseとの既存のフレームワークやデータソースを接続する方法については、ClickHouse統合リストを確認してください。
次のステップは?
- ClickHouseの主要な概念と機能をさらに詳しく探求する上級者向けチュートリアルをご覧ください
- ClickHouseアカデミーで無料のオンデマンドトレーニングコースを受講して学習を続けましょう
- サンプルデータセットと、それらを挿入する方法に関する説明があります
- データが外部ソースから来る場合、メッセージキュー、データベース、パイプラインなどへの接続方法について統合ガイドのコレクションを参照してください
- UI/BIビジュアライゼーションツールを使用している場合、ClickHouseにUIを接続するためのユーザーガイドを参照してください
- 主キーに関するユーザーガイドで、主キーについて知っておくべきすべての情報を確認し、定義方法を理解しましょう