このトピックでは、ApsaraDB for SelectDB が提供する統合クエリテクノロジーを使用して、データレイク、データベース、リモートファイルなどの外部データソースに対して統合分析を実行する方法について説明します。これにより、シンプルで高速なデータ分析エクスペリエンスが提供されます。
概要
ApsaraDB for SelectDB は、データレイクやデータベースなどの外部データソースに接続して、シンプルで高速なデータ分析を行うためのマルチカタログ機能を提供します。マルチカタログ機能に基づいて、ApsaraDB for SelectDB は新しい 3 層のメタデータ階層を提供します。catalog -> database -> table。カタログは外部データソースを直接マッピングします。ApsaraDB for SelectDB でサポートされている外部データソースの詳細については、「データレイク分析」をご参照ください。
ApsaraDB for SelectDB は、テーブル値関数(TVF)も提供しています。これを使用して、Amazon Simple Storage Service(Amazon S3)や Hadoop Distributed System(HDFS)などの一般的なリモートストレージ内のファイルデータを ApsaraDB for SelectDB のテーブルにマッピングできます。これにより、ファイルデータの分析が容易になります。詳細については、「ファイル分析」をご参照ください。
このトピックでは、カタログの用語と使用方法について説明します。マルチカタログ機能は ApsaraDB for SelectDB の機能を拡張し、ApsaraDB for SelectDB は内部データを管理できるだけでなく、外部データソースを効率的に統合およびクエリすることもできます。カタログを使用すると、ApsaraDB for SelectDB から異なるデータウェアハウスおよびストレージシステムに格納されているデータに効率的にアクセスして分析できます。これにより、より柔軟で包括的なデータ管理と分析を実装できます。
用語と操作
内部カタログ
ApsaraDB for SelectDB の既存のデータベースとテーブルはすべて内部カタログに属します。内部カタログは、ApsaraDB for SelectDB の組み込みのデフォルトカタログであり、変更または削除することはできません。
外部カタログ
CREATE CATALOGステートメントを実行することで、外部カタログを作成できます。SHOW CATALOGSステートメントを実行してすべてのカタログを表示するか、SHOW CREATE CATALOG <catalog_name>;ステートメントを実行してカタログの作成ステートメントをクエリできます。カタログへの切り替え
ApsaraDB for SelectDB にログオンすると、デフォルトで内部カタログが使用されます。
SWITCHステートメントを実行して、カタログに切り替えることができます。例:SWITCH internal; SWITCH hive_catalog;カタログに切り替えた後、
SHOW DATABASESやUSE <db_name>などのステートメントを実行して、カタログ内のすべてのデータベースを表示したり、カタログ内のデータベースに切り替えたりできます。ApsaraDB for SelectDB は、カタログを使用して外部データソースのデータベースとテーブルに自動的にアクセスします。内部カタログを使用するのと同じ方法で、外部カタログのデータを表示およびアクセスできます。ApsaraDB for SelectDB は、外部カタログのデータへの読み取り専用アクセスをサポートしています。カタログの削除
外部カタログのデータベースとテーブルは読み取り専用です。ただし、必要に応じて、
DROP CATALOG <catalog_name>;ステートメントを実行して外部カタログを削除できます。内部カタログは削除できません。説明この操作は、ApsaraDB for SelectDB のカタログに関するマッピング情報を削除するだけであり、外部データソースの内容を変更することはありません。
列タイプのマッピング
外部データソースのカタログを作成した後、ApsaraDB for SelectDB は外部データソースからカタログにデータベースとテーブルを自動的に同期します。さまざまなタイプのカタログとテーブルについて、ApsaraDB for SelectDB は列タイプ間のマッピングを実行します。
UNION や INTERVAL など、ApsaraDB for SelectDB の列タイプにマッピングできない外部データタイプの場合、ApsaraDB for SelectDB はそれらを UNSUPPORTED にマッピングします。次のサンプルコードは、マッピングされたタイプと UNSUPPORTED タイプのクエリ結果を示しています。
-- 同期後のテーブルスキーマ:
k1 INT, // k1 整数型
k2 INT, // k2 整数型
k3 UNSUPPORTED, // k3 サポートされていない型
k4 INT // k4 整数型
-- クエリ結果:
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 は独自の権限管理機能を使用して、外部カタログのデータベースとテーブルへのアクセスを制御します。マルチカタログ機能に加えて、権限管理がカタログレベルで追加されます。詳細については、「権限管理」をご参照ください。
データベース同期管理
カタログの include_database_list パラメーターと exclude_database_list パラメーターを構成することで、同期するデータベースを指定できます。
include_database_list: 同期するデータベース。このプロパティで指定されたデータベースのみが同期されます。データベース名はカンマ(,)で区切ります。デフォルトでは、すべてのデータベースが同期されます。データベース名は大文字と小文字が区別されます。exclude_database_list: 同期する必要のないデータベース。データベース名はカンマ(,)で区切ります。このパラメーターはデフォルトでは空であり、すべてのデータベースが同期されることを示します。データベース名は大文字と小文字が区別されます。
exclude_database_list パラメーターは、
include_database_listパラメーターよりも優先されます。データベースがinclude_database_listパラメーターとexclude_database_listパラメーターの両方で指定されている場合、データベースは同期されません。カタログを使用して Java Database Connectivity(JDBC)データソースに接続する場合、上記の 2 つのパラメーターを
only_specified_databaseパラメーターと共に使用する必要があります。詳細については、「JDBC データソース」をご参照ください。
メタデータの更新
デフォルトでは、テーブルや列の作成と削除など、外部データソースのメタデータの変更は ApsaraDB for SelectDB に同期されません。メタデータを更新するには、次のいずれかの方法を使用できます。
手動更新
REFRESH ステートメントを実行して、メタデータを手動で更新します。
構文
REFRESH CATALOG catalog_name; // カタログ catalog_name を更新します
REFRESH DATABASE [catalog_name.]database_name; // データベース database_name を更新します
REFRESH TABLE [catalog_name.][database_name.]table_name; // テーブル table_name を更新します
カタログを手動で更新すると、パーティションキャッシュ、スキーマキャッシュ、ファイルキャッシュなど、オブジェクト関連のキャッシュが無効になります。
例
カタログを更新します。
REFRESH CATALOG hive; // hive カタログを更新しますデータベースを更新します。
REFRESH DATABASE ctl.database1; // ctl カタログの database1 データベースを更新します REFRESH DATABASE database1; // 現在のカタログの database1 データベースを更新しますテーブルを更新します。
REFRESH TABLE ctl.db.table1; // ctl カタログの db データベースの table1 テーブルを更新します REFRESH TABLE db.table1; // 現在のカタログの db データベースの table1 テーブルを更新します REFRESH TABLE table1; // 現在のデータベースの table1 テーブルを更新します
スケジュール更新
カタログを作成するときに、properties の metadata_refresh_interval_sec パラメーターを指定することで、スケジュール更新を有効にできます。スケジュール更新間隔は秒単位で測定されます。このパラメーターを指定すると、FE マスターノードはこのパラメーターの値に基づいてカタログを定期的に更新します。次の 3 種類のデータソースのみがスケジュール更新をサポートしています。
Hive Metastore Service(HMS)
Elasticsearch
JDBC データソース
-- カタログの更新間隔を 20 秒に設定します。
CREATE CATALOG es PROPERTIES (
"type"="es",
"hosts"="http://127.0.0.1:9200",
"metadata_refresh_interval_sec"="20" // metadata_refresh_interval_sec を 20 に設定します
);
自動更新
Hive データソースの特定のイベントのみがカタログに自動的に更新されます。詳細については、「Hive データソース」トピックの「Hive データソース」セクションをご参照ください。