azureBlobStorage Table Function
は、Azure Blob Storage から
ClickHouse にデータをすばやく手軽に取り込む方法です。ただし、次の理由から
常に適しているとは限りません。
- データが Azure Blob Storage に保存されていない場合があります。たとえば、Azure SQL Database、Microsoft SQL Server、または Cosmos DB に保存されている可能性があります。
- セキュリティ ポリシーにより、Blob Storage への外部アクセスが 完全に禁止されている場合があります。たとえば、ストレージ アカウントがパブリック エンドポイントなしで厳しく制限されている場合です。
Azure Data Factory のセルフホスト統合ランタイムを使用すれば、
ClickHouse インスタンスをインターネットに公開せずに済みます。この構成では、
データをプライベート ネットワーク経由で送信できます。ただし、これはこの
記事の範囲外です。詳しくは、公式ガイドを参照してください:
セルフホスト統合ランタイムを作成して構成する
ClickHouse を REST サービスとして利用する
Azure Data Factory では、組み込みの
encodeUriComponent 関数でこのエンコードを自動的に処理できるため、手動で行う必要はありません。col_1、col_2、col_3 を持つ
テーブルを想定した、curl を使った簡単な例です。
JSONEachRow 入力と完全に適合します。
ご覧のとおり、このステップでは ClickHouse
側で特別なことをする必要はありません。HTTP インターフェイスには、
REST 風のエンドポイントとして動作するために必要な機能がすでにすべて備わっており、
追加の設定は不要です。
これで ClickHouse を REST エンドポイントのように動作させられるようになったので、次は
Azure Data Factory でこれを利用するように設定します。
次のステップでは、Azure Data Factory インスタンスを作成し、ClickHouse インスタンスへの Linked
Service を設定し、
REST sink
用の Dataset を定義し、Azure から ClickHouse にデータを送信する Copy Data アクティビティを作成します。
Azure Data Factory インスタンスの作成
- Microsoft Azure Portal にログインし、 Create a resource をクリックします。
- 左側の Categories ペインで Analytics を選択し、 人気のサービス一覧から Data Factory をクリックします。
- サブスクリプションとリソース グループを選択し、新しい Data Factory インスタンスの名前を入力して、リージョンを選択し、バージョンは V2 のままにします。
- Review + Create をクリックし、続いて Create をクリックしてデプロイを開始します。
新しい REST ベースのリンク サービスを作成する
- Microsoft Azure Portal にログインし、Data Factory インスタンスを開きます。
- Data Factory の概要ページで、Launch Studio をクリックします。
- 左側のメニューで Manage を選択し、Linked services に移動して、+ New をクリックし、新しいリンク サービスを作成します。
- New linked service の検索バーに REST と入力し、REST を選択して Continue をクリックし、REST コネクタのインスタンスを作成します。
- リンク サービスの構成ペインで新しいサービスの名前を入力し、Base URL フィールドをクリックしてから Add dynamic content をクリックします (このリンクはフィールドを選択したときにのみ表示されます) 。
- 動的コンテンツ ペインでは、パラメーター化された URL を作成できます。これにより、異なるテーブル用のデータセットを作成する際に後からクエリを定義できるため、リンク サービスを再利用できるようになります。
-
フィルター入力の横にある ”+” をクリックして新しいパラメーターを追加し、名前を
pQuery、型を String、デフォルト値をSELECT 1に設定します。Save をクリックします。 -
式フィールドに次を入力し、OK をクリックします。
your-clickhouse-url.comは実際の ClickHouse インスタンスのアドレスに置き換えてください。 - メイン フォームに戻り、基本認証を選択して、ClickHouse HTTP インターフェイスへの接続に使用するユーザー名とパスワードを入力し、Test connection をクリックします。すべてが正しく構成されていれば、成功メッセージが表示されます。
- Create をクリックしてセットアップを完了します。
ClickHouse HTTP インターフェイス用の新しいデータセットを作成する
-
任意の ClickHouse クエリコンソールを開きます。ClickHouse Cloud の web UI、
CLI クライアント、または普段クエリの実行に使用しているその他のインターフェイス
のいずれでもかまいません。そこで、ターゲットテーブルを作成します。
- Azure Data Factory Studio で、左側のペインから Author を選択します。Dataset 項目にカーソルを合わせ、三点アイコンをクリックして、New dataset を選択します。
- 検索バーに REST と入力し、REST を選択して Continue をクリックします。 データセット名を入力し、前の手順で作成した リンク サービス を選択します。 OK をクリックしてデータセットを作成します。
-
作成したデータセットが、左側の Factory Resources ペインの Datasets
セクションに表示されます。データセットを選択して、そのプロパティを
開きます。リンク サービスで定義した
pQueryパラメーターが表示されるので、 Value テキストフィールドをクリックし、続いて Add dynamic content をクリックします。 -
開いたペインに、次のクエリを貼り付けます。
クエリ内のすべてのシングルクォート
' は、2 つのシングルクォート
'' に置き換える必要があります。これは Azure Data Factory の式パーサーで
必要となるためです。これらをエスケープしないと、すぐにはエラーが表示
されないことがありますが、後でデータセットを使用または保存しようとした
ときに失敗します。たとえば、'best_effort' は ''best_effort'' と
記述する必要があります。- OK をクリックして式を保存します。Test connection をクリックします。 すべてが正しく設定されていれば、Connection successful メッセージが表示 されます。ページ上部の Publish all をクリックして変更を保存します。
例として使用するデータセットの準備
このガイドでは要点に絞るため、Azure Data Factory でソース
データセットを作成する具体的な手順については説明しません。サンプルデータは任意の
ストレージサービスにアップロードできます。たとえば、Azure Blob Storage、Microsoft SQL
Server、あるいは Azure Data Factory がサポートする別のファイル形式でもかまいません。
ClickHouse にデータを転送するための Copy Activity の作成
sensors テーブルにデータを転送します。
- Azure Data Factory Studio を開き、Author タブに移動します。 Factory Resources ペインで Pipeline にカーソルを合わせ、三点アイコンをクリックして、New pipeline を選択します。
- Activities ペインで Move and transform セクションを展開し、 Copy data アクティビティをキャンバスにドラッグします。
- Source タブを選択し、先ほど作成したソースデータセットを選択します。
-
Sink タブに移動し、
sensorsテーブル用に作成した ClickHouse データセットを選択します。Request method は POST に設定します。HTTP compression type が None に設定されていることを確認してください。
デフォルトのバッチサイズ 10,000 のままにするか、さらに大きくすることを推奨します。
詳しくは、
Selecting an Insert Strategy / Batch inserts if synchronous
を参照してください。
- キャンバス上部の Debug をクリックして、パイプラインを実行します。しばらくすると、 アクティビティがキューに入り実行されます。すべてが正しく設定されていれば、 タスクは Success ステータスで完了するはずです。
- 完了したら、Publish all をクリックして、パイプラインとデータセットの変更を保存します。