Real-Time Market AnalyticsClickHouse Workshops

03 データをロードする — 2つの方法

同じ2,650万ティックを2回ロードします: 本番で使うマネージドパイプラインの ClickPipes、そして s3() のワンライナー。そしてどちらをいつ使うか。

データは パブリック な S3 バケットに置かれているため、キーや認証情報は一切不要 です。URL を 指定するだけです。転送は S3 から ClickHouse へサーバーサイドで実行されるので、2,650万行が自分の ノート PC を通ることも、会場の Wi-Fi に依存することもありません。

同じ2,650万ティックを 2通りの方法 でロードして、両方を体験します。方法1は ClickPipes、本番で 使うマネージドなクリック操作のパイプラインです。方法2は SQL 1行 — デモ中に最速でデータを入れる 方法です。順番に進めてください。間に TRUNCATE を挟むことで行数が二重にならずに済みます。

方法1 — ClickPipes、マネージドな本番向けのやり方

ClickPipes はフルマネージドの取り込みサービスです。オブジェクトストレージやストリームを指定すれば、 コネクタを自作せずにロードを続けてくれます。以下が全体の流れです。

  1. 左メニューで Data sources をクリックし、Create ClickPipe ボタンを押します。

Create ClickPipe ボタンが強調表示された ClickHouse Cloud の Data sources ページ

Data sources には「Upload file」や「Add sample data」もあります。

  1. Select the data source で Amazon S3(Popular リストの先頭)を選びます。

Amazon S3 が Popular の先頭に表示された Select the data source ステップ

  1. Setup your ClickPipe connection で任意の name を付け、 Authentication method → Public(バケットはパブリックです)に設定し、 S3 file path に次を貼り付けます:
https://partner-workshop.s3.ap-southeast-1.amazonaws.com/fx/ticks.parquet

Continuous ingestion はオフのままにします(今回は単発のファイルです)。そして Incoming data → をクリックします。

Setup your ClickPipe connection: name、Public に設定された Authentication method、入力済みの S3 file path

  1. Incoming data では、ClickHouse が一致するファイルをプレビューします。 fx/ticks.parquet が 158.43 MB と表示されます。File type → Parquet を確認し、 compression は Detect automatically のままにして、Parse information → をクリックします。

File type が Parquet に設定され、fx/ticks.parquet が 158.43 MB でプレビューされた Incoming data ステップ

  1. Parse information では、ClickHouse がサンプル行をプレビューしてカラムを検出します。 Upload data to で Existing table を選び、テーブルがある Database(通常は default)を選択し、Table → forex に設定します。ソース側のフィールド(datetime、 bid、ask、base、quote)が対応するカラムに揃っているか確認してください。通常は自動で マッピングされます。追加の _path / _file / _size フィールドは未マッピングのままにします。 そして Details and settings → をクリックします。

Parse information ステップ: Upload data to は Existing table、database と forex テーブルを選択、ソースフィールドがカラムにマッピングされている

スクリーンショットには発表者の techthai データベースが写っていますが、自分のテーブルがある データベースを使ってください。

  1. Details and settings では Permissions をデフォルトのままにして(ClickPipes が専用の 書き込みユーザーを作成します)、Create ClickPipe をクリックします。

Permissions と Create ClickPipe ボタンが表示された Details and settings ステップ

Spark ジョブもカスタムローダーも不要です。

  1. Data sources に戻り、作成した ClickPipe が表示されます。数秒で Status が Completed になり、Records に 26,488,218 と表示されます。オブジェクトストレージから すべてのティックがロードされました。

ステータスが Completed、レコード数が 26,488,218 の ClickPipe が表示された Data sources 一覧

ロード結果を確認します。 SQL Console で次を実行してください:

-- expect 26,488,218 ticks across 12 pairs
SELECT count() AS ticks, uniqExact(concat(base,'/',quote)) AS pairs FROM forex;

表示されるはずの結果

ticks = 26,488,218、pairs = 12。オブジェクトストレージから約2,650万行が数秒でロードされ ました。

方法2 — s3() のワンライナー、デモでは最速

次に、まったく同じデータを SQL ステートメント1本で、パブリックファイルから直接ロードします。 まず件数が二重にならないよう テーブルを空にして、それから挿入します:

-- clear the rows ClickPipes just loaded so we don't double up
TRUNCATE TABLE forex;

-- load all ~26.5M ticks from the public S3 file in one line (server-side)
INSERT INTO forex
SELECT * FROM s3('https://partner-workshop.s3.ap-southeast-1.amazonaws.com/fx/ticks.parquet', NOSIGN, 'Parquet');

-- and check again (expect 26,488,218)
SELECT count() AS ticks, uniqExact(concat(base,'/',quote)) AS pairs FROM forex;

NOSIGN は「認証情報なし」を意味します。パブリックバケットを読むにはこれだけで十分です。 テーブルのカラム順がファイルと一致しているので SELECT * がそのまま通ります。

ClickPipes と s3() 関数 — どちらをいつ使うか

同じ 26,488,218 行を2通りでロードしました。違いは最初のロードの あと に何が起きるか、つまり マネージドで継続的なパイプラインが欲しいのか、手早い単発の読み取りが欲しいのかです。

ClickPipess3() テーブル関数
何であるかコンソールで設定するフルマネージドの取り込みサービスクエリ内でインラインに呼び出す SQL 関数
向いている用途本番、および設定したら放っておきたい継続的なロード手早い単発ロード、アドホックな探索、スクリプト
継続 / 新規ファイルバケットやストリームを監視し続け、新しいデータを継続的にロードできる単発 — 実行時にそこにあるものだけを読む
セットアップガイド付き UI、SQL 不要INSERT … SELECT ステートメント1本
監視とリトライ組み込み — コンソールでステータス、エラー処理、リトライなし — 失敗したら自分で再実行
ソース多数: S3、GCS、Azure、Kafka などのストリーム、Postgres/MySQL CDC、ほかオブジェクトストレージのみ(同系統: gcs()、azureBlobStorage()、url())

目安: データが継続的に届き、マネージドに任せたいなら ClickPipes。今すぐファイルを取り込み たいだけなら s3()。今日はワンライナーで素早くクエリできる状態にしました。では実際にクエリ してみましょう。

このページの内容

Track your progress?

Optional. We email a link to confirm your address; progress records once you open it.

Please use your work email address, not a personal one.

Progress tracking also requires accepting the current Terms of Service in Privacy settings.

JA