Object StorageをClickHouse Cloudと統合する
Object Storage ClickPipesは、Amazon S3、Google Cloud Storage、Azure Blob Storage、DigitalOcean SpacesからClickHouse Cloudにデータを取り込むためのシンプルで堅牢な方法を提供します。一次的および継続的な取り込みの両方がサポートされており、正確な一次のセマンティクスを実現しています。
前提条件
ClickPipesのイントロに目を通していることが必要です。
最初のClickPipeを作成する
- クラウドコンソールで、左側のメニューから
Data Sources
ボタンを選択し、「ClickPipeの設定」をクリックします。

- データソースを選択します。

- ClickPipeに名前、説明(オプション)、IAMロールまたは資格情報、バケットURLを提供してフォームに記入します。bashのようなワイルドカードを使用して複数のファイルを指定できます。詳細については、パス内のワイルドカード使用に関するドキュメントを参照してください。

- UIに指定されたバケット内のファイルのリストが表示されます。データ形式を選択し(現在はClickHouse形式のサブセットをサポートしています)、継続的な取り込みを有効にするかどうかを選択します。詳細はこちら。

- 次のステップでは、新しいClickHouseテーブルにデータを取り込むか、既存のテーブルを再利用するかを選択できます。画面の指示に従って、テーブル名、スキーマ、および設定を変更します。変更内容のリアルタイムプレビューをサンプルテーブルの上部に表示します。

提供されたコントロールを使用して高度な設定もカスタマイズできます。

- 代わりに、既存のClickHouseテーブルにデータを取り込むこともできます。その場合、UIはソースから選択した宛先テーブルのClickHouseフィールドにマッピングするフィールドを指定できます。

仮想カラムをフィールドにマッピングすることもできます。仮想カラムのように、_path
や_size
などの。
- 最後に、内部ClickPipesユーザーのための権限を設定できます。
権限: ClickPipesはデータを宛先テーブルに書き込むための専用ユーザーを作成します。この内部ユーザーの役割をカスタム役割または以下のいずれかの事前定義された役割から選択できます:
完全なアクセス
:クラスターへの完全なアクセス権を持ちます。宛先テーブルでMaterialized ViewまたはDictionaryを使用する場合に必要です。宛先テーブルのみ
:宛先テーブルに対するINSERT
権限のみを持ちます。

- 「セットアップを完了」をクリックすると、システムがClickPipeを登録し、サマリーテーブルに表示されます。


サマリーテーブルには、ClickHouse内のソースまたは宛先テーブルからサンプルデータを表示するためのコントロールが提供されます。

また、ClickPipeを削除したり、取り込みジョブの概要を表示するためのコントロールもあります。

- おめでとうございます! 最初のClickPipeを設定しました。これはストリーミングClickPipeであれば、リモートデータソースからリアルタイムでデータを継続的に取り込みます。さもなければ、バッチを取り込み、完了します。
サポートされているデータソース
名前 | ロゴ | タイプ | ステータス | 説明 |
---|---|---|---|---|
Amazon S3 | オブジェクトストレージ | 安定 | Object Storageからの大量データを取り込むためにClickPipesを構成します。 | |
Google Cloud Storage | オブジェクトストレージ | 安定 | Object Storageからの大量データを取り込むためにClickPipesを構成します。 | |
DigitalOcean Spaces | オブジェクトストレージ | 安定 | Object Storageからの大量データを取り込むためにClickPipesを構成します。 | |
Azure Blob Storage | オブジェクトストレージ | プライベートベータ | Object Storageからの大量データを取り込むためにClickPipesを構成します。 |
今後、クリックパイプに新しいコネクタが追加される予定です。詳細についてはお問合せください。
サポートされているデータフォーマット
サポートされているフォーマットは:
正確な一次セマンティクス
大規模データセットを取り込む際、さまざまなタイプの障害が発生する可能性があり、部分的な挿入や重複データを生じることがあります。Object Storage ClickPipesは挿入失敗に耐性があり、正確な一次セマンティクスを提供します。これは、一時的な「ステージング」テーブルを使用することで実現されます。データは最初にステージングテーブルに挿入されます。この挿入に問題が発生した場合、ステージングテーブルを切り捨てることができ、挿入をクリーンな状態から再試行できます。挿入が完了し成功したときのみ、ステージングテーブルのパーティションはターゲットテーブルに移動されます。この戦略についての詳細は、このブログ記事を確認してください。
ビューサポート
ターゲットテーブルでのMaterialized Viewもサポートされています。ClickPipesはターゲットテーブルだけでなく、依存するMaterialized Viewのためにもステージングテーブルを作成します。
非Materialized Viewについてはステージングテーブルは作成されません。これは、ターゲットテーブルにダウストリームのMaterialized Viewがある場合、これらのMaterialized Viewはターゲットテーブルからのビューを介してデータを選択することを避けるべきであることを意味します。そうでない場合、Materialized Viewにデータが欠落することがあります。
スケーリング
Object Storage ClickPipesは、設定された垂直自動スケーリング設定によって決定される最小ClickHouseサービスサイズに基づいてスケールされます。ClickPipeのサイズは、パイプが作成されたときに決定されます。ClickHouseサービス設定のその後の変更は、ClickPipeサイズに影響を与えません。
大規模な取り込みジョブのスループットを増加させるために、ClickPipeを作成する前にClickHouseサービスをスケーリングすることをお勧めします。
制限事項
- 宛先テーブル、そこにあるMaterialized View(カスケードMaterialized Viewを含む)、またはMaterialized Viewのターゲットテーブルへの変更は、自動的にはパイプに反映されず、エラーが発生する可能性があります。パイプを停止し、必要な修正を行った後、変更を反映させてエラーや重複データを避けるために再起動する必要があります。
- サポートされているビューのタイプには制限があります。正確な一次セマンティクスおよびビューサポートのセクションをお読みください。
- GCPまたはAzureにデプロイされたClickHouse CloudインスタンスのS3 ClickPipesではロール認証が利用できません。これはAWSのClickHouse Cloudインスタンスでのみサポートされています。
- ClickPipesは、サイズが10GB以下のオブジェクトのみを取り込むことを試みます。ファイルが10GBを超える場合、エラーがClickPipes専用のエラーテーブルに追加されます。
- S3 / GCS ClickPipesは、S3テーブル関数とリストシンタックスを共有しませんし、AzureはAzureBlobStorageテーブル関数とも共有しません。
?
— 任意の単一の文字を置き換えます。*
— 空文字列を含め、任意の数の任意の文字を置き換えます。**
— 空文字列を含め、任意の数の任意の文字を置き換えます。
これは有効なパス(S3用)です:
https://datasets-documentation.s3.eu-west-3.amazonaws.com/http/**.ndjson.gz
これは無効なパスです。{N..M}
はClickPipesではサポートされていません。
https://datasets-documentation.s3.eu-west-3.amazonaws.com/http/{documents-01,documents-02}.ndjson.gz
継続的取り込み
ClickPipesは、S3、GCS、Azure Blob Storage、DigitalOcean Spacesからの継続的な取り込みをサポートしています。有効にすると、ClickPipesは指定されたパスからデータを継続的に取り込み、30秒ごとに新しいファイルをポーリングします。ただし、新しいファイルは最後に取り込まれたファイルよりも辞書的に大きくなければなりません。つまり、取り込みの順序を定義する方法で名前が付けられている必要があります。たとえば、file1
、file2
、file3
などのファイルは順に取り込まれます。file0
のように名前が付けられた新しいファイルが追加された場合、ClickPipesはそれを取り込まず、最後に取り込まれたファイルよりも辞書的に大きくないためです。
アーカイブテーブル
ClickPipesは、宛先テーブルの隣にs3_clickpipe_<clickpipe_id>_archive
という接尾辞のテーブルを作成します。このテーブルは、ClickPipeによって取り込まれたすべてのファイルのリストを含みます。このテーブルは取り込み中のファイルを追跡するために使用され、ファイルが取り込まれたかどうかを確認するために使用できます。アーカイブテーブルには、TTLが7日間設定されています。
これらのテーブルはClickHouse Cloud SQLコンソールでは表示されません。HTTPSまたはネイティブ接続を使用して外部クライアントから接続して読む必要があります。
認証
S3
特別な設定なしでパブリックバケットにアクセスでき、保護されたバケットにはIAM資格情報またはIAMロールを使用できます。 IAMロールを使用するには、このガイドで指定されているようにIAMロールを作成する必要があります。作成後に新しいIAMロールArnをコピーし、それをClickPipeの設定に「IAM ARNロール」として貼り付けます。
GCS
S3と同様に、設定なしでパブリックバケットにアクセスでき、保護されたバケットにはAWS IAM資格情報の代わりにHMACキーを使用できます。このキーのセットアップ方法に関するGoogle Cloudのガイドを読むことができます。
GCSのサービスアカウントは直接サポートされていません。非公開バケットで認証する際にはHMAC(IAM)資格情報を使用する必要があります。
HMAC資格情報に付属するサービスアカウントの権限はstorage.objects.list
およびstorage.objects.get
である必要があります。
DigitalOcean Spaces
現在、デジタルオーシャンスペースには保護されたバケットのみがサポートされています。バケットとそのファイルにアクセスするためには、「Access Key」と「Secret Key」が必要です。アクセストークンの作成方法については、このガイドをお読みください。
Azure Blob Storage
現在、Azure Blob Storageでは保護されたバケットのみがサポートされています。認証は接続文字列によって行われ、アクセスキーと共有キーをサポートします。詳細については、このガイドをお読みください。
よくある質問
- ClickPipesは
gs://
でプレフィックスされたGCSバケットをサポートしていますか?
サポートしていません。相互運用性の理由から、gs://
バケットプレフィックスをhttps://storage.googleapis.com/
に置き換えることをお勧めします。
- GCSのパブリックバケットにはどのような権限が必要ですか?
allUsers
には適切な役割の割り当てが必要です。roles/storage.objectViewer
の役割はバケットレベルで付与される必要があります。この役割により、ClickPipesがバケット内のすべてのオブジェクトをリスト化するために必要なstorage.objects.list
権限が提供されます。この役割には、バケット内の個々のオブジェクトを読み取るまたはダウンロードするために必要なstorage.objects.get
権限も含まれています。詳細情報については、Google Cloudのアクセス制御を参照してください。