本トピックでは、Data Lake Formation (DLF) を設定して Object Storage Service (OSS) に保存されているデータからメタデータを抽出する方法について説明します。その後、MaxCompute の外部スキーマを使用して、データレイク内のデータに対してフェデレーテッドクエリを実行できます。このソリューションにより、データ分析と処理が簡素化され、データの信頼性とセキュリティが確保されます。
注意事項
有効化済みのサービス
OSS サービスが有効化されていること。
DLF サービスが有効化されていること。
MaxCompute プロジェクトが作成され、プロジェクトレベルのメタデータに対するスキーマサポートが有効化されていること。
サポート対象リージョン
リージョン名
リージョン ID
中国 (杭州)
cn-hangzhou
中国 (上海)
cn-shanghai
中国 (北京)
cn-beijing
中国 (張家口)
cn-zhangjiakou
中国 (深セン)
cn-shenzhen
中国 (香港)
cn-hongkong
シンガポール
ap-southeast-1
ドイツ (フランクフルト)
eu-central-1
MaxCompute、OSS、DLF は同一リージョンにデプロイする必要があります。
操作手順
ステップ 1:MaxCompute に DLF と OSS へのアクセス権限を付与
MaxCompute プロジェクトに関連付けられたアカウントには、DLF および OSS サービスへのアクセス権限が必要です。以下のいずれかの権限付与方法を使用できます:
ワンクリック権限付与:MaxCompute プロジェクトと DLF サービスの両方で同じアカウントを使用している場合、DLF への権限付与 をクリックします。
カスタム権限付与:異なるアカウントを使用している場合は、カスタム権限付与 方法を使用します。
ステップ 2:OSS データの準備
OSS コンソールにログインし、バケットを作成します。この例では、バケット名は
mc-lakehouse-dlf-ossです。詳細については、「バケットの作成」をご参照ください。この例では、パーティションテーブルを使用します。バケット内に
mc_dlf_oss_pt/という名前のルートフォルダを作成します。次に、ルートフォルダ内に 4 つのサブディレクトリを作成し、それぞれにファイルをアップロードします:direction=N/: vehicle1.csvdirection=NE/: vehicle2.csvdirection=S/:vehicle3.csvdirection=SW/: vehicle4.csv
ステップ 3:DLF 1.0 を使用した OSS メタデータの抽出
Data Lake Formation (DLF) コンソールにログインし、左上のコーナーでリージョンを選択します。
左側のナビゲーションウィンドウで、 を選択します。
Metadata ページで、Database タブをクリックします。
[default] Catalog List で、Create Database をクリックします。次のパラメーターを設定します:
[メタデータ管理] ページで、[データベース] タブをクリックします。[default] データカタログで、[データベースの作成] をクリックします。次のパラメーターを設定します:
パラメーター
必須
説明
Catalog
必須
この例では、データカタログは [default] です。
Database Name:
必須
カスタムのデータベース名を入力します。名前は英字で始まり、長さは 1~128 文字で、英字、数字、アンダースコア (_) のみを含めることができます。例:
dlf_oss_csv。Database Description:
任意
カスタムの説明を入力します。
Select Path:
必須
データベースのストレージ場所。例:
oss://mc-lakehouse-dlf-oss/metadb_save。左側のナビゲーションウィンドウで、 を選択します。
Set Extraction Source:
パラメーター
必須
説明
Extraction Task Name
このパラメーターは必須です。
抽出タスクのカスタム名を入力します。
Select OSS Path
必須
DLF automatically creates tables and partitions based on the OSS directory that you specified. Directory structure: oss://Selected path/Table name (Optional)/Partition name (Optional)/File name. For example, the data.csv file is used to extract metadata. If this file is saved to the oss://my-bucket/my-path/my-table/dt=1/ directory and the oss://my-bucket/my-path/ directory is selected, DLF uses my_table as the table name, dt as a partition, and the data.csv file as the table schema. All directory names that include the table name can contain letters, digits, and underscores (_), and must start with a letter.
Exclusion Mode
任意
Enter a regular expression to match the OSS directory that needs to be excluded
Parse Format
必須
このサービスは、Automatic Recognition、[json]、[csv]、[parquet]、[orc]、[hudi]、[delta]、[avro] など、複数のテーブルフォーマットを提供します。
Set Extraction Target:
パラメーター
必須
説明
Catalog
必須
ターゲット情報のデータカタログを選択します。
Destination Database
必須
既存のデータベースを選択します。例:
dlf_oss_csv。Destination Table Prefix
任意
Enter the prefix of the destination table. It must be 1 to 128 characters in length, and can contain letters, digits, and underscores (_). It must start with a letter.
Method to Handle Table Field Update
必須
Add Columns and Retain Existing Columns。
Update Table Schema and Generate Table Results Based on the last detected table schema (このオプションを選択すると、メタデータ抽出結果が同じ名前の既存のテーブルを上書きします。これにより、元のテーブルが失われたり、利用できなくなったりする可能性があります。)
Ignore Updates and Not Modify Table。
Method to Process Deleted OSS Objects
必須
Delete Metadata。
Ignore Updates and Not Delete Tables。
Set Extraction Task:
パラメーター
必須
説明
RAM Role
必須
Data Lake Formation はこのロールを偽装してリソースにアクセスします。デフォルトのシステムロール AliyunDLFWorkFlowDefaultRole を選択できます。
Execution Policy
任意
ジョブの実行ポリシー。
Manual
Scheduling
Extraction Policy
必須
Partial Data Extraction:各ファイルの一部のみをスキャンしてメタデータを抽出します。これによりジョブの実行時間は短縮されますが、完全な抽出よりも精度が低くなる可能性があります。メタデータを編集して情報を調整できます。
Extract All:すべてのデータファイルをスキャンしてメタデータを抽出します。大規模なデータセットでは時間がかかりますが、より正確な結果が得られます。
抽出されたテーブルの表示
左側のナビゲーションウィンドウで、 を選択します。
Metadata ページで、Database タブをクリックします。
この例では、抽出されたテーブルは
mc_dlf_oss_ptです。
新しいパーティションにデータを追加した場合は、抽出タスクを再度実行する必要があります。
ステップ 4:DLF 1.0 と OSS の外部データソースの作成
MaxCompute コンソールにログインし、左上のコーナーでリージョンを選択します。
左側のナビゲーションウィンドウで、 を選択します。
外部データソース ページで、外部データソースの作成 をクリックします。
外部データソースの追加 ダイアログボックスで、パラメーターを設定します。以下の表にパラメーターを説明します。
パラメーター
必須
説明
外部データソースタイプ
必須
[DLF+OSS] を選択します。
外部データソース名
必須
カスタム名を入力します。命名規則は次のとおりです:
名前は英字で始まり、小文字の英字、アンダースコア (_)、数字のみを含める必要があります。
名前は 128 文字を超えることはできません。
例:
dlf_oss_csv_new。外部データソースの説明
任意
必要に応じて説明を入力します。
地理
必須
現在のリージョンがデフォルトで選択されます。
DLF エンドポイント
必須
現在のリージョンの DLF エンドポイントがデフォルトで使用されます。
OSS エンドポイント
必須
現在のリージョンの OSS エンドポイントがデフォルトで使用されます。
[RoleARN]
必須
RAM ロールの Alibaba Cloud リソースネーム (ARN)。このロールには、DLF と OSS の両方のサービスにアクセスする権限が必要です。
左側のナビゲーションウィンドウで、 を選択します。
[基本情報] セクションで、[ARN] を取得します。
例:
acs:ram::124****:role/aliyunodpsdefaultrole。外部データソースの追加プロパティ
任意
外部データソースの追加属性を指定します。属性を指定した後、このデータソースを使用するタスクは、定義された動作に基づいてソースシステムにアクセスできます。
説明サポートされているパラメーターについては、公式ドキュメントの今後の更新をご参照ください。プロダクトの進化に伴い、より多くのパラメーターが利用可能になります。
[OK] をクリックして外部データソースを作成します。
外部データソース ページで、ターゲットのデータソースを見つけ、操作 列の 詳細 をクリックします。
ステップ 5:外部スキーマの作成
MaxCompute に接続し、次のコマンドを実行します:
SET odps.namespace.schema=true;
CREATE EXTERNAL SCHEMA IF NOT EXISTS <external_schema>
WITH <external_data_source>
ON '<dlf_data_catalogue>.dlf_database';パラメーターは次のように説明されます:
external_schema:外部スキーマのカスタム名。例:
es_dlf_oss_csv。external_data_source:作成した外部データソースの名前。外部スキーマを含むプロジェクトは、外部データソースと同じリージョンにある必要があります。例:
dlf_oss_csv。dlf_data_catalogue:DLF データカタログ ID。詳細については、「データカタログの作成」をご参照ください。例:
122****。dlf_database:指定された DLF データカタログ内のデータベース名。詳細については、「データベース、テーブル、および関数」をご参照ください。例:
dlf_oss_csv。
ステップ 6:SQL を使用した OSS データへのアクセス
MaxCompute クライアントにログインし、外部スキーマ内のテーブルをクエリします。
SET odps.namespace.schema=true;
USE schema es_dlf_oss_csv;
SHOW tables IN es_dlf_oss_csv;
-- The following result is returned:
ALIYUN$xxx:mc_dlf_oss_pt
OK外部スキーマ内の mc_dlf_oss_pt テーブルの詳細をクエリします。
SET odps.namespace.schema=true;
SELECT * FROM <project_name>.es_dlf_oss_csv.mc_dlf_oss_pt WHERE direction='NE';
-- The following result is returned:
+------------+------------+------------+------------+------------+------------+----------------+------------+
| _c0 | _c1 | _c2 | _c3 | _c4 | _c5 | _c6 | direction |
+------------+------------+------------+------------+------------+------------+----------------+------------+
| 1 | 2 | 13 | 1 | 46.81006 | -92.08174 | 9/14/2014 0:00 | NE |
| 1 | 3 | 48 | 1 | 46.81006 | -92.08174 | 9/14/2014 0:00 | NE |
| 1 | 9 | 4 | 1 | 46.81006 | -92.08174 | 9/15/2014 0:00 | NE |
+------------+------------+------------+------------+------------+------------+----------------+------------+ステップ 8:フェデレーテッド外部テーブルからデータウェアハウスへのデータコピー
フェデレーテッド外部テーブルからデータウェアハウスにデータをコピーします。
CREATE TABLE vehicle_copy AS SELECT * FROM <project_name>.es_dlf_oss_csv.mc_dlf_oss_pt WHERE direction='NE';データウェアハウス内のテーブルからデータをクエリします。
SELECT * FROM vehicle_copy; -- The following result is returned: +------------+------------+------------+------------+------------+------------+----------------+------------+ | _c0 | _c1 | _c2 | _c3 | _c4 | _c5 | _c6 | direction | +------------+------------+------------+------------+------------+------------+----------------+------------+ | 1 | 2 | 13 | 1 | 46.81006 | -92.08174 | 9/14/2014 0:00 | NE | | 1 | 3 | 48 | 1 | 46.81006 | -92.08174 | 9/14/2014 0:00 | NE | | 1 | 9 | 4 | 1 | 46.81006 | -92.08174 | 9/15/2014 0:00 | NE | +------------+------------+------------+------------+------------+------------+----------------+------------+