clickhouse-local
clickhouse-local を使うときと ClickHouse を使うとき
clickhouse-local は、フル機能のデータベースサーバーをインストールすることなく、SQL を使ってローカルおよびリモートファイルに対して高速な処理を行いたい開発者に最適な、使いやすい ClickHouse のバージョンです。clickhouse-local を使用すると、開発者はコマンドラインから直接 ClickHouse SQL dialect を用いた SQL コマンドを実行でき、フルの ClickHouse をインストールすることなく ClickHouse の機能にシンプルかつ効率的にアクセスできます。clickhouse-local の主な利点の 1 つは、clickhouse-client をインストールする際に同梱されていることです。これにより、複雑なインストール手順なしに、開発者はすぐに clickhouse-local を使い始めることができます。
clickhouse-local は、開発およびテスト用途、ならびにファイル処理に非常に有用なツールですが、エンドユーザーやアプリケーションに対するサービス提供には適していません。これらのシナリオでは、オープンソースの ClickHouse を使用することを推奨します。ClickHouse は、大規模な分析ワークロードを処理するように設計された強力な OLAP データベースです。大規模なデータセットに対する複雑なクエリを高速かつ効率的に処理できるため、高パフォーマンスが重要となる本番環境に最適です。加えて ClickHouse は、レプリケーション、シャーディング、高可用性など、大規模データセットの処理やアプリケーション提供に必要となるスケールアウトのための幅広い機能を提供します。より大きなデータセットを扱う必要がある場合や、エンドユーザーまたはアプリケーションに提供する必要がある場合は、clickhouse-local ではなくオープンソースの ClickHouse を使用することを推奨します。
以下のドキュメントでは、ローカルファイルのクエリ や S3 上の Parquet ファイルの読み取り など、clickhouse-local の代表的なユースケースを示していますので、参照してください。
clickhouse-local をダウンロードする
clickhouse-local は、ClickHouse サーバーや clickhouse-client と同じ clickhouse バイナリで実行されます。最新バージョンをダウンロードする最も簡単な方法は、次のコマンドを使用することです。
ダウンロードしたばかりのバイナリは、さまざまな ClickHouse ツールやユーティリティを実行できます。ClickHouse をデータベースサーバーとして実行したい場合は、クイックスタートを参照してください。
SQL を使用してファイル内のデータをクエリする
clickhouse-local の一般的な用途は、データをテーブルに挿入することなく、ファイルに対してアドホックなクエリを実行することです。clickhouse-local はファイルから一時テーブルへデータをストリーミングし、その一時テーブルに対して SQL を実行できます。
ファイルが clickhouse-local と同じマシン上にある場合は、読み込むファイルを指定するだけで構いません。次の reviews.tsv ファイルには、Amazon の商品レビューのサンプルが含まれています。
このコマンドは、次のコマンドのショートカットです:
ClickHouse は、ファイル名の拡張子からそのファイルがタブ区切り形式であることを認識します。形式を明示的に指定する必要がある場合は、単に 多様な ClickHouse の入力フォーマット のいずれかを指定してください。
file テーブル関数はテーブルを作成し、DESCRIBE を使って推論されたスキーマを確認できます。
評価が最も高い製品を探してみましょう。
AWS S3 内の Parquet ファイルをクエリする
S3 にファイルがある場合は、clickhouse-local と s3 テーブル関数を使用して、データを ClickHouse のテーブルに挿入せずに、そのファイルをその場でクエリできます。ここでは、英国で売却された不動産の住宅価格を含む house_0.parquet という名前のファイルが、パブリックなバケット内にあります。このファイルに何行含まれているかを確認してみましょう。
このファイルには 270万行あります:
ClickHouse がファイルからどのようなスキーマを推論したかを確認しておくと便利です。
最も高額な地域を見てみましょう。
ファイルを ClickHouse に取り込む準備ができたら、ClickHouse サーバーを起動して、file および s3 テーブル関数の結果を MergeTree テーブルに挿入します。詳細については Quick Start を参照してください。
フォーマット変換
clickhouse-local を使用して、異なるフォーマット間でデータを変換できます。例:
フォーマットはファイル拡張子から自動検出されます:
ショートカットとして、--copy 引数を使って次のように書くこともできます:
使用方法
デフォルトでは、clickhouse-local は同一ホスト上の ClickHouse サーバーのデータにアクセスでき、サーバーの設定には依存しません。--config-file 引数を使用してサーバーの設定を読み込むこともできます。一時データ用には、デフォルトで一意の一時データディレクトリが作成されます。
基本的な使用方法 (Linux) :
基本的な使い方 (Mac) :
clickhouse-local は、Windows では WSL2 経由でも利用できます。
引数:
-S,--structure— 入力データのテーブル構造。--input-format— 入力フォーマット。デフォルトはTSV。-F,--file— データのパス。デフォルトはstdin。-q,--query— 実行するクエリ (区切りは;) 。--queryは複数回指定可能です (例:--query "SELECT 1" --query "SELECT 2") 。--queries-fileと同時には使用できません。--queries-file- 実行するクエリを含むファイルパス。--queries-fileは複数回指定可能です (例:--query queries1.sql --query queries2.sql) 。--queryと同時には使用できません。--multiquery, -n– 指定した場合、セミコロン区切りの複数クエリを--queryオプションの後に列挙できます。利便性のため、--queryを省略して--multiqueryの後にクエリを直接渡すことも可能です。-N,--table— 出力データを書き込むテーブル名。デフォルトはtable。-f,--format,--output-format— 出力フォーマット。デフォルトはTSV。-d,--database— デフォルトデータベース。デフォルトは_local。--stacktrace— 例外発生時にデバッグ出力をダンプするかどうか。--echo— 実行前にクエリを表示します。--verbose— クエリ実行の詳細をより多く出力します。--logger.console— コンソールにログを出力します。--logger.log— ログファイル名。--logger.level— ログレベル。--ignore-error— クエリが失敗しても処理を停止しません。-c,--config-file— ClickHouse サーバーと同じ形式の設定ファイルへのパス。デフォルトでは設定は空です。--no-system-tables— system テーブルをアタッチしません。--help—clickhouse-localの引数リファレンスを表示します。-V,--version— バージョン情報を表示して終了します。
また、--config-file の代わりによく用いられる、各 ClickHouse 設定変数に対応する引数も用意されています。
コマンド
LS コマンド
clickhouse-local がアクセスできる現在の作業ディレクトリ内のすべてのファイルを一覧表示します。
次のように対話型モードで実行できます:
引数 -q を使用して、クエリとして実行することもできます:
CLEAR コマンド
ターミナル画面をクリアします (Linux の clear コマンドや、多くのターミナルでの Ctrl+L と同様です) 。これはクライアント側の動作であり、SQL エンジンには送信されません。
clickhouse-local では、このメタコマンドは 対話型モード、および -q と --queries-file の入力で認識されます (-q と同じクライアント側の経路で処理され、考え方としては ls と同様です) 。そのため、単独の clear を入力しても UNKNOWN_IDENTIFIER エラーにはなりません。一方、リモートの clickhouse-client --queries-file の動作は変わりません。ファイルの内容は SQL としてのみ実行されます (テキストレベルのメタコマンドはサポートされません) 。
clickhouse-client では、対話型モードでのみ認識されます。-q またはクエリファイルでは、clear は引き続き SQL として解析されるため、自動化では、タイプミスが無言の空操作になるのではなく、従来どおりエラーになります。
サポートされる形式: clear、CLEAR、/clear (末尾の ; は付いていても無視されます) 。標準出力がターミナルでない場合 (たとえば出力をパイプしている場合) 、認識される場面ではこのメタコマンドは受け付けられますが、制御シーケンスは出力されません。
clickhouse-local と -q を使用する場合:
例
先ほどの例は次と同じです。
stdin や --file 引数を使う必要はなく、file テーブル関数 を使えば任意の数のファイルを開けます。
では、各 Unix ユーザーごとのメモリ使用量を出力してみましょう。