remote, remoteSecure テーブル関数
テーブル関数 remote は、リモートサーバーにオンザフライでアクセスすることを可能にします。つまり、分散テーブルを作成することなく利用できます。テーブル関数 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 は各リクエストごとに接続を再確立するため、分散テーブル を使用することが推奨されます。また、ホスト名が設定されている場合、名前が解決され、さまざまなレプリカで作業する際のエラーはカウントされません。多数のクエリを処理する際は、常に事前に 分散テーブル を作成し、remote テーブル関数を使用しないでください。
remote テーブル関数は以下の場合に役立ちます:
- あるシステムから別のシステムへの一次的なデータ移行
- データ比較、デバッグ、テストのための特定のサーバーへのアクセス、つまりアドホック接続。
- 研究目的のためのさまざまなClickHouseクラスター間のクエリ。
- 手動で行われる稀な分散リクエスト。
- 毎回サーバーのセットが再定義される分散リクエスト。
アドレス
複数のアドレスはカンマ区切りで指定できます。この場合、ClickHouseは分散処理を使用し、指定されたすべてのアドレスにクエリを送信します(異なるデータを持つシャードのように)。例:
例
リモートサーバーからのデータの選択:
または named collections を使用:
リモートサーバー上のテーブルへのデータの挿入:
あるシステムから別のシステムへのテーブルの移行:
この例では、サンプルデータセットからの1つのテーブルを使用します。データベースは imdb で、テーブルは actors です。
ソース ClickHouse システム上で(現在データをホストしているシステム)
- ソースデータベースとテーブル名を確認します(
imdb.actors)
- ソースから CREATE TABLE ステートメントを取得します:
応答
目的地 ClickHouse システム上で
- 目的地データベースを作成します:
- ソースからの CREATE TABLE ステートメントを使用して、目的地を作成します:
ソースのデプロイメントに戻る
リモートシステムで作成された新しいデータベースとテーブルに挿入します。ホスト、ポート、ユーザー名、パスワード、目的地データベース、および目的地テーブルが必要です。
グロビング
波括弧 { } のパターンは、シャードのセットを生成し、レプリカを指定するために使用されます。波括弧のペアが複数ある場合、対応するセットの直積が生成されます。
以下のパターンタイプがサポートされています。
{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 設定によって制限されています。