ApsaraDB for SelectDB は、データレイク、データベース、リモートファイルなどの外部データソースに対する フェデレーテッドクエリ をサポートしています。
概要
ApsaraDB for SelectDB は、データレイクやデータベースなどの外部データソースに接続して、シンプルかつ高速なデータ分析を可能にする マルチソースデータカタログ (Multi-Catalog や Catalog とも呼ばれる) 機能を提供します。 この機能は、元のメタデータ階層の上に Catalog レイヤーを追加し、Catalog -> Database -> Table という 3 階層のメタデータ構造を形成します。 各 Catalog は、外部データソースに直接マッピングできます。 サポートされている外部データソースの詳細については、「データレイク分析」および「データベース分析」をご参照ください。
ApsaraDB for SelectDB は、Amazon S3 や HDFS などのリモートストレージシステムからのファイルデータをクエリ可能なテーブルにマッピングし、ファイルベースの分析を簡素化する テーブル値関数 (TVFs) も提供します。 詳細については、「ファイル分析」をご参照ください。
カタログを使用することで、ApsaraDB for SelectDB は外部データソースと内部データを統合してクエリできるため、データウェアハウスとストレージシステム間で柔軟な分析が可能です。
外部データソースがパブリックインターネット上にデプロイされている場合、ApsaraDB for SelectDB インスタンスの Virtual Private Cloud (VPC) にはアウトバウンドのインターネットアクセスが必要です。 詳細については、「ApsaraDB for SelectDB インスタンスとデータソース間のネットワーク接続の問題を解決する方法」をご参照ください。
基本概念と操作
-
内部カタログ
ApsaraDB for SelectDB 内のすべての既存データベースとテーブルは内部カタログに属します。これはデフォルトで組み込まれており、変更や削除はできません。
-
外部カタログ
CREATE CATALOGコマンドを使用して外部カタログを作成します。SHOW CATALOGSですべてのカタログを表示するか、SHOW CREATE CATALOG <catalog_name>;で特定のカタログの作成ステートメントを表示できます。 -
カタログの切り替え
ApsaraDB for SelectDB にログインすると、デフォルトで Internal Catalog がアクティブになっています。カタログを切り替えるには、
SWITCHコマンドを使用します:SWITCH internal; SWITCH hive_catalog;切り替え後、
SHOW DATABASESおよびUSE <db_name>を使用して、対象のカタログ内のデータベースを参照および切り替えることができます。外部カタログのデータは、内部カタログと同じ方法で表示およびアクセスできます。現在、 ApsaraDB for SelectDB は、外部カタログへの読み取り専用アクセスをサポートしています。 -
カタログの削除
外部カタログのデータは読み取り専用ですが、
DROP CATALOG <catalog_name>;コマンドでカタログ自体をドロップできます。内部カタログはドロップできません。説明この操作により、ApsaraDB for SelectDB からカタログのマッピング情報のみが削除されます。外部データソース自体は変更されません。
列タイプのマッピング
カタログを作成すると、ApsaraDB for SelectDB は外部データソースからデータベースとテーブルを自動的に同期し、データソースとテーブル形式に従って列タイプをマッピングします。
UNION や INTERVAL など、マッピングできない外部データ型には UNSUPPORTED 型が割り当てられます。 次の例では、UNSUPPORTED 列をクエリした場合の動作を示します。
-- 同期されたテーブルのスキーマ:
k1 INT,
k2 INT,
k3 UNSUPPORTED,
k4 INT
-- クエリ結果:
SELECT * FROM testtable; // エラー: 'k3' でサポートされていないタイプ 'UNSUPPORTED_TYPE'
SELECT * except(k3) FROM testtable; // クエリ OK。
SELECT k1, k3 FROM testtable; // エラー: 'k3' でサポートされていないタイプ 'UNSUPPORTED_TYPE'
SELECT k1, k4 FROM testtable; // クエリ OK。
SHOW DATA TYPES; を実行すると、ApsaraDB for SelectDB でサポートされているデータ型を表示できます。特定の外部ソースでサポートされているデータ型については、「データレイク分析」および「データベース分析」をご参照ください。
権限管理
ApsaraDB for SelectDB は、組み込みの権限管理を使用し、これをカタログレベルまで拡張することで、外部カタログ内のデータベースとテーブルへのアクセスを制御します。詳細については、「ユーザー権限管理」をご参照ください。
データベースの指定
Catalog 設定の include_database_list プロパティと exclude_database_list プロパティを使用して、同期するデータベースを制御します。
-
include_database_list: 同期するデータベースをカンマ区切りで指定します。データベース名では大文字と小文字が区別されます。デフォルトでは、すべてのデータベースが同期されます。 -
exclude_database_list:同期から除外するデータベースのカンマ区切りリストです。データベース名では大文字と小文字が区別されます。デフォルトでは空です。この場合、どのデータベースも除外されません。
-
データベースが
include_database_listとexclude_database_listの両方に設定されている場合、exclude_database_listが優先されます。 -
Java データベース接続 (JDBC) ソースに接続する場合、これら 2 つのプロパティを
only_specified_databaseパラメーターと組み合わせて使用する必要があります。 詳細については、「JDBC データソース」をご参照ください。
メタデータ更新
テーブルの作成や削除、列の追加や削除など、外部データソースのメタデータ変更は ApsaraDB for SelectDB に自動的に同期されません。次の方法でメタデータを更新できます。
手動更新
REFRESH コマンドを使用してメタデータを手動で更新します。
構文
REFRESH CATALOG catalog_name;
REFRESH DATABASE [catalog_name.]database_name;
REFRESH TABLE [catalog_name.][database_name.]table_name;
カタログを更新すると、パーティション、スキーマ、ファイルキャッシュなどの関連キャッシュも無効化されます。
例
-
カタログを更新します。例:
REFRESH CATALOG hive; -
データベースを更新します。例:
REFRESH DATABASE ctl.database1; REFRESH DATABASE database1; -
テーブルを更新します。例:
REFRESH TABLE ctl.db.table1; REFRESH TABLE db.table1; REFRESH TABLE table1;
定期更新
定期的な更新を有効にするには、カタログの作成時に metadata_refresh_interval_sec パラメーターを設定します。マスターフロントエンド (FE) ノードは、指定された間隔でカタログを定期的に更新します。現在、定期的な更新をサポートしているのは、3 種類のデータソースタイプのみです。
-
HMS:Hive Metastore (HMS)
-
ES:Elasticsearch (ES)
-
JDBC:Java Database Connectivity (JDBC)
-- カタログの更新間隔を 20 秒に設定
CREATE CATALOG es PROPERTIES (
"type"="es",
"hosts"="http://127.0.0.1:9200",
"metadata_refresh_interval_sec"="20"
);
自動更新
現在、Hive データソースからの特定のイベントのみが自動カタログ更新をトリガーします。詳細については、「Hive データソース」をご参照ください。