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を構成します。 |
ClickPipesには、さらに接続用のコネクタが追加される予定です。詳細についてはお問い合わせください。
サポートされているデータ形式
サポートされている形式は以下の通りです:
正確に一度のセマンティクス
大規模なデータセットを取り込む際に発生するさまざまなタイプの障害があり、それが部分的な挿入や重複データを引き起こす可能性があります。Object Storage ClickPipesは挿入の失敗に強く、正確に一度のセマンティクスを提供します。これは、一時的な「ステージング」テーブルを使用して実現されます。データはまずステージングテーブルに挿入されます。この挿入で何か問題が発生した場合、ステージングテーブルはトランケートされ、クリーンな状態から挿入を再試行できます。挿入が完了し成功したときにのみ、ステージングテーブルのパーティションがターゲットテーブルに移動されます。この戦略について詳しく読むには、このブログ投稿をチェックしてください。
ビューのサポート
ターゲットテーブルのMaterialized Viewもサポートされています。ClickPipesはターゲットテーブルだけでなく、依存するMaterialized Viewのためにもステージングテーブルを作成します。
非Materialized Viewのためのステージングテーブルは作成しません。これは、ターゲットテーブルに1つ以上の下流のMaterialized Viewがある場合、これらのMaterialized Viewがターゲットテーブルからのビューを通じてデータを選択しないようにすべきであることを意味します。そうしないと、Materialized View内にデータが欠落していることが判明するかもしれません。
スケーリング
Object Storage ClickPipesは、構成された垂直自動スケーリング設定によって決定される最小ClickHouseサービスサイズに基づいてスケールされます。ClickPipeのサイズは、パイプが作成されるときに決定されます。ClickHouseサービス設定に対するその後の変更は、ClickPipeのサイズには影響しません。
大規模な取り込みジョブのスループットを増加させるには、ClickPipeを作成する前にClickHouseサービスのスケーリングをお勧めします。
制限事項
- 宛先テーブル、あるいはそのMaterialized View(カスケードMaterialized Viewを含む)やMaterialized Viewのターゲットテーブルへの変更は、一時的なエラーを引き起こし、それが再試行される可能性があります。最良の結果を得るためには、パイプを停止して必要な変更を行い、その後パイプを再起動して変更を反映させ、エラーを回避することをお勧めします。
- サポートされるビューの種類に制限があります。詳細については、正確に一度のセマンティクスおよびビューのサポートに関するセクションを読んでください。
- S3 ClickPipesは、GCPまたはAzureにデプロイされたClickHouse Cloudインスタンスに対してロール認証がサポートされていません。AWS ClickHouse Cloudインスタンスにのみサポートされています。
- ClickPipesは、サイズが10GB以下のオブジェクトのみを取り込もうとします。ファイルが10GBを超える場合、ClickPipes専用のエラーテーブルにエラーが追加されます。
- 100kファイルを超えるコンテナのContinuous Ingestを持つAzure Blob Storageパイプは、新しいファイルを検出するのに約10–15秒の待機時間が発生します。ファイル数が増えると待機時間が増加します。
- Object Storage 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
公開アクセス可能なバケットと保護されたS3バケットの両方がサポートされています。
公開バケットは、ポリシーでs3:GetObject
およびs3:ListBucket
アクションの両方を許可する必要があります。
保護されたバケットには、IAM資格情報またはIAMロールを使用してアクセスできます。 IAMロールを使用するには、このガイドに指定のようにIAMロールを作成する必要があります。作成後に新しいIAMロールのArnをコピーし、「IAM ARNロール」としてClickPipeの設定に貼り付けます。
GCS
S3と同様に、設定なしで公開バケットにアクセスでき、保護されたバケットにはAWS IAM資格情報の代わりにHMACキーを使用できます。このようなキーの設定方法については、Google Cloudのこのガイドを参照してください。
GCS用のサービスアカウントは直接サポートされていません。非公開バケットと認証する際には、HMAC (IAM)資格情報を使用する必要があります。
HMAC資格情報に添付されたサービスアカウントの権限は、storage.objects.list
およびstorage.objects.get
である必要があります。
DigitalOcean Spaces
現在、DigitalOcean Spacesでは保護されたバケットのみがサポートされています。バケットとそのファイルにアクセスするには、「アクセスキー」と「シークレットキー」が必要です。アクセスキーの作成方法については、このガイドを参照してください。
Azure Blob Storage
現在、Azure Blob Storageでは保護されたバケットのみがサポートされています。認証は接続文字列を介して行われ、アクセスキーおよび共有キーをサポートしています。詳細については、このガイドをお読みください。
FAQ
- ClickPipesは
gs://
でプレフィックスされたGCSバケットをサポートしていますか?
いいえ。相互運用性の理由から、gs://
バケットプレフィックスをhttps://storage.googleapis.com/
に置き換えるようお願いしています。
- GCSの公開バケットにはどのような権限が必要ですか?
allUsers
には適切なロールの割り当てが必要です。roles/storage.objectViewer
ロールはバケットレベルで付与する必要があります。このロールはstorage.objects.list
権限を提供し、ClickPipesがバケット内のすべてのオブジェクトをリストすることを許可します。これはオンボーディングと取り込みに必要です。このロールにはstorage.objects.get
権限も含まれており、バケット内の個々のオブジェクトを読み取ったりダウンロードしたりするのに必要です。詳細についてはGoogle Cloudアクセス制御を参照してください。