Hologres のバージョン 1.3.26 以降では、Object Storage Service (OSS)-HDFS からのデータ読み取りおよび OSS-HDFS へのデータ書き込みがサポートされます。本トピックでは、Data Lake Formation (DLF) を使用して OSS-HDFS データレイク内のデータにアクセスする方法について説明します。
背景情報
OSS-HDFS(JindoFS)は、クラウドネイティブなデータレイクストレージサービスです。ネイティブの OSS と比較して、OSS-HDFS は Hadoop エコシステム内のコンピュートエンジンとシームレスに統合されます。これにより、Hive や Spark を使用する典型的なオフライン抽出・変換・書き出し(ETL)シナリオにおいて、より優れたアクセスパフォーマンスを実現します。OSS-HDFS の詳細については、「OSS-HDFS サービスとは?」をご参照ください。OSS-HDFS に格納されたデータに対しては、Hologres がメタデータ管理に DLF を、直接のデータ読み取りおよび書き戻しに JindoSDK を使用します。現在、書き戻しは ORC、Parquet、CSV、SequenceFile 形式のテーブルのみでサポートされています。DLF を使用した OSS へのデータ読み取りおよび書き込みの詳細については、「DLF を使用した OSS データレイクへのアクセスの高速化」をご参照ください。
前提条件
DLF を有効化済みであること。詳細については、「クイックスタート」をご参照ください。対応リージョンの一覧については、「リージョンとエンドポイント」をご参照ください。
OSS-HDFS を有効化し、データを準備済みであること。詳細については、「OSS-HDFS サービスの有効化」をご参照ください。
Hologres インスタンスでデータレイクアクセラレーション機能を有効化済みであること。詳細については、「環境構成」をご参照ください。
注意事項
OSS-HDFS バケットのドメイン名を確認します。
OSS-HDFS のサービスタイプのドメイン名を Hologres で設定する必要があります。このドメイン名は、OSS コンソールのバケットの [概要] ページで確認できます。なお、対象のバケットに対して OSS-HDFS サービスが有効化されている必要があります。

外部サーバーを作成および構成します。
重要複数の OSS-HDFS 環境から同時にデータにアクセスする場合は、それぞれの環境に対応する複数の外部サーバーを構成する必要があります。たとえば、OSS-HDFS に格納されている外部テーブルにアクセスするには、個別の外部サーバーを作成する必要があります。oss_endpoint パラメーターには、OSS-HDFS のエンドポイントを指定します。外部テーブルのインポートまたは作成時に、この外部サーバーを指定します。同様に、OSS に格納されているデータテーブルにアクセスする場合も、個別の外部サーバーを作成し、対応する 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_endpoint 'dlf-share.cn-<region>.aliyuncs.com', oss_endpoint '<bucket_name>.cn-<region>.oss-dls.aliyuncs.com' -- OSS-HDFS バケットのドメイン名 );パラメーターの説明:
パラメーター名
説明
例
servername
サーバーのカスタム名です。
dlf_server
dlf_region
DLF が配置されているリージョンです。必要に応じてリージョンを選択してください。
対応リージョンの一覧については、「リージョンとエンドポイント」をご参照ください。
cn-beijing
dlf_endpoint
より高いアクセスパフォーマンスを得るためには、DLF のプライベートサービスエンドポイントを使用してください。対応リージョンの一覧については、「リージョンとエンドポイント」をご参照ください。
クロスリージョンアクセスを行う場合は、パブリックエンドポイントを使用してください。
重要パブリックエンドポイントを使用するとネットワーク料金が発生し、パフォーマンスが低下する可能性があります。ネットワーク料金の詳細については、「課金概要」をご参照ください。
dlf-share.cn-beijing.aliyuncs.comoss_endpoint
手順 1 で確認した OSS-HDFS のエンドポイントです。OSS-HDFS は現在、プライベートネットワークアクセスのみをサポートしています。つまり、デフォルトではクロスリージョンアクセスはサポートされていません。
説明ネイティブの OSS ストレージを利用する場合は、より高いアクセスパフォーマンスを得るために OSS のプライベートエンドポイントを使用してください。Hologres および DLF とのクロスリージョン連携を行う場合は、パブリックエンドポイントを使用してください。詳細については、「IPv6 による OSS へのアクセス」をご参照ください。
bucket_nametest.cn-hangzhou.oss-dls.aliyuncs.comOSS-HDFS からのデータ読み取りおよび書き込み用に外部テーブルを作成します。
単一テーブルの作成:DLF のメタデータベース dlfpro 内のメタデータテーブル dlf_oss_test をマップする外部テーブルを作成できます。この外部テーブルは、Hologres の public スキーマ内に作成されます。
-- 方法 1 CREATE FOREIGN TABLE dlf_oss_test ( id text, pt text ) SERVER dlf_server -- 作成済みの外部サーバー options ( schema_name 'dlfpro', table_name 'dlf_oss_test' ); -- 方法 2: IMPORT FOREIGN SCHEMA dlfpro LIMIT TO ( dlf_oss_test ) FROM SERVER dlf_server INTO public options (if_table_exist 'update');複数テーブルの作成:DLF のメタデータベース dlfpro に含まれるすべてのテーブルを、Hologres の public スキーマにマップできます。この操作により、対応する外部テーブルが Hologres に一括で作成されます。
データベース全体をインポート:
IMPORT FOREIGN SCHEMA dlfpro FROM SERVER dlf_server INTO public options (if_table_exist 'update');複数のテーブルをインポート:
IMPORT FOREIGN SCHEMA dlfpro ( table1, table2, tablen ) FROM SERVER dlf_server INTO public options (if_table_exist 'update');
データをクエリします。
外部テーブルを作成後、Hologres の対応するスキーマ内、または HoloWeb の [テーブルスキーマ] フォルダ内に表示されます。外部テーブルをクエリすることで OSS からデータを読み取ることができます。また、CSV、Parquet、ORC 形式の外部テーブルにはデータを書き戻すことも可能です。
非パーティション化テーブルのクエリ
SELECT * FROM dlf_oss_test;パーティションテーブルのクエリ
SELECT * FROM <partition_table> WHERE dt = '2013';
手順の詳細については、「操作手順」をご参照ください。