メインコンテンツまでスキップ
メインコンテンツまでスキップ

remote, remoteSecure テーブル関数

テーブル関数 remote は、リモートサーバーにオンザフライでアクセスすることを可能にします。つまり、分散テーブルを作成することなく利用できます。テーブル関数 remoteSecure は、remote と同様ですが、安全な接続を介して動作します。

両方の関数は、SELECTINSERT クエリで使用できます。

構文

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 のみが指定された場合、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

引数は named collections を使用して渡すこともできます。

戻り値

リモートサーバー上にあるテーブル。

使用法

テーブル関数 remoteremoteSecure は各リクエストごとに接続を再確立するため、分散テーブル を使用することが推奨されます。また、ホスト名が設定されている場合、名前が解決され、さまざまなレプリカで作業する際のエラーはカウントされません。多数のクエリを処理する際は、常に事前に 分散テーブル を作成し、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} - 代替文字列 ab、または c のいずれかを表します。このパターンは、最初のシャードアドレスで a に置き換えられ、2番目のシャードアドレスで b に置き換えられ、と続きます。例えば、example0{1,2}-1 はアドレス example01-1example02-1 を生成します。
  • {N..M} - 数字の範囲。このパターンは、N から (そして M を含む) 増加するインデックスを持つシャードアドレスを生成します。例えば、example0{1..2}-1example01-1example02-1 を生成します。
  • {0n..0m} - 先頭ゼロのある数字の範囲。このパターンは、インデックス内の先頭ゼロを保持します。例えば、example{01..03}-1example01-1example02-1 および example03-1 を生成します。
  • {a|b} - | で区切られた任意の数のバリアント。このパターンはレプリカを指定します。例えば、example01-{1|2} はレプリカ example01-1example01-2 を生成します。

クエリは最初の健全なレプリカに送信されます。ただし、remote の場合、レプリカは現在 load_balancing 設定に設定された順序で反復されます。 生成されるアドレスの数は、table_function_remote_max_addresses 設定によって制限されています。