> ## Documentation Index
> Fetch the complete documentation index at: https://private-7c7dfe99-mintlify-8a08bda2.mintlify.site/llms.txt
> Use this file to discover all available pages before exploring further.

> ClickHouse® は、オンライン分析処理（OLAP）のためのカラム指向のSQLデータベース管理システム（DBMS）です。オープンソースソフトウェアとしても、Cloud サービスとしても利用できます。

# ClickHouseとは？

export const Image = ({img, alt, size}) => {
  return <Frame>
      <img src={img} alt={alt} />
    </Frame>;
};

ClickHouse® は、オンライン分析処理 (OLAP) 向けの高性能なカラム指向 SQL データベース管理システム (DBMS) です。[オープンソースソフトウェア](https://github.com/ClickHouse/ClickHouse) と [クラウド版](https://clickhouse.com/cloud) の両方で提供されています。

<div id="what-are-analytics">
  ## アナリティクスとは
</div>

アナリティクスは、OLAP (オンライン分析処理) とも呼ばれ、大規模なデータセットに対して複雑な計算 (例: 集計、文字列処理、算術演算) を行う SQL クエリを指します。

トランザクションクエリ (または OLTP: Online Transaction Processing) は、1 回のクエリで読み書きする行数がごく少ないためミリ秒単位で完了しますが、アナリティクスクエリでは通常、数十億から数兆行を処理します。

多くのユースケースでは、[アナリティクスクエリは「リアルタイム」である必要があります](https://clickhouse.com/engineering-resources/what-is-real-time-analytics)。つまり、1 秒未満で結果を返さなければなりません。

<div id="row-oriented-vs-column-oriented-storage">
  ## 行指向ストレージとカラム指向ストレージ
</div>

このレベルの性能は、適切なデータの"向き"によってのみ実現できます。

データベースは、データを[行指向またはカラム指向](https://clickhouse.com/engineering-resources/what-is-columnar-database)のいずれかの方式で格納します。

行指向データベースでは、テーブルの連続する行が順に1つずつ格納されます。このレイアウトでは、各行のカラム値がまとめて保存されるため、行をすばやく取り出せます。

ClickHouse はカラム指向データベースです。このようなシステムでは、テーブルはカラムの集合として格納され、つまり各カラムの値が順に1つずつ保存されます。このレイアウトでは、単一の行を取り出しにくくなります (行の値の間にギャップが生じるため) が、フィルタや集約などのカラム単位の処理は、行指向データベースよりもはるかに高速になります。

この違いは、[実際の匿名化された Web アナリティクスデータ](/ja/get-started/sample-datasets/anon-web-analytics-metrica) 1 億行に対して実行するクエリ例を見ると最もよくわかります。

```sql theme={null}
SELECT MobilePhoneModel, COUNT() AS c
FROM metrica.hits
WHERE
      RegionID = 229
  AND EventDate >= '2013-07-01'
  AND EventDate <= '2013-07-31'
  AND MobilePhone != 0
  AND MobilePhoneModel not in ['', 'iPad']
GROUP BY MobilePhoneModel
ORDER BY c DESC
LIMIT 8;
```

[ClickHouse SQL Playground でこのクエリを実行](https://sql.clickhouse.com?query=U0VMRUNUIE1vYmlsZVBob25lTW9kZWwsIENPVU5UKCkgQVMgYyAKRlJPTSBtZXRyaWNhLmhpdHMgCldIRVJFIAogICAgICBSZWdpb25JRCA9IDIyOSAKICBBTkQgRXZlbnREYXRlID49ICcyMDEzLTA3LTAxJyAKICBBTkQgRXZlbnREYXRlIDw9ICcyMDEzLTA3LTMxJyAKICBBTkQgTW9iaWxlUGhvbmUgIT0gMCAKICBBTkQgTW9iaWxlUGhvbmVNb2RlbCBub3QgaW4gWycnLCAnaVBhZCddIApHUk9VUCBCWSBNb2JpbGVQaG9uZU1vZGVsCk9SREVSIEJZIGMgREVTQyAKTElNSVQgODs\&chart=eyJ0eXBlIjoicGllIiwiY29uZmlnIjp7InhheGlzIjoiTW9iaWxlUGhvbmVNb2RlbCIsInlheGlzIjoiYyJ9fQ\&run_query=true)できます。このクエリは、存在する[100 個超のカラムのうちごく一部だけ](https://sql.clickhouse.com/?query=U0VMRUNUIG5hbWUKRlJPTSBzeXN0ZW0uY29sdW1ucwpXSEVSRSBkYXRhYmFzZSA9ICdtZXRyaWNhJyBBTkQgdGFibGUgPSAnaGl0cyc7\&tab=results\&run_query=true)を選択してフィルタリングし、結果を数ミリ秒で返します。

<Image img="https://mintcdn.com/private-7c7dfe99-mintlify-8a08bda2/GdqfNM6yrU6JpllL/images/column-oriented-example-query.png?fit=max&auto=format&n=GdqfNM6yrU6JpllL&q=85&s=b7aaf523d9a467fd54c52d905370304a" alt="カラム指向データベースでのクエリ例" size="lg" width="2496" height="1080" data-path="images/column-oriented-example-query.png" />

上の図の統計セクションを見るとわかるように、このクエリは 1 億行を 92 ミリ秒で処理しており、スループットは毎秒 10 億行超、データ転送量にすると毎秒 7 GB 弱に相当します。

**行指向 DBMS**

行指向データベースでは、上のクエリで既存のカラムのうちごく一部しか処理しない場合でも、システムは他のカラムのデータもディスクからメモリに読み込む必要があります。その理由は、データが [blocks](https://en.wikipedia.org/wiki/Block_\(data_storage\)) と呼ばれるチャンク (通常は 4 KB や 8 KB などの固定サイズ) 単位でディスクに保存されているためです。blocks は、ディスクからメモリに読み込まれる最小のデータ単位です。アプリケーションやデータベースがデータを要求すると、オペレーティングシステムのディスク I/O サブシステムが必要な blocks をディスクから読み取ります。block の一部だけが必要な場合でも、メモリには block 全体が読み込まれます (これはディスクおよびファイルシステムの設計によるものです) 。

<Image img="https://mintcdn.com/private-7c7dfe99-mintlify-8a08bda2/4BoTWlcqctvAiYpK/images/row-oriented.gif?s=8196d54e5624bb8acd0c951532163f36" alt="行指向データベースの構造" size="lg" width="630" height="258" data-path="images/row-oriented.gif" />

**カラム指向 DBMS**

各カラムの値はディスク上に順番に連続して格納されるため、上記のクエリを実行しても不要なデータは読み込まれません。
また、ディスクからメモリへのブロック単位での保存と転送は、分析クエリのデータアクセスパターンに適しているため、クエリに必要なカラムだけがディスクから読み込まれ、使われないデータに対する不要な I/O を避けられます。これは、無関係なカラムを含む行全体を読み込む行ベースのストレージと比べて、[はるかに高速です](https://benchmark.clickhouse.com/)。

<Image img="https://mintcdn.com/private-7c7dfe99-mintlify-8a08bda2/GdqfNM6yrU6JpllL/images/column-oriented.gif?s=c550fb0d398e9108bf0ab3e43e434715" alt="カラム指向データベースの構造" size="lg" width="630" height="258" data-path="images/column-oriented.gif" />

<div id="data-replication-and-integrity">
  ## データのレプリケーションと整合性
</div>

ClickHouse は、データを複数のノードに冗長保存するために、非同期のマルチマスター レプリケーション方式を採用しています。利用可能な任意のレプリカに書き込まれると、残りのレプリカはバックグラウンドでそのコピーを取得します。これにより、各レプリカで同一のデータが維持されます。ほとんどの障害からの復旧は自動的に行われ、複雑なケースでは半自動的に行われます。

<div id="role-based-access-control">
  ## ロールベースのアクセス制御
</div>

ClickHouse は、SQL クエリによるユーザーアカウント管理を実装しており、ANSI SQL 標準や一般的なリレーショナルデータベース管理システムで採用されているものと同様の、ロールベースのアクセス制御を設定できます。

<div id="sql-support">
  ## SQL サポート
</div>

ClickHouse は、多くのケースで ANSI SQL 標準と同一の [SQL ベースの宣言型クエリ言語](/ja/reference/home)をサポートしています。サポートされているクエリの構成要素には、[GROUP BY](/ja/reference/statements/select/group-by)、[ORDER BY](/ja/reference/statements/select/order-by)、[FROM](/ja/reference/statements/select/from) 内のサブクエリ、[JOIN](/ja/reference/statements/select/join) 句、[IN](/ja/reference/statements/in) 演算子、[window functions](/ja/reference/functions/window-functions)、およびスカラーサブクエリが含まれます。

<div id="approximate-calculation">
  ## 近似計算
</div>

ClickHouse には、精度をある程度犠牲にしてパフォーマンスを向上させる方法があります。たとえば、一部の集約関数では、一意な値の数、中央値、分位点を近似的に計算できます。また、データのサンプルに対してクエリを実行し、近似結果をすばやく求めることもできます。さらに、集計はすべてのキーではなく、限られた数のキーに対して実行することもできます。キーの分布にどの程度偏りがあるかによっては、これにより、厳密な計算よりもはるかに少ないリソースで、十分に正確な結果を得られる場合があります。

<div id="adaptive-join-algorithms">
  ## 適応型 JOIN アルゴリズム
</div>

ClickHouse は JOIN アルゴリズムを適応的に選択します。まず高速なハッシュ結合を使用し、大きなテーブルが複数ある場合はマージ結合に切り替えます。

<div id="superior-query-performance">
  ## 優れたクエリパフォーマンス
</div>

ClickHouseは、極めて高速なクエリパフォーマンスで広く知られています。
ClickHouseがこれほど高速な理由については、[ClickHouseはなぜ高速なのか？](/ja/get-started/about/why-clickhouse-is-so-fast)ガイドをご覧ください。
