8.8 KiB
slug | sidebar_position | sidebar_label |
---|---|---|
/ja/sql-reference/table-functions/remote | 175 | remote |
remote, remoteSecure
テーブル関数 remote
は、分散テーブルを作成することなく、リモートサーバーに即座にアクセスすることを可能にします。テーブル関数 remoteSecure
は、セキュアな接続を用いた remote
と同様の機能を持ちます。
どちらの関数も SELECT
および INSERT
クエリで使用することができます。
構文
remote(addresses_expr, [db, table, user [, password], sharding_key])
remote(addresses_expr, [db.table, user [, password], sharding_key])
remote(named_collection[, option=value [,..]])
remoteSecure(addresses_expr, [db, table, user [, password], sharding_key])
remoteSecure(addresses_expr, [db.table, user [, password], sharding_key])
remoteSecure(named_collection[, option=value [,..]])
パラメータ
-
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 クラスター間のクエリ
- 手動で行われるまれな分散リクエスト
- サーバーのセットが毎回再定義される分散リクエスト
アドレス
example01-01-1
example01-01-1:9440
example01-01-1:9000
localhost
127.0.0.1
[::]:9440
[::]:9000
[2a02:6b8:0:1111::11]:9000
複数のアドレスはカンマで区切ることができます。この場合、ClickHouse は分散処理を使用して、指定したすべてのアドレス(異なるデータを持つシャードのように)にクエリを送信します。例:
example01-01-1,example01-02-1
例
リモートサーバーからデータを選択する:
SELECT * FROM remote('127.0.0.1', db.remote_engine_table) LIMIT 3;
またはnamed collectionsを使用する場合:
CREATE NAMED COLLECTION creds AS
host = '127.0.0.1',
database = 'db';
SELECT * FROM remote(creds, table='remote_engine_table') LIMIT 3;
リモートサーバー上のテーブルにデータを挿入する:
CREATE TABLE remote_table (name String, value UInt32) ENGINE=Memory;
INSERT INTO FUNCTION remote('127.0.0.1', currentDatabase(), 'remote_table') VALUES ('test', 42);
SELECT * FROM remote_table;
システムからシステムへのテーブルの移行:
この例では、サンプルデータセットの1つのテーブルを使用します。データベースは imdb
、テーブルは actors
です。
ソース ClickHouse システムで(現在データをホストしているシステム)
-
ソースデータベースおよびテーブル名を確認する(
imdb.actors
)show databases
show tables in imdb
-
ソースから CREATE TABLE ステートメントを取得する:
select create_table_query from system.tables where database = 'imdb' and table = 'actors'
レスポンス
CREATE TABLE imdb.actors (`id` UInt32, `first_name` String, `last_name` String, `gender` FixedString(1)) ENGINE = MergeTree ORDER BY (id, first_name, last_name, gender);
送信先 ClickHouse システムで:
-
送信先データベースを作成する:
CREATE DATABASE imdb
-
ソースからの CREATE TABLE ステートメントを使用し、送信先を作成する:
CREATE TABLE imdb.actors (`id` UInt32, `first_name` String, `last_name` String, `gender` FixedString(1)) ENGINE = MergeTree ORDER BY (id, first_name, last_name, gender);
ソース展開に戻って:
リモートシステム上で作成した新しいデータベースおよびテーブルに挿入します。ホスト、ポート、ユーザー名、パスワード、送信先データベース、および送信先テーブルが必要です。
INSERT INTO FUNCTION
remoteSecure('remote.clickhouse.cloud:9440', 'imdb.actors', 'USER', 'PASSWORD')
SELECT * from imdb.actors
グロビング
波括弧 { }
内のパターンは、シャードのセットを生成したり、レプリカを指定したりするのに使用されます。複数の波括弧ペアがある場合、対応するセットの直積が生成されます。
次のパターンタイプがサポートされています。
{a,b,c}
- 代替文字列のいずれかであるa
、b
またはc
を表します。このパターンは最初のシャードアドレスではa
に置き換えられ、次のシャードアドレスでは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
では、レプリカは現在のロードバランシング設定に示されている順序で反復されます。生成されたアドレスの数は、table_function_remote_max_addresses設定によって制限されます。