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

Overview

概要

このトピックでは、カタログとは何か、およびカタログを使用して内部データと外部データを管理およびクエリする方法について説明します。

StarRocksはv2.3以降、カタログ機能をサポートしています。カタログを使用すると、内部および外部のデータを1つのシステムで管理し、さまざまな外部システムに格納されたデータを簡単にクエリーおよび分析する柔軟な方法を提供します。

基本的な概念

  • 内部データ: StarRocksに格納されているデータのことです。
  • 外部データ: Apache Hive™、Apache Iceberg、Apache Hudi、Delta Lake、およびJDBCなどの外部データソースに格納されているデータのことです。

カタログ

現在、StarRocksでは内部カタログと外部カタログの2種類のカタログが提供されています。

図1
  • 内部カタログは、StarRocksの内部データを管理します。たとえば、CREATE DATABASEステートメントやCREATE TABLEステートメントを実行してデータベースやテーブルを作成すると、そのデータベースやテーブルは内部カタログに格納されます。各StarRocksクラスターには、default_catalogという名前の内部カタログが1つだけあります。
  • 外部カタログは、外部で管理されているメタストアへのリンクのような役割を果たし、StarRocksが外部データソースに直接アクセスできるようにします。データの読み込みや移行なしに外部データを直接クエリーすることができます。現在、StarRocksは以下のタイプの外部カタログをサポートしています:外部データをクエリーする際に、StarRocksは次の2つの外部データソースのコンポーネントとやり取りします。
    • Hiveカタログ: Hiveからデータをクエリーするために使用します。
    • Icebergカタログ: Icebergからデータをクエリーするために使用します。
    • Hudiカタログ: Hudiからデータをクエリーするために使用します。
    • Delta Lakeカタログ: Delta Lakeからデータをクエリーするために使用します。
    • JDBCカタログ: JDBC互換のデータソースからデータをクエリーするために使用します。
    • メタストアサービス: FEsが外部データソースのメタデータにアクセスするために使用します。FEsはメタデータに基づいてクエリー実行計画を生成します。
    • データストレージシステム: 外部データを格納するために使用します。分散ファイルシステムおよびオブジェクトストレージシステムの両方をデータストレージシステムとして使用して、さまざまな形式のデータファイルを格納できます。FEsはクエリー実行計画をすべてのBEに配布した後、すべてのBEがターゲットの外部データを並列にスキャンし、計算を実行し、クエリー結果を返します。

カタログへのアクセス

SET CATALOGステートメントを使用して、現在のセッションで指定されたカタログに切り替えることができます。その後、そのカタログを使用してデータをクエリーできます。

データのクエリー

内部データのクエリー

StarRocksでデータをクエリーするには、デフォルトカタログを参照してください。

外部データのクエリー

外部データソースからデータをクエリーするには、外部データのクエリーを参照してください。

カタログ間クエリー

現在のカタログからカタログ間のフェデレーテッドクエリーを実行するには、catalog_name.database_nameまたはcatalog_name.database_name.table_nameの形式でクエリーしたいデータを指定します。

  • 現在のセッションがdefault_catalog.olap_dbである場合、hive_db内の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である場合、hive_cataloghive_tabledefault_catalogolap_tableをJOINクエリーします。

    SELECT * FROM hive_table h JOIN default_catalog.olap_db.olap_table o WHERE h.id = o.id;
  • 現在のセッションが別のカタログである場合、hive_cataloghive_tabledefault_catalogolap_tableをJOIN句を使用してJOINクエリーします。

    SELECT * FROM hive_catalog.hive_db.hive_table h JOIN default_catalog.olap_db.olap_table o WHERE h.id = o.id;