remote, remoteSecure テーブル関数
テーブル関数 remote は、Distributed テーブルを作成することなく、オンデマンドでリモートサーバーにアクセスできるようにします。テーブル関数 remoteSecure は、セキュアな接続を使用する点を除き remote と同じです。
どちらの関数も SELECT および INSERT クエリで使用できます。
構文
パラメータ
| 引数 | 説明 |
|---|---|
addresses_expr | リモートサーバーのアドレス、または複数のリモートサーバーアドレスを生成する式。形式: host または host:port。host はサーバー名、または IPv4/IPv6 アドレスとして指定できます。IPv6 アドレスは角括弧で囲んで指定する必要があります。port はリモートサーバー上の TCP ポートです。ポートが省略された場合、テーブル関数 remote ではサーバー設定ファイルの tcp_port(デフォルト 9000)、テーブル関数 remoteSecure では tcp_port_secure(デフォルト 9440)が使用されます。IPv6 アドレスの場合、ポートの指定が必須です。 addresses_expr のみが指定された場合、db と table にはデフォルトで system.one が使用されます。型: String。 |
db | データベース名。型: String。 |
table | テーブル名。型: String。 |
user | ユーザー名。指定されていない場合は default が使用されます。型: String。 |
password | ユーザーのパスワード。指定されていない場合は空のパスワードが使用されます。型: String。 |
sharding_key | ノード間でデータを分散するためのシャーディングキー。例: insert into remote('127.0.0.1:9000,127.0.0.2', db, table, 'default', rand())。型: UInt32。 |
引数は named collections(名前付きコレクション)を使用して渡すこともできます。
戻り値
リモートサーバー上にあるテーブルです。
使用方法
テーブル関数 remote および remoteSecure はリクエストごとに接続を再確立するため、代わりに Distributed テーブルを使用することを推奨します。また、ホスト名が設定されている場合には名前解決が行われ、複数のレプリカに対して処理を行う際のエラーはカウントされません。大量のクエリを処理する場合は、常に事前に Distributed テーブルを作成し、remote テーブル関数は使用しないでください。
remote テーブル関数は、次のような場合に有用です。
- あるシステムから別のシステムへの一度きりのデータ移行
- データ比較、デバッグ、およびテストのために特定のサーバーへアクセスする場合、すなわちアドホックな接続を行う場合
- 調査目的で、さまざまな ClickHouse クラスター間でクエリを実行する場合
- 手動で行われる頻度の低い分散リクエスト
- サーバー集合が毎回再定義される分散リクエスト
アドレス
複数のアドレスをカンマ区切りで指定できます。この場合、ClickHouse は分散処理を行い、指定されたすべてのアドレス(異なるデータを保持するシャードのようなもの)にクエリを送信します。例:
例
リモートサーバーからデータを取得する:
または、名前付きコレクションを使用します:
リモートサーバー上のテーブルにデータを挿入する:
あるシステムから別のシステムへのテーブル移行:
この例では、サンプルデータセット内の1つのテーブルを使用します。データベースは imdb、テーブルは actors です。
ソースとなる ClickHouse システム(現在データを保持しているシステム)
-
ソースデータベースおよびテーブル名(
imdb.actors)を確認します。 -
ソースから CREATE TABLE 文を取得します。
レスポンス
宛先側 ClickHouse システム上で
-
宛先データベースを作成します:
-
ソース側の
CREATE TABLE文を利用して、宛先テーブルを作成します:
ソース側のデプロイメントに戻り
リモートシステム上で作成した新しいデータベースおよびテーブルに対して INSERT を実行します。ホスト、ポート、ユーザー名、パスワード、宛先データベース、および宛先テーブルが必要です。
グロブ
中括弧 { } 内のパターンは、シャードの集合を生成し、レプリカを指定するために使用されます。複数の中括弧のペアがある場合、それぞれの集合の直積が生成されます。
次の種類のパターンがサポートされています。
{a,b,c}- 候補文字列a、b、cのいずれかを表します。パターンは、最初のシャードアドレスではaに、2番目のシャードアドレスではbに置き換えられる、というように進みます。例えば、example0{1,2}-1はアドレスexample01-1とexample02-1を生成します。{N..M}- 数値の範囲です。このパターンは、NからM(両端を含む)まで増加するインデックスを持つシャードアドレスを生成します。例えば、example0{1..2}-1はexample01-1とexample02-1を生成します。{0n..0m}- 先頭にゼロを含む数値の範囲です。このパターンは、インデックスの先頭ゼロを保持します。例えば、example{01..03}-1はexample01-1、example02-1、example03-1を生成します。{a|b}-|で区切られた任意個数の候補です。このパターンはレプリカを指定します。例えば、example01-{1|2}はレプリカexample01-1とexample01-2を生成します。
クエリは、最初の正常な状態のレプリカに送信されます。ただし、remote の場合、レプリカは現在設定されている load_balancing 設定の順序で反復されます。
生成されるアドレスの数は、table_function_remote_max_addresses 設定によって制限されます。