メインコンテンツまでスキップ
バージョン: 3.5 Stable

Overview

このトピックでは、catalog とは何か、catalog を使用して内部データと外部データを管理およびクエリする方法について説明します。Catalog を使用すると、1 つのシステムで内部データと外部データを管理でき、さまざまな外部システムに保存されているデータを簡単にクエリおよび分析する柔軟な方法を提供します。

Basic concepts​

  • Internal data: PhoenixAI に保存されているデータを指します。
  • External data: Apache Hive™、Apache Iceberg、Apache Hudi、Delta Lake などの外部データソースに保存されているデータを指します。

Catalog​

現在、PhoenixAI は 2 種類の catalog を提供しています: internal catalog と external catalog。

figure1

  • Internal catalog は PhoenixAI の内部データを管理します。たとえば、CREATE DATABASE または CREATE TABLE ステートメントを実行してデータベースまたはテーブルを作成すると、そのデータベースまたはテーブルは internal catalog に保存されます。各 PhoenixAI クラスターには、default_catalog という名前の internal catalog が 1 つだけあります。

  • External catalog は外部で管理されているメタストアへのリンクのように機能し、PhoenixAI に外部データソースへの直接アクセスを提供します。データロードや移行を行わずに外部データを直接クエリできます。現在、PhoenixAI は次の種類の external catalog をサポートしています:

    • Hive catalog: Hive からデータをクエリするために使用されます。
    • Iceberg catalog: Iceberg からデータをクエリするために使用されます。
    • Hudi catalog: Hudi からデータをクエリするために使用されます。
    • Delta Lake catalog: Delta Lake からデータをクエリするために使用されます。
    • JDBC catalog: JDBC 互換のデータソースからデータをクエリするために使用されます。

    PhoenixAI は外部データをクエリする際に、外部データソースの次の 2 つのコンポーネントとやり取りします:

    • Metadata service: FEs が外部データソースのメタデータにアクセスするために使用されます。FEs はメタデータに基づいてクエリ実行計画を生成します。
    • Data storage system: 外部データを保存するために使用されます。分散ファイルシステムとオブジェクトストレージシステムの両方がデータストレージシステムとして使用され、さまざまな形式のデータファイルを保存できます。FEs がクエリ実行計画をすべての BEs に配布した後、すべての BEs が対象の外部データを並行してスキャンし、計算を行い、クエリ結果を返します。

Access catalog​

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

Query data​

Query internal data​

PhoenixAI 内のデータをクエリするには、Default catalog を参照してください。

Query external data​

外部データソースからデータをクエリするには、Hive catalog、Iceberg catalog、Hudi catalog、Delta Lake catalog、および JDBC catalog を参照してください。

Cross-catalog query​

現在の catalog からクロスカタログフェデレーテッドクエリを実行するには、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_catalog の hive_table と default_catalog の olap_table でジョインクエリを実行します。

    SELECT * FROM hive_table h JOIN default_catalog.olap_db.olap_table o WHERE h.id = o.id;
  • 現在のセッションが別の catalog の場合、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;