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 設定によって制限されています。