すべてのプロダクト
Search
ドキュメントセンター

MaxCompute:GET_DATA_FROM_OSS

最終更新日:Nov 03, 2025

GET_DATA_FROM_OSS 関数は、オブジェクトのコンテンツのすべてまたは一部を読み取り、バイナリ値として返します。

ユースケース

MaxCompute はオブジェクトテーブル機能を提供します。この機能により、コンピュートエンジンは OSS に保存されている非構造化データとそのメタデータにアクセスできます。詳細については、「OBJECT TABLE の定義」をご参照ください。

オブジェクトテーブルは、特定のパスにある OSS オブジェクトのメタデータを保存します。GET_DATA_FROM_OSS 関数を使用して、指定された OSS オブジェクトのバイナリコンテンツを動的に読み込むことができます。

構文

BINARY GET_DATA_FROM_OSS (
  STRING <full_object_table_name>,
  STRING <key> 
  [, BIGINT <offset>]              
  [, BIGINT <length>] 
  [, STRING <object_not_found_policy>] 
)

パラメーター

パラメーター

必須

データの型

説明

デフォルト値

full_object_table_name

はい

STRING

3 層モデルにおける OBJECT TABLE への完全なパスで、project.schema.object_table のようにプロジェクト名とスキーマ名を含みます。

テーブル作成時に RoleARN を使用して認証する場合、このパラメーターは OSS へのアクセスに必要なセキュリティトークンサービス (STS) トークンを自動的に生成するのに役立ちます。

なし

key

はい

STRING

オブジェクトテーブル内でアクセスされるオブジェクトの名前です。詳細については、「OBJECT TABLE のプロパティの表示」で説明されている応答の `key` パラメーターの説明をご参照ください。

なし

offset

いいえ

BIGINT

オブジェクトのコンテンツを読み取る開始位置です。値は 0 以上である必要があります。

0。これは、読み取り操作がオブジェクトの先頭から開始されることを意味します。

length

いいえ

BIGINT

読み取るバイト数です。

-1。これは、長さが制限されないことを意味します。

object_not_found_policy

いいえ

STRING

オブジェクトキーがキャッシュデータに存在するものの、オブジェクトが OSS にはもう存在しない場合に、MaxCompute が関数呼び出しの結果をどのように返すかを指定します。有効な値:

  • OUTPUT_NULL: 例外をスローしません。出力は NULL です。

  • THROW_EXCEPTION: 例外をスローし、現在のタスクを終了します。

  • WARN_AND_NULL: 例外をスローせずに NULL を返します。オブジェクトが存在しないことを示すログエントリが SQL ランタイム出力に追加されます。この不整合が多くのオブジェクトで発生する場合、タスク全体のパフォーマンスに影響が及ぶ可能性があります。

デフォルト値は OUTPUT_NULL です。

戻り値

BINARY 型の値を返します。

以下の例では、project_name パラメーターを実際の MaxCompute プロジェクト名に置き換えてください。

データの準備

  1. OSS コンソールにログインし、テストデータ signedget.txtobject-table-test/object_table_folder フォルダにアップロードします。詳細については、「ファイルのアップロード」をご参照ください。

  2. DataWorks でローカルクライアント (odpscmd) を使用するか、MaxCompute SQL ノードを作成して、オブジェクトテーブルを作成し、メタデータキャッシュをリフレッシュできます。詳細については、「OBJECT TABLE の作成」をご参照ください。この例では、OBJECT TABLE の名前は ot_demo_day です。

    -- MaxCompute プロジェクトのオブジェクトテーブル機能はスキーマをサポートしています。3 層モデルを有効にします。
    SET odps.namespace.schema=true;
    
    -- MaxCompute プロジェクトを選択します。
    USE <project_name>;
    
    -- スキーマを選択します。
    USE SCHEMA <schema_name>;
    
    -- MaxCompute プロジェクトのオブジェクトテーブル機能は 2.0 データ型システムをサポートしています。
    SET odps.sql.type.system.odps2=true;
    
    -- オブジェクトテーブルを作成します。
    CREATE OBJECT TABLE ot_demo_day 
    WITH serdeproperties ( 
     'odps.properties.rolearn'='acs:ram::xxxxxx:role/aliyunodpsdefaultrole') 
    LOCATION 'oss://oss-cn-hangzhou-internal.aliyuncs.com/object-table-test/object_table_folder';
    
    -- テーブルキャッシュをリフレッシュします。
    ALTER TABLE ot_demo_day REFRESH METADATA;

例 1

オブジェクトテーブルのすべてのコンテンツを読み取り、バイナリ値として返します。オブジェクトテーブルの完全なパスは <project_name>.default.ot_demo_day です。以下のコードは、さまざまなパラメーターの組み合わせを示しています。

-- 完全なフォーマット。
SELECT GET_DATA_FROM_OSS('<project_name>.default.ot_demo_day', key, 0, -1, 'OUTPUT_NULL') FROM ot_demo_day;

-- 以下の文は get_data_from_oss('<project_name>.default.ot_demo_day', key, 0, -1, 'OUTPUT_NULL') と同等です。
SELECT GET_DATA_FROM_OSS('<project_name>.default.ot_demo_day', key) FROM ot_demo_day;

SELECT GET_DATA_FROM_OSS('<project_name>.default.ot_demo_day', key, 0) FROM ot_demo_day;

SELECT GET_DATA_FROM_OSS('<project_name>.default.ot_demo_day', key, 0, -1) FROM ot_demo_day;

SELECT GET_DATA_FROM_OSS('<project_name>.default.ot_demo_day', key, 'OUTPUT_NULL') FROM ot_demo_day;

SELECT GET_DATA_FROM_OSS('<project_name>.default.ot_demo_day', key, 0, 'OUTPUT_NULL') FROM ot_demo_day;

次の結果が返されます。

+------+
| _c0  |
+------+
| test=20maxcompute=20download=20files=20by=20url=20 |
+------+

例 2

GET_DATA_FROM_OSS 関数の結果を STRING 型として出力するには、`STRING` 関数内にネストします。

SELECT STRING(
  GET_DATA_FROM_OSS('<project_name>.default.ot_demo_day', key, 0, -1, 'OUTPUT_NULL')
) 
FROM ot_demo_day;

次の結果が返されます。

+-----+
| _c0 |
+-----+
| test maxcompute download files by url  |
+-----+

関連関数

GET_DATA_FROM_OSS 関数は、非構造化データを処理するために使用されます。非構造化データを処理する関数の詳細については、「非構造化データ処理のための関数」をご参照ください。