Hologres V2.2 以降では、Hive Metastore Service (HMS) を使用して Object Storage Service (OSS) データレイクのデータにアクセスできます。E-MapReduce (EMR) クラスタを使用して OSS ベースのデータレイクを構築する場合、Hologres で簡単な構成を使用して、OSS および OSS-HDFS からのデータの読み取りまたは書き込みの速度を向上させることができます。
前提条件
OSS がアクティブ化されていること。詳細については、「OSS コンソールを使用して開始する」をご参照ください。
DataLake クラスタが作成され、テストデータが準備されていること。詳細については、「クラスタを作成する」をご参照ください。DataLake クラスタが以下の要件を満たしていることを確認してください。
DataLake クラスタの Hive バージョンが 3.1.3 以降であること。
Kerberos 認証が有効になっていないこと。
メタデータ パラメータが セルフマネージド RDS または 組み込み Mysql に設定されていること。
Hologres インスタンスが購入され、インスタンスに対してデータレイクアクセラレーションが有効になっており、インスタンスにデータベースが作成されていること。詳細については、「Hologres インスタンスを購入する」および「データベースを作成する」をご参照ください。
説明データレイクアクセラレーションを有効にするには、Hologres コンソールにログインし、[インスタンス] ページで目的のインスタンスを見つけ、[アクション] 列の [データレイクアクセラレーション] をクリックします。表示されるメッセージで、[有効にする] をクリックします。
ネットワーク接続が確立されていること。
こちらをクリックして、ネットワーク接続を確立するためのリクエストを申請する必要があります。リクエストを受け取ると、Alibaba Cloud Hologres エンジニアがネットワーク接続の作成を支援します。手順:
仮想プライベートクラウド (VPC) コンソールにログインし、リバースエンドポイントを作成します。詳細については、「エンドポイントの作成と管理」をご参照ください。リバースエンドポイントを作成する際は、[エンドポイントサービス] パラメータを その他のエンドポイントサービス に設定し、EMR インスタンスが存在するリージョンのエンドポイントサービス名を入力します。次の表に、さまざまなリージョンのエンドポイントサービス名を示します。
リージョン
エンドポイントサービス名
中国 (北京)
com.aliyuncs.privatelink.cn-beijing.epsrv-2zeokrydzjd6kx3cbwmb
中国 (上海)
com.aliyuncs.privatelink.cn-shanghai.epsrv-uf61fvlfwta7f7dv9n3x
中国 (張家口)
com.aliyuncs.privatelink.cn-zhangjiakou.epsrv-8vbno4k4wwvys0eg2swp
説明上記の表にリージョンが含まれていない場合は、リクエストを送信した後、Hologres エンジニアがリージョンにエンドポイントサービスを作成し、サービス名を提供します。
VPC は、Alibaba Cloud 上に構築された分離されたネットワーク環境です。VPC とクラシックネットワークは論理的に分離されており、デフォルトでは相互にアクセスできません。Hologres サービスは VPC より前に開始され、クラシックネットワークにデプロイされています。そのため、ネットワーク接続を実装するには、リバースエンドポイントを構成する必要があります。
ネットワーク接続は IP アドレスに基づいて確立されます。DataLake クラスタの IP アドレスが変更された場合は、ネットワーク接続を再構成する必要があります。
制限事項
データレイクアクセラレーション機能は、Hologres 読み取り専用セカンダリインスタンスではサポートされていません。
外部テーブルに対して、
UPDATE、DELETE、TRUNCATEなどの特定の操作を実行することはできません。自動ロード機能を使用して Hologres に HMS 外部テーブルを作成することはできません。
Kerberos 認証が有効になっている Hive クラスタはサポートされていません。
手順
次の SQL ステートメントを実行して、拡張機能をインストールします。
拡張機能をインストールするには、スーパーユーザー権限が付与されている必要があります。拡張機能はデータベースレベルでインストールされます。各データベースについて、拡張機能を一度だけインストールする必要があります。
CREATE EXTENSION IF NOT EXISTS hive_fdw;hive_fdwに基づいて外部サーバーを作成し、エンドポイント情報を構成します。CREATE SERVER IF NOT EXISTS <server_name> FOREIGN DATA WRAPPER hive_fdw OPTIONS ( hive_metastore_uris 'thrift://<IP address of HMS>:<Port number>', /* HMS の IP アドレスとポート番号を指定 */ oss_endpoint 'oss-<nation>-<region>-internal.aliyuncs.com | <bucket>.oss-<nation>-<region>.oss-dls.aliyuncs.com' /* OSS のエンドポイントを指定 */ );パラメータ
必須
説明
例
server_name
はい
外部サーバーの名前。
hive_server
hive_metastore_uris
はい
HMS の Uniform Resource Identifier (URI)。値は
thrift://<HMS の IP アドレス>:<ポート番号>の形式で指定します。デフォルトのポート番号は 9083 です。説明EMR コンソールにログインし、目的のクラスタを見つけて、[アクション] 列の [ノード] をクリックします。[ノード] タブで、マスターノードの 内部 IP アドレス (HMS の IP アドレス) を取得できます。
thrift://172.16.0.250:9083
oss_endpoint
はい
OSS のエンドポイント。ビジネス要件に基づいて OSS エンドポイントを選択します。
ネイティブ OSS: アクセスパフォーマンスを最適化するために、OSS 内部エンドポイントを使用することをお勧めします。
OSS-HDFS: アクセスには内部エンドポイントのみを使用できます。
説明OSS コンソールにログインし、目的のバケットをクリックします。目的のバケットの [概要] ページで、[ポート] セクションの OSS エンドポイントを取得できます。
OSS
oss-cn-shanghai-internal.aliyuncs.comOSS-HDFS
<bucket_name>.cn-beijing.oss-dls.aliyuncs.com
オプション。ユーザーマッピングを作成します。
Hologres では、
CREATE USER MAPPINGステートメントを実行して、特定のユーザーが外部サーバーにアクセスできるようにすることができます。たとえば、外部サーバーの所有者としてCREATE USER MAPPINGステートメントを実行して、ユーザー ID (UID) が 123xxx の RAM ユーザーが OSS データにアクセスできるようにすることができます。CREATE USER MAPPINGステートメントの詳細については、「CREATE USER MAPPING」をご参照ください。CREATE USER mapping FOR <User account> server <server_name> options /* 特定のユーザーアカウントに外部サーバーへのアクセスを許可 */ ( dlf_access_id '<yourAccessKeyId>', /* アクセス ID を指定 */ dlf_access_key '<yourAccessKeySecret>', /* アクセスキーを指定 */ oss_access_id '<yourAccessKeyId>', /* アクセス ID を指定 */ oss_access_key '<yourAccessKeySecret>' /* アクセスキーを指定 */ );サンプルコード:
-- Alibaba Cloud アカウントのユーザーマッピングを作成します。 CREATE USER mapping FOR current_user server <server_name> options ( dlf_access_id 'yourAccessKeyId', dlf_access_key 'yourAccessKeySecret', oss_access_id 'yourAccessKeyId', oss_access_key 'yourAccessKeySecret' ); -- UID が 123xxx の RAM ユーザーのユーザーマッピングを作成します。 CREATE USER mapping FOR "p4_123xxx" server <server_name> options ( dlf_access_id 'yourAccessKeyId', dlf_access_key 'yourAccessKeySecret', oss_access_id 'yourAccessKeyId', oss_access_key 'yourAccessKeySecret' ); -- ユーザーマッピングを削除します。 Drop USER MAPPING FOR CURRENT_USER server <server_name>; Drop USER MAPPING FOR "p4_123xxx" server <server_name>;外部テーブルを作成します。
Hologres では、次の方法で外部テーブルを作成できます。
CREATE FOREIGN TABLE: 一度に 1 つの外部テーブルのみを作成できます。外部テーブルにマップする列を指定できます。この方法は、少数の外部テーブルを作成する必要があるシナリオや、特定のフィールドのみをマッピングする必要があるシナリオに適しています。
IMPORT FOREIGN SCHEMA: 複数の外部テーブルを同時に作成できます。この方法は、複数の外部テーブルを作成する必要があるシナリオや、ソーステーブルのすべての列をマッピングする必要があるシナリオに適しています。
説明Hologres では、OSS のパーティションテーブルからデータを読み取り、TEXT、VARCHAR、INT 型の列をパーティションキー列として構成できます。CREATE FOREIGN TABLE ステートメントを使用する場合は、フィールドマッピングを構成する必要があります。この方法では、データは保存されず、パーティションキー列は通常のフィールドと同じ方法で構成されます。IMPORT FOREIGN SCHEMA ステートメントを使用すると、システムは自動的にフィールドマッピングを作成します。
IMPORT FOREIGN SCHEMA ステートメントを使用し、作成する OSS 外部テーブルの名前が Hologres の内部テーブルの名前と同じである場合、システムは外部テーブルを作成せず、他の外部テーブルの作成を続行します。この場合は、CREATE FOREIGN TABLE ステートメントを使用して、一意の名前で外部テーブルを作成することをお勧めします。
-- CREATE FOREIGN TABLE ステートメントを使用します。 /* CREATE FOREIGN TABLE を使用した外部テーブルの作成 */ CREATE FOREIGN TABLE <holo_schema_name>.<table_name> /* スキーマ名とテーブル名を指定 */ ( { column_name data_type } /* 列名とデータ型を指定 */ [, ... ] ] ) ) SERVER <hive_server_name> /* 外部サーバー名を指定 */ OPTIONS ( schema_name '<ext_db_name>', /* 外部データベース名を指定 */ table_name '<ext_table_name>' /* 外部テーブル名を指定 */ ); -- IMPORT FOREIGN SCHEMA ステートメントを使用します。 /* IMPORT FOREIGN SCHEMA を使用した外部テーブルの作成 */ IMPORT FOREIGN SCHEMA <ext_db_name> /* 外部データベース名を指定 */ [ { limit TO | EXCEPT } /* 特定のテーブルを制限または除外 */ ( table_name [, ...] ) /* テーブル名を指定 */ ] FROM server <hive_server_name> /* 外部サーバー名を指定 */ INTO <holo_schema_name> /* Hologres のスキーマ名を指定 */ options( if_table_exist 'update', /* 既存のテーブルの処理方法を指定 */ if_unsupported_type 'error' /* サポートされていない型の処理方法を指定 */ );外部テーブルを使用してデータをクエリします。
外部テーブルを作成した後、外部テーブルを使用して OSS のデータをクエリできます。
パーティション化されていないテーブル
SELECT * FROM <holo_schema>.<hive_table>;パーティションテーブル
SELECT * FROM <holo_schema>.<hive_partition_table> WHERE <partition_key> = '<partition_value>';