remote, remoteSecure テーブル関数
テーブル関数 remote
は、分散テーブルを作成することなく、リモートサーバーにオンザフライでアクセスすることを可能にします。テーブル関数 remoteSecure
は、remote
と同様ですが、安全な接続を介して動作します。
これらの関数は、SELECT
および INSERT
クエリで使用できます。
構文
パラメータ
-
addresses_expr
— リモートサーバーのアドレスまたは、複数のリモートサーバーのアドレスを生成する式。形式:host
またはhost:port
。host
は、サーバー名または IPv4 または IPv6 アドレスとして指定できます。IPv6 アドレスは角括弧で囲む必要があります。port
は、リモートサーバー上の TCP ポートです。ポートが省略された場合、テーブル関数remote
のデフォルト(9000)ではサーバー設定ファイルの tcp_port を使用し、テーブル関数remoteSecure
のデフォルト(9440)では tcp_port_secure を使用します。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 は分散処理を使用し、すべての指定されたアドレス(異なるデータを持つシャードのように)にクエリを送信します。例:
例
リモートサーバーからのデータ選択:
または named collections を使用して:
リモートサーバー上のテーブルへのデータ挿入:
1つのシステムから別のシステムへのテーブルの移行:
この例では、サンプルデータセットから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
まで(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 設定によって制限されます。