このトピックでは、カタログとは何か、およびカタログを使用して内部データと外部データを管理およびクエリする方法について説明します。
用語
内部データ: StarRocks に格納されているデータ。
外部データ: Apache Hive、Apache Iceberg、Apache Hudi などの外部データソースに格納されているデータ。
カタログ
StarRocks 2.3 以降では、カタログを使用して、さまざまな外部データソースに格納されているデータに簡単にアクセスしてクエリを実行できます。 StarRocks は、内部カタログと外部カタログの 2 種類のカタログをサポートしています。
内部カタログ: StarRocks クラスタ内のすべての内部データを管理するために使用されます。たとえば、
CREATE DATABASE文とCREATE TABLE文を実行して作成されたデータベースとテーブルは、StarRocks クラスタの内部カタログで管理されます。各 StarRocks クラスタには、default_catalogという名前の内部カタログが 1 つだけあります。外部カタログ: データソースの種類や Hive メタストアの URI(Uniform Resource Identifier)など、外部データソースのアクセス情報を管理するために使用されます。 StarRocks では、外部カタログを使用して外部データを直接クエリできます。
次の種類のデータソースの外部カタログを作成できます。
Hive データソース: Hive データをクエリするために使用されます。
Iceberg データソース: Iceberg データをクエリするために使用されます。
Hudi データソース: Hudi データをクエリするために使用されます。
Paimon データソース: Paimon データをクエリするために使用されます。
Delta Lake データソース: Delta Lake データをクエリするために使用されます。
外部カタログを使用して外部データソースからデータをクエリする場合、StarRocks は外部データソースの 2 つのコンポーネントを使用します。
メタデータサービス: StarRocks クラスタのフロントエンド(FE)がクエリプランを生成するためにメタデータを公開するために使用されます。
ストレージシステム: データを格納するために使用されます。データファイルは、分散ファイルシステムまたはオブジェクトストレージシステムにさまざまな形式で格納されます。 FE が生成されたクエリプランを各バックエンド(BE)に配布した後、各 BE は Hive ストレージシステム内の宛先データを並行してスキャンし、計算を実行してから、クエリ結果を返します。
データのクエリ
内部データのクエリ
詳細については、「デフォルトカタログ」をご参照ください。
外部データのクエリ
外部データソースに格納されているデータのクエリ方法の詳細については、「データレイク分析」をご参照ください。
カタログを跨ぐデータのクエリ
複数のカタログにわたるデータをクエリする場合は、catalog_name.db_name または catalog_name.db_name.table_name の形式で宛先を指定することで、宛先データを参照できます。例:
default_catalog.olap_dbカタログで、次の文を実行してhive_catalogカタログのhive_tableテーブルからデータをクエリします。SELECT * FROM hive_catalog.hive_db.hive_table;hive_catalog.hive_dbカタログで、次の文を実行してdefault_catalogカタログのolap_tableテーブルからデータをクエリします。SELECT * FROM default_catalog.olap_db.olap_table;hive_catalog.hive_dbカタログで、次の文を実行して、default_catalogカタログの hive_table テーブルとolap_tableテーブルに対してフェデレーテッドクエリを実行します。SELECT * FROM hive_table h JOIN default_catalog.olap_db.olap_table o WHERE h.id = o.id;他のカタログで、次の文を実行して、
hive_catalogカタログのhive_tableテーブルとdefault_catalogカタログのolap_tableテーブルに対してフェデレーテッドクエリを実行します。SELECT * FROM hive_catalog.hive_db.hive_table h JOIN default_catalog.olap_db.olap_table o WHERE h.id = o.id;