Improve primary keys of clickhouse tables

オープン
#410 コメント 1 件 リアクション 0 件 担当者 0 名 GitHub で見る

メンテナーはふだん 1 日以内に返信

まだ誰も着手していません。

評価

難易度
5/5
見積もり時間
1週間以上
初心者へのやさしさ
35/100
issue の種類
リファクタリング
明瞭さ
説明が足りない
活発さ
静か
技術スタック
clickhouse, sql

調査の方向性

まず、issue に示されている obs_web テーブルと analysis_web_measurement テーブルの ClickHouse 定義を探します。現在の PRIMARY KEY と ORDER BY の選択を確認し、一覧にあるフィルター用の置き換えキーを決定して、新しいテーブルへのデータコピーを計画します。置き換えテーブルにデータが投入され、measurement_start_time、probe_cc、probe_asn、domain に対する一般的なクエリで実質的なフルスキャンが不要になれば完了です。

索引モデルが issue の本文から書いたものです。

説明

Some of the DB tables could have their PRIMARY KEYs changed to improve query performance.

For example the PRIMARY KEY of the obs_web table is this:

ENGINE = ReplicatedReplacingMergeTree('/clickhouse/{cluster}/tables/ooni/obs_web_repl/{shard}', '{replica}')
PARTITION BY concat(substring(bucket_date, 1, 4), substring(bucket_date, 6, 2))
PRIMARY KEY (measurement_uid, observation_idx)

while the analysis table is this:

ENGINE = ReplicatedReplacingMergeTree('/clickhouse/{cluster}/tables/ooni/analysis_web_measurement/{shard}', '{replica}')
PARTITION BY substring(measurement_uid, 1, 6)
PRIMARY KEY measurement_uid
ORDER BY (measurement_uid, measurement_start_time, probe_cc, probe_asn, domain)

What this means is that it's triggering very large scans (effectively a full scan), when performing very common filtering operations over the measurement_start_time, probe_cc, probe_asn and domain.

Unfortunately it's not possible to change these with an ALTER query, so instead we are going to have to create the new table and copy the data over.

主要言語
HCL
スター
4
フォーク
16
平均マージ
1日 10時間
マージ済み PR(30日)
13

環境構築

このプロジェクトには開発コンテナ、Dockerfile、コントリビューションガイドがありません。まず README を読み、一般的な手順ははじめてのコントリビューションガイドを参照してください。

はじめの一歩

  1. issue を最後まで読み、次にプロジェクトのコントリビューションガイドを読みます。
  2. 着手することを issue にコメントします — 二人が同じ作業をするのを防げます。
  3. リポジトリをフォークし、ブランチを切って変更します。
  4. issue 番号を参照したプルリクエストを送ります。

ooni/devops のほかの issue

ooni/devops の issue をすべて見る

似ている issue

Databases の issue をもっと見る

新しい issue をメールで受け取る

初心者向けの GitHub issue を短くまとめたダイジェスト。