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

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

# 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クエリを指します。

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

多くのユースケースでは、[アナリティクスクエリは「リアルタイム」である必要があります](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 はカラム指向データベースです。このようなシステムでは、テーブルはカラムの集合として格納され、各カラムの値が順番に連続して保存されます。このレイアウトでは、単一の行を取り出しにくくなります (行の値の間にギャップが生じるため) 。一方で、フィルタや集約などのカラム単位の操作は、行指向データベースに比べてはるかに高速になります。

この違いは、[実際の匿名化されたウェブアナリティクスデータ](/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-home-button/k6dUBbEUOmZKxz3v/images/column-oriented-example-query.png?fit=max&auto=format&n=k6dUBbEUOmZKxz3v&q=85&s=69fc7290ca4fb42e5ab0f32a29da855c" alt="カラム指向データベースでのクエリ例" size="lg" width="2496" height="1080" data-path="images/column-oriented-example-query.png" />

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

**行指向DBMS**

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

<Image img="https://mintcdn.com/private-7c7dfe99-home-button/WFuxNqAZKLNkIccm/images/row-oriented.gif?s=57c898944653285b8dfa2170f5ff5d53" 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-home-button/k6dUBbEUOmZKxz3v/images/column-oriented.gif?s=1925b57bf215c315768b9797d46a66d4" 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 は、[SQL ベースの宣言型クエリ言語](/ja/reference/home)をサポートしており、多くのケースで ANSI SQL 標準と同等です。サポートされるクエリ句には、[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)ガイドを参照してください。
