Hologres V1.3.26 以降では、OSS-HDFS からデータを読み書きできます。このトピックでは、Data Lake Formation (DLF) を使用して OSS-HDFS のデータにアクセスする方法について説明します。
背景情報
OSS-HDFS (JindoFS) は、クラウドネイティブのデータレイクストレージサービスです。 OSS-HDFS は、Hadoop エコシステムのコンピューティングエンジンとシームレスに統合されており、Hive および Spark に基づいてオフラインの抽出、変換、ロード (ETL) 操作が実行されるシナリオでは、ネイティブの OSS ストレージよりも優れたパフォーマンスを提供します。 OSS-HDFS の詳細については、「OSS-HDFS とは」をご参照ください。Hologres では、Data Lake Formation (DLF) を使用して、OSS-HDFS 内のデータのメタデータを管理できます。 また、JindoSDK を使用して OSS-HDFS のデータにアクセスし、データを OSS-HDFS に書き戻すこともできます。書き戻し機能は、ORC、Parquet、CSV、または SequenceFile 形式のテーブルのみをサポートしています。 DLF を使用して OSS からデータを読み書きする方法の詳細については、「DLF を使用して OSS からデータを読み書きする」をご参照ください。
前提条件
DLF がアクティブ化されていること。 詳細については、「クイックスタート」をご参照ください。 DLF がサポートされているリージョンの詳細については、「サポートされているリージョンとエンドポイント」をご参照ください。
OSS-HDFS が有効になっており、データが準備されていること。 詳細については、「OSS-HDFS を有効にしてアクセス権限を付与する」をご参照ください。
Hologres インスタンスでデータレイクアクセラレーションが有効になっていること。 詳細については、「環境を構成する」をご参照ください。
手順
OSS-HDFS が有効になっているバケットのエンドポイントを取得します。
Hologres で OSS-HDFS が有効になっているバケットのエンドポイントを構成する必要があります。 エンドポイントは、OSS コンソールのバケットの [概要] ページで取得できます。
外部サーバーを作成し、関連情報を構成します。
重要OSS-HDFS に格納されている複数の環境のデータにアクセスする場合は、複数の外部サーバーを構成する必要があります。 たとえば、OSS-HDFS のデータと OSS のデータにアクセスする場合は、OSS-HDFS のテーブルにマップされる外部テーブル用の外部サーバーと、OSS のテーブル用の外部サーバーを作成する必要があります。 OSS-HDFS の外部サーバーの場合は、oss_endpoint を OSS-HDFS が有効になっているバケットのエンドポイントに設定し、外部テーブルを作成して外部テーブルにデータをインポートするときに、この外部サーバーを指定します。 OSS の外部サーバーの場合は、oss_endpoint を OSS にアクセスするために使用するエンドポイントに設定します。
バケットのエンドポイントを取得したら、Hologres で DLF と OSS のエンドポイントを構成できます。構文:
CREATE EXTENSION IF NOT EXISTS dlf_fdw; CREATE SERVER IF NOT EXISTS <servername> FOREIGN data wrapper dlf_fdw options ( dlf_region 'cn-<region>', // DLF が存在するリージョンの ID dlf_endpoint 'dlf-share.cn-<region>.aliyuncs.com', // DLF のエンドポイント oss_endpoint '<bucket_name>.cn-<region>.oss-dls.aliyuncs.com' -- OSS-HDFS バケットのドメイン名 );
次の表に、上記のステートメントのパラメーターを示します。
パラメーター
説明
例
servername
サーバーの名前。
dlf_server
dlf_region
DLF が存在するリージョンの ID。
DLF がサポートされているリージョンの詳細については、「サポートされているリージョンとエンドポイント」をご参照ください。
cn-beijing
dlf_endpoint
DLF のエンドポイント。 アクセスパフォーマンスを向上させるために、DLF の内部エンドポイントを使用することをお勧めします。 DLF がサポートされているリージョンの詳細については、「サポートされているリージョンとエンドポイント」をご参照ください。
リージョンをまたがって DLF にアクセスする場合は、パブリックエンドポイントを使用する必要があります。
重要パブリックエンドポイントを使用したアクセスには、ネットワーク料金とパフォーマンスのオーバーヘッドが発生します。 ネットワーク料金の詳細については、「課金概要」をご参照ください。
dlf-share.cn-beijing.aliyuncs.com
oss_endpoint
手順 1 で取得した、OSS-HDFS が有効になっているバケットのエンドポイント。 OSS-HDFS には、内部エンドポイントを使用してのみアクセスできます。これは、リージョンをまたがって OSS-HDFS にアクセスできないことを示しています。
説明ネイティブ OSS を使用する場合は、アクセスパフォーマンスを向上させるために、OSS の内部エンドポイントを使用することをお勧めします。 リージョンをまたがって Hologres または DLF から OSS にアクセスする場合は、パブリックエンドポイントを使用する必要があります。 詳細については、「OSS ドメイン名」をご参照ください。
bucket_nametest.cn-hangzhou.oss-dls.aliyuncs.com
外部テーブルを作成し、外部テーブルを使用して OSS-HDFS からデータを読み書きします。
単一の外部テーブルを作成する。 dlfpro という名前の DLF メタデータベースにある dlf_oss_test という名前のメタデータテーブルにマップする外部テーブルを作成します。 外部テーブルは、Hologres の public スキーマにあります。
-- 方法 1 CREATE FOREIGN TABLE dlf_oss_test -- 外部テーブル名 ( id text, // 列名とデータ型 pt text ) SERVER dlf_server -- 作成された外部サーバー。 options ( schema_name 'dlfpro', // DLF メタデータベース名 table_name 'dlf_oss_test' // DLF メタデータテーブル名 ); -- 方法 2 IMPORT FOREIGN SCHEMA dlfpro LIMIT TO // DLF メタデータベース名 ( dlf_oss_test // DLF メタデータテーブル名 ) FROM SERVER dlf_server INTO public options (if_table_exist 'update'); // 既存のテーブルを更新
一度に複数の外部テーブルを作成する。 dlfpro という名前の DLF メタデータベース内のすべてのテーブルを Hologres の public スキーマにマップして、Hologres に複数の外部テーブルを作成します。 これらの外部テーブルには、DLF の dlfpro メタデータベース内のテーブルにちなんだ名前が付けられます。
dlfpro メタデータベース内のすべてのメタデータテーブルをマップします。
IMPORT FOREIGN SCHEMA dlfpro // DLF メタデータベース名 FROM SERVER dlf_server INTO public options (if_table_exist 'update'); // 既存のテーブルを更新
dlfpro メタデータベース内の指定されたメタデータテーブルをマップします。
IMPORT FOREIGN SCHEMA dlfpro // DLF メタデータベース名 ( table1, // マップする DLF メタデータテーブル名 table2, tablen ) FROM SERVER dlf_server INTO public options (if_table_exist 'update'); // 既存のテーブルを更新
データをクエリします。
1 つ以上の外部テーブルが作成された後、これらの外部テーブルのデータをクエリして OSS データを読み取ることができます。 外部テーブルは、Hologres のスキーマまたは HoloWeb コンソールのテーブルスキーマディレクトリで表示できます。 CSV、Parquet、または ORC 形式の外部テーブルにデータを書き戻すことができます。
パーティション化されていないテーブルからデータをクエリします。
SELECT * FROM dlf_oss_test; // 外部テーブル名
パーティションテーブルからデータをクエリします。
SELECT * FROM <partition_table> where dt = '2013'; // パーティションテーブル名とパーティションキー
詳細については、「DLF を使用して OSS からデータを読み書きする」の手順セクションをご参照ください。