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 への完全なパスで、 テーブル作成時に RoleARN を使用して認証する場合、このパラメーターは OSS へのアクセスに必要なセキュリティトークンサービス (STS) トークンを自動的に生成するのに役立ちます。 | なし |
key | はい | STRING | オブジェクトテーブル内でアクセスされるオブジェクトの名前です。詳細については、「OBJECT TABLE のプロパティの表示」で説明されている応答の `key` パラメーターの説明をご参照ください。 | なし |
offset | いいえ | BIGINT | オブジェクトのコンテンツを読み取る開始位置です。値は 0 以上である必要があります。 | 0。これは、読み取り操作がオブジェクトの先頭から開始されることを意味します。 |
length | いいえ | BIGINT | 読み取るバイト数です。 | -1。これは、長さが制限されないことを意味します。 |
object_not_found_policy | いいえ | STRING | オブジェクトキーがキャッシュデータに存在するものの、オブジェクトが OSS にはもう存在しない場合に、MaxCompute が関数呼び出しの結果をどのように返すかを指定します。有効な値:
| デフォルト値は OUTPUT_NULL です。 |
戻り値
BINARY 型の値を返します。
例
以下の例では、project_name パラメーターを実際の MaxCompute プロジェクト名に置き換えてください。
データの準備
OSS コンソールにログインし、テストデータ signedget.txt を
object-table-test/object_table_folderフォルダにアップロードします。詳細については、「ファイルのアップロード」をご参照ください。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 関数は、非構造化データを処理するために使用されます。非構造化データを処理する関数の詳細については、「非構造化データ処理のための関数」をご参照ください。