外部テーブル
v3.0以降、Hive、Iceberg、Hudiからデータをクエリするために、catalogを使用することを推奨します。Hive catalog、Iceberg catalog、Hudi catalogを参照してください。
v3.1以降、MySQLとPostgreSQLからデータをクエリするためにJDBC catalogを使用し、ElasticsearchからデータをクエリするためにElasticsearch catalogを使用することを推奨します。
外部テーブル機能は、StarRocksにデータをインポートするために設計されており、外部システムに対して通常の操作としてクエリを実行するためのものではありません。JOINのような関数を使用してクエリを実行することはできますが、パフォーマンスは良くありません。よりパフォーマンスの良い解決策は、データをStarRocksにインポートすることです。
StarRocksは、外部テーブルを使用して他のデータソースにアクセスすることをサポートしています。外部テーブルは、他のデータソースに保存されているデータテーブルに基づいて作成されます。StarRocksはデータテーブルのメタデータのみを保存します。外部テー ブルを使用して、他のデータソースのデータを直接クエリすることができます。StarRocksは、MySQL、StarRocks、Elasticsearch、Apache Hive™、Apache Iceberg、Apache Hudiといったデータソースをサポートしています。現在、他のStarRocksクラスターから現在のStarRocksクラスターにデータを書き込むことしかできません。データを読み取ることはできません。StarRocks以外のデータソースからは、これらのデータソースからデータを読み取ることしかできません。
v2.5以降、StarRocksは外部データソースのホットデータクエリを加速するData Cache機能を提供しています。詳細はData Cacheを参照してください。
StarRocks外部テーブル
StarRocks 1.19以降、StarRocksは、あるStarRocksクラスターから別のクラスターにデータを書き込むためのStarRocks外部テーブルを使用することを許可しています。これにより、読み書きの分離が実現され、リソースの分離が向上します。まず、宛先StarRocksクラスターに宛先テーブルを作成します。次に、ソースStarRocksクラスターで、宛先テーブルと同じスキーマを持つStarRocks外部テーブルを作成し、PROPERTIESフィールドに宛先クラスターとテーブルの情報を指定します。
データは、INSERT INTOステートメントを使用してStarRocks外部テーブルに書き込むことで、ソースクラスターから宛先クラスターに書き込むことができます。これにより、以下の目標を実現できます:
- StarRocksクラスター間のデータ同期。
- 読み書きの分離。データはソースクラスターに書き込まれ、ソースクラスターからのデータ変更は宛先クラスターに同期され、クエリサービスを提供します。
以下のコードは、宛先テーブルと外部テーブルを作成する方法を示しています。
# 宛先StarRocksクラスターに宛先テーブルを作成します。
CREATE TABLE t
(
k1 DATE,
k2 INT,
k3 SMALLINT,
k4 VARCHAR(2048),
k5 DATETIME
)
ENGINE=olap
DISTRIBUTED BY HASH(k1);
# ソースStarRocksクラスターに外部テーブルを作成します。
CREATE EXTERNAL TABLE external_t
(
k1 DATE,
k2 INT,
k3 SMALLINT,
k4 VARCHAR(2048),
k5 DATETIME
)
ENGINE=olap
DISTRIBUTED BY HASH(k1)
PROPERTIES
(
"host" = "127.0.0.1",
"port" = "9020",
"user" = "user",
"password" = "passwd",
"database" = "db_test",
"table" = "t"
);
# ソースクラスターから宛先クラスターにデータを書き込むために、StarRocks外部テーブルにデータを書き込みます。2番目のステートメントは本番環境で推奨されます。
insert into external_t values ('2020-10-11', 1, 1, 'hello', '2020-10-11 10:00:00');
insert into external_t select * from other_table;
パラメータ:
-
EXTERNAL: このキーワードは、作成されるテーブルが外部テーブルであることを示します。
-
host: このパラメータは、宛先StarRocksクラスターのLeader FEノードのIPアドレスを指定します。
-
port: このパラメータは、宛先StarRocksクラスターのFEノードのRPCポートを指定します。
注記StarRocks外部テーブルが属するソースクラスターが宛先StarRocksクラスターにアクセスできるようにするためには、ネットワークとファイアウォールを設定して、以下のポートへのアクセスを許可する必要があります:
- FEノードのRPCポート。FE設定ファイルfe/fe.confの
rpc_portを参照してください。デフォルトのRPCポートは9020です。 - BEノードのbRPCポート。BE設定ファイルbe/be.confの
brpc_portを参照してください。デフォルトのbRPCポートは8060です。
- FEノードのRPCポート。FE設定ファイルfe/fe.confの
-
user: このパラメータは、宛先StarRocksクラスターにアクセスするために使用されるユーザー名を指定します。
-
password: このパラメータは、宛先StarRocksクラスターにアクセスするために使用されるパスワードを指定します。
-
database: このパラメータは、宛先テーブルが属するデータベースを指定します。
-
table: このパラメータは、宛先テーブルの名前を指定します。
StarRocks外部テーブルを使用する際の制限事項:
- StarRocks外部テーブルでは、INSERT INTOおよびSHOW CREATE TABLEコマンドのみを実行できます。他のデータ書き込み方法はサポートされていません。また、StarRocks外部テーブルからデータをクエリしたり、外部テーブルでDDL操作を実行することはできません。
- 外部テーブルの作成構文は通常のテーブルの作成と同じですが、外部テーブルのカラム名やその他の情報は宛先テーブルと同じでなければなりません。
- 外部テーブルは、宛先テーブルから10秒ごとにテーブルメタデータを同期します。宛先テーブルでDDL操作が行われた場合、2つのテーブル間のデータ同期に遅延が発生する可能性があります。
JDBC互換データベースの外部テーブル
v2.3.0以降、StarRocksはJDBC互換データベースをクエリするための外部テーブルを提供しています。これにより、データをStarRocksにインポートすることなく、これらのデータベースのデータを非常に高速に分析できます。このセクションでは、StarRocksで外部テーブルを作成し、JDBC互換データベースのデータをクエリする方法について説明します。
前提条件
JDBC外部テーブルを使用してデータをクエリする前に、FEsとBEsがJDBCドライバのダウンロードURLにアクセスできることを確認してください。ダウンロードURLは、JDBCリソースを作成するためのステートメント内のdriver_urlパラメータで指定されます。