Skip to content
ClickHouse Docs
ClickHouse DocsClickHouse Docs

remote, remoteSecure

テーブル関数 remote を使用すると、Distributed テーブルを作成しなくても、リモートサーバーに動的にアクセスできます。テーブル関数 remoteSecureremote と同じですが、セキュアな接続を使用します。

どちらの関数も、対象が通常の db/table である場合に SELECT クエリと INSERT クエリで使用できます。対象自体がテーブル関数である場合 (たとえば remote('127.0.0.1', numbers(10))) 、そのテーブルは読み取り専用です。挿入先となるリモートテーブルが存在しないため、INSERTNOT_IMPLEMENTED 例外で拒否されます。

構文

remote(addresses_expr, [db, table, user [, password], sharding_key][, SETTINGS name = value, ...])
remote(addresses_expr, [db.table, user [, password], sharding_key][, SETTINGS name = value, ...])
remote(named_collection[, option=value [,..]][, SETTINGS name = value, ...])
remoteSecure(addresses_expr, [db, table, user [, password], sharding_key][, SETTINGS name = value, ...])
remoteSecure(addresses_expr, [db.table, user [, password], sharding_key][, SETTINGS name = value, ...])
remoteSecure(named_collection[, option=value [,..]][, SETTINGS name = value, ...])

パラメータ

引数 説明
addresses_expr リモートサーバーのアドレス、または複数のリモートサーバーのアドレスを生成する式です。フォーマット: host または host:port

host には、サーバー名、IPv4 アドレス、または IPv6 アドレスを指定できます。IPv6 アドレスは [] で囲んで指定する必要があります。

port はリモートサーバーの TCP ポートです。ポートを省略した場合、テーブル関数 remote ではサーバー設定ファイルの tcp_port (デフォルトは 9000) が使用され、テーブル関数 remoteSecure では tcp_port_secure (デフォルトは 9440) が使用されます。

IPv6 アドレスでは、ポートの指定が必須です。

addresses_expr パラメータのみを指定した場合、dbtable にはデフォルトで 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.
SETTINGS name = value, ... 関数によって作成される Distributed テーブルの設定です。例: skip_unavailable_shards。任意です。クエリで指定した設定が優先されます。この句はテーブル関数内でのみ使用できます。Remote および RemoteSecure テーブルエンジンでは、エンジン定義の後に同じ設定を指定します。詳細は Remote および RemoteSecure エンジン を参照してください。

引数は 名前付きコレクション を使って渡すこともできます。

戻り値

リモートサーバー上のテーブル。

使用方法

テーブル関数 remoteremoteSecure はリクエストごとに接続を再確立するため、代わりに Distributed テーブルを使用することをお勧めします。また、ホスト名が設定されている場合は名前解決が行われ、複数のレプリカを扱う際にエラーはカウントされません。大量のクエリを処理する場合は、必ず事前に Distributed テーブルを作成し、remote テーブル関数は使用しないでください。

remote テーブル関数は、次のような場合に役立ちます。

  • あるシステムから別のシステムへの一回限りのデータ移行
  • データの比較、デバッグ、テストのために特定のサーバーへアクセスする場合、つまりアドホックな接続
  • 調査目的で複数の ClickHouse クラスター間でクエリを実行する場合
  • 手動で行う、頻度の低い分散リクエスト
  • サーバーの構成を毎回定義し直す分散リクエスト

同じパラメーターを Remote および RemoteSecure テーブルエンジンでも使用して、アドホックではなく永続テーブルを作成できます。詳しくは Remote and RemoteSecure engines を参照してください。唯一の違いは SETTINGS 句です。エンジンでは、これを引数内ではなくエンジン定義の後に指定します。ENGINE = Remote(...) SETTINGS skip_unavailable_shards = 1

アドレス

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;

または、名前付きコレクションを使用する場合:

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} - 代替文字列 abc のいずれかを表します。このパターンは、1 つ目の分片アドレスでは a に、2 つ目の分片アドレスでは b に、以降も同様に置き換えられます。たとえば、example0{1,2}-1example01-1example02-1 というアドレスを生成します。
  • {N..M} - 数値の範囲です。このパターンは、N から M まで (M を含む) 増加するインデックスを持つ分片アドレスを生成します。たとえば、example0{1..2}-1example01-1example02-1 を生成します。
  • {0n..0m} - 先頭にゼロが付いた数値の範囲です。このパターンは、インデックスの先頭のゼロを保持します。たとえば、example{01..03}-1example01-1example02-1example03-1 を生成します。
  • {a|b} - | で区切られた任意の数のバリアントです。このパターンはレプリカを指定します。たとえば、example01-{1|2} はレプリカ example01-1example01-2 を生成します。

クエリは、最初に正常なレプリカに送信されます。ただし、remote では、レプリカは現在の load_balancing 設定で指定された順序で順番に試行されます。 生成されるアドレス数は、table_function_remote_max_addresses 設定によって制限されます。

Navigation