ClickHouse/docs/ja/sql-reference/table-functions/remote.md
2024-11-18 11:58:58 +09:00

8.8 KiB
Raw Blame History

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 のみが指定された場合、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を使って渡すこともできます。

戻り値

リモートサーバーに存在するテーブル。

使用法

テーブル関数 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} - 代替文字列のいずれかである ab または c を表します。このパターンは最初のシャードアドレスでは a に置き換えられ、次のシャードアドレスでは b、その後も同様に置き換えられます。例: example0{1,2}-1 はアドレス example01-1 および example02-1 を生成します。
  • {N..M} - 数値の範囲。このパターンは、N から M(含む)へのインデックスを持つシャードアドレスを生成します。例: example0{1..2}-1example01-1 および example02-1 を生成します。
  • {0n..0m} - 先頭にゼロのある数値の範囲。このパターンはインデックスにおける先頭のゼロを維持します。例: example{01..03}-1example01-1example02-1example03-1 を生成します。
  • {a|b} - | で区切られた任意の数のバリアント。パターンはレプリカを指定します。例: example01-{1|2} はレプリカ example01-1 および example01-2 を生成します。

クエリは最初の正常なレプリカに送信されます。しかし、remote では、レプリカは現在のロードバランシング設定に示されている順序で反復されます。生成されたアドレスの数は、table_function_remote_max_addresses設定によって制限されます。