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

Simple Log Service:MaxCompute データ転送ジョブの作成 (新バージョン)

最終更新日:Dec 03, 2025

Simple Log Service (SLS) を使用すると、ログデータを MaxCompute に転送して、ストレージと分析を行うことができます。このトピックでは、MaxCompute データ転送ジョブ (新バージョン) の作成方法について説明します。

前提条件

  • SLS プロジェクトと Logstore が作成され、データ収集が完了していること。詳細については、「プロジェクトの管理」、「Logstore の作成」、「データ収集の概要」をご参照ください。

  • SLS プロジェクトが存在するリージョンに MaxCompute パーティションテーブルが作成されていること。詳細については、「テーブルの作成」をご参照ください。

注意事項

  • MaxCompute へのデータ転送をサポートしているリージョンについての詳細は、「サポートされているリージョン」をご参照ください。

  • `char` または `varchar` 型のフィールドの場合、値が指定された長さを超えると、データが MaxCompute に転送される際に超過した文字が切り捨てられます。

    例えば、長さの制限が 3 でフィールド値が 012345 の場合、MaxCompute での値は 012 になります。

  • `string`、`char`、または `varchar` 型のフィールドの場合、空の文字列値は MaxCompute に転送されると `Null` になります。

  • `datetime` フィールドの場合、値は `YYYY-MM-DD HH:mm:ss` フォーマットである必要があります。DD と HH の間には複数のスペースが許可されます。フォーマットが正しくない値は転送エラーにはなりませんが、MaxCompute では `Null` になります。

  • `date` フィールドの場合、フォーマットが正しくない値は転送エラーにはなりませんが、MaxCompute では `Null` になります。

  • `decimal` フィールドの場合、小数点以下の桁数が指定された精度を超えると、値は四捨五入されます。整数部分の桁数が指定された精度を超えると、システムはログ全体をダーティデータとして破棄し、エラーカウントを増分します。

  • ダーティデータは、転送プロセス中にデフォルトで破棄されます。

  • ログに値が存在しない場合、MaxCompute ではデフォルト値または `Null` になることがあります。

    • MaxCompute テーブルの作成時にデフォルト値が指定されていた場合、MaxCompute での値はデフォルト値になります。

    • デフォルト値が指定されておらず、`Null` 値が許可されている場合、MaxCompute での値は `Null` になります。

  • MaxCompute の制限により、最大転送同時実行数は 64 です。つまり、最大 64 の同時実行ジョブが MaxCompute に書き込むことができます。単一の MaxCompute パーティションの最大トラフィックは 10 MB/s です。

操作手順

  1. Simple Log Service コンソールにログインします。

  2. [プロジェクト] セクションで、目的のプロジェクトをクリックします。

  3. ログストレージ > Logstore タブで、目的の Logstore の左側にある > をクリックし、データ処理 > エクスポート > MaxCompute (旧称 ODPS) を選択します。

  4. MaxCompute (旧称 ODPS) にポインターを合わせ、+ をクリックします。

  5. MaxCompute への転送 パネルで、次のパラメーターを設定し、OK をクリックします。

    パラメーターの説明

    パラメーター

    説明

    ジョブ名

    転送ジョブの一意の名前。

    表示名

    転送ジョブの表示名。

    ジョブの説明

    データ転送ジョブの説明。

    宛先リージョン

    宛先の MaxCompute テーブルが存在するリージョン。

    MaxCompute エンドポイント

    MaxCompute プロジェクトのリージョンのエンドポイント

    説明

    MaxCompute 側の [エンドポイント] パネルはデフォルトで折りたたまれています。図に示すように、image をクリックして詳細を表示します:

    image

    Tunnel エンドポイント

    MaxCompute プロジェクトのリージョンのTunnel エンドポイント

    説明

    MaxCompute 側の [エンドポイント] パネルはデフォルトで折りたたまれています。図に示すように、image をクリックして詳細を表示します:

    image

    プロジェクト名

    宛先の MaxCompute テーブルが配置されている MaxCompute プロジェクト。

    MaxCompute テーブル名

    MaxCompute テーブルの名前。

    Log Service の読み取り権限

    MaxCompute 転送ジョブが Logstore からデータを読み取るための権限。

    • デフォルトロール:MaxCompute 転送ジョブが `AliyunLogDefaultRole` システムロールを使用して Logstore からデータを読み取ることを許可します。詳細については、「デフォルトロールの権限付与」をご参照ください。

    • カスタムロール:MaxCompute 転送ジョブがカスタムロールを使用して Logstore からデータを読み取ることを許可します。

      カスタムロールに Logstore からデータを読み取る権限を付与します。次に、カスタムロールの Alibaba Cloud リソース名 (ARN) を [Log Service の読み取り権限] フィールドに入力します。詳細については、「RAM ロールに Logstore からのデータ読み取りを許可する」をご参照ください。

    MaxCompute への書き込み権限

    MaxCompute 転送ジョブが MaxCompute テーブルにデータを書き込むための権限。

    [自動認証] をクリックする

    承認 をクリックして、RAM ロールに MaxCompute へのデータ書き込み権限を自動的に付与します。

    重要
    • RAM ユーザーを使用してこの操作を実行する場合、RAM ユーザーは MaxCompute アカウントを管理する権限を持っている必要があります。

    • 自動権限付与に失敗した場合、4 つのコマンドが表示されます。コマンドを MaxCompute コンソールにコピーして、手動で権限付与を完了します。詳細については、「コマンドラインを使用して権限付与を完了する」をご参照ください。

      USE xxxxx;
      ADD USER RAM$xxxxx:`role/xxxxx`;
      GRANT CreateInstance ON PROJECT xxxxx TO USER RAM$xxxxx:`role/xxxxx`;
      GRANT Describe, Alter, update ON TABLE xxxxx TO USER RAM$xxxxx:`role/xxxxx`;

    MaxCompute の通常列

    左側の入力ボックスに、MaxCompute テーブル列にマッピングするログフィールドの名前を入力します。右側には MaxCompute テーブル列の名前が表示されます。詳細については、「データモデルのマッピング」をご参照ください。

    重要
    • SLS が MaxCompute にログを転送する際、マッピングはログフィールドと MaxCompute テーブル列の順序に基づいています。MaxCompute の列名を変更してもデータ転送には影響しません。MaxCompute テーブルのスキーマを変更した場合は、ログフィールドと MaxCompute テーブル列のマッピングを再設定してください。

    • 左側の入力ボックスのログフィールドには、ダブルクォーテーション ("")、シングルクォーテーション ('')、またはスペースを含めることはできません。

    • ログに request_time のように同じ名前のフィールドが 2 つ含まれている場合、Log Service は一方のフィールドを request_time_0 として表示します。2 つのフィールドは Log Service 内では引き続き request_timeとして保存されます。転送ルールを設定する際は、元のフィールド名 request_time のみを使用できます。

      ログに同じ名前のフィールドが含まれている場合、Log Service はランダムにいずれかのフィールドの値を転送します。ログに同じ名前のフィールドを含めないことを推奨します。

    MaxCompute のパーティションキー列

    左側の入力ボックスに、MaxCompute パーティションキー列にマッピングするログフィールドの名前を入力します。右側には MaxCompute パーティションキー列の名前が表示されます。詳細については、「データモデルのマッピング」をご参照ください。

    説明
    • _extract_others___extract_others____extract_others_all__ フィールドはパーティションフィールドとしてサポートされていません。

    • パーティションキー列のログフィールドが __partition_time__ または __receive_time__ に設定されていない場合、転送パフォーマンスに影響が出る可能性があります。

    時間パーティションフォーマット

    時間パーティションフォーマット。設定例とパラメーターの詳細については、「時間パーティションフォーマット」をご参照ください。

    説明
    • このパラメーターは、[MaxCompute のパーティションキー列] のログフィールドが __partition_time__ または __receive_time__ に設定されている場合にのみ有効です。

    • 秒単位まで正確な日付フォーマットは使用しないでください。単一テーブルのパーティション数が 60,000 の上限を容易に超える原因となります。

    タイムゾーンの選択

    時間と時間パーティションのフォーマットに使用されるタイムゾーン。詳細については、「タイムゾーンフォーマット」をご参照ください。

    転送モード

    リアルタイム転送とバッチ転送に対応しています。

    • リアルタイム転送:Logstore からリアルタイムでデータを読み取り、MaxCompute に転送します。

    • バッチ転送:現在時刻より 5〜10 分前の Logstore からデータを読み取り、MaxCompute に転送します。

    詳細については、「転送モードの説明」をご参照ください。

    開始時間範囲

    MaxCompute 転送ジョブの時間範囲を指定します。この時間範囲は、ログが受信された時間に基づいています。以下に詳細を説明します:

    • 特定時刻から:MaxCompute 転送ジョブの開始時刻を指定します。データ転送はこの時点から開始され、ジョブが手動で停止されるまで続行されます。

    • 特定時間範囲:MaxCompute 転送ジョブの開始時刻と終了時刻を指定します。ジョブは指定された終了時刻に達すると自動的に停止します。

    説明

    MaxCompute のスロットと 1 秒あたりのクエリ数 (QPS) の制限により、既存データの転送は MaxCompute の書き込みしきい値を容易に超える可能性があります。そのため、この機能はサポートされなくなりました。

    転送ジョブを作成した後、ログデータは通常、Logstore に書き込まれてから 1 時間以内に MaxCompute にインポートされます。その後、MaxCompute でデータを表示できます。詳細については、「MaxCompute にログを転送した後、データ整合性を確認するにはどうすればよいですか?」をご参照ください。

    | log_source | log_time | log_topic | time | ip | thread | log_extract_others | log_partition_time | status |
    +------------+------------+-----------+-----------+-----------+-----------+------------------+--------------------+-----------+
    | 10.10.*.* | 1642942213 | | 24/Jan/2022:20:50:13 +0800 | 10.10.*.* | 414579208 | {"url":"POST /PutData?Category=YunOsAccountOpLog&AccessKeyId=****************&Date=Fri%2C%2028%20Jun%202013%2006%3A53%3A30%20GMT&Topic=raw&Signature=******************************** HTTP/1.1","user-agent":"aliyun-sdk-java"} | 2022_01_23_20_50 | 200 |
    +------------+------------+-----------+-----------+-----------+-----------+------------------+--------------------+-----------+

データモデルのマッピング

SLS から MaxCompute テーブルにログを転送する場合、2 つのサービスのデータモデルをマッピングする必要があります。次の点にご注意ください:

  • MaxCompute テーブルには、少なくとも 1 つのデータ列と 1 つのパーティション列が含まれている必要があります。

  • 予約フィールド __partition_time____source____topic__ を使用します。

  • MaxCompute テーブルは最大 60,000 パーティションを持つことができます。パーティション数が上限を超えると、テーブルにデータを書き込むことができなくなります。

  • システム予約フィールド __extract_others__ は、以前は _extract_others_ という名前でした。両方の名前は互換性があります。

  • MaxCompute パーティションキー列の値は、MaxCompute の予約語またはキーワードにすることはできません。詳細については、「予約語とキーワード」をご参照ください。

  • MaxCompute パーティションテーブルのパーティションは空にできません。MaxCompute パーティションキー列には、特定のフィールド (システム予約フィールドまたはログコンテンツフィールド) を設定する必要があります。古い転送ジョブの場合、文字列フィールドの値を対応するパーティション列の型に変換するには `cast` オペレーターが必要です。変換に失敗してパーティション列が空になった場合、ログは転送中に破棄されます。

  • SLS のログフィールドは、MaxCompute テーブルの 1 つの列 (データ列またはパーティション列) にのみマッピングできます。フィールドの冗長性はサポートされていません。

次の表に、MaxCompute のデータ列、パーティション列、および SLS フィールド間のマッピングを示します。SLS の予約フィールドの詳細については、「予約フィールド」をご参照ください。

MaxCompute 列の型

列名 (MaxCompute)

データ型 (MaxCompute)

ログフィールド名 (Simple Log Service)

フィールド型 (Simple Log Service)

説明

データ列

log_source

string

__source__

予約フィールド

ログのソース。

log_time

bigint

__time__

予約フィールド

UNIX タイムスタンプ形式のログ時間。これはデータモデルの Time フィールドに対応します。

log_topic

string

__topic__

予約フィールド

ログのトピック。

time

string

time

ログコンテンツフィールド

このフィールドはログから解析され、データモデルのキーと値のペアに対応します。多くの場合、Logtail によって収集されたデータの __time__ フィールドの値は、time フィールドの値と同じです。

ip

string

ip

ログコンテンツフィールド

このフィールドはログから解析されます。

thread

string

thread

ログコンテンツフィールド

このフィールドはログから解析されます。

log_extract_others

string

__extract_others__

予約フィールド

設定でマッピングされていない他のログフィールドは、キーと値のペアに基づいて JSON オブジェクトにシリアル化されます。JSON オブジェクトは単一レベルの構造を持ちます。ログフィールドのネストされた JSON オブジェクトはサポートされていません。

パーティション列

log_partition_time

string

__partition_time__

予約フィールド

このフィールドは、ログの __time__ フィールドの値に基づいて計算され、アライメントされます。パーティションの粒度は設定可能です。

status

string

status

ログコンテンツフィールド

このフィールドはログから解析されます。このフィールドの値は列挙をサポートしており、パーティション数が上限を超えないようにします。

時間パーティションフォーマット

MaxCompute (新バージョン) へのデータ転送では、`StrfTimeFormat` と `SimpleDateFormat` の 2 つの時間パーティションフォーマットがサポートされています。これらのフォーマットは、MaxCompute パーティションキー列のフィールドが __partition_time__ または `__receive_time__` に設定されている場合にのみ適用されます。

StrfTimeFormat

`strftime` は、UNIX C 標準ライブラリの関数で、日付と時刻をフォーマットします。この関数を使用して、時間パーティションを指定されたフォーマットの文字列に変換できます。フォーマットルールは、`%` 文字で始まるフォーマット指定子によって指定されます。例えば、`%Y_%m_%d` は年-月-日フォーマットを表します。

説明

新しい MaxCompute ジョブを作成する場合、`StrfTimeFormat` 時間フォーマットを使用する必要があります。

時間パーティションフォーマット

テーブルパーティションの例

%Y_%m_%d_%H_%M_00

2024_12_27_20_30_00

%Y_%m_%d_%H_%M

2024_12_27_20_30

%Y_%m_%d_%H

2024_12_27_20

%Y_%m_%d

2024_12_27

%Y_%m

2024_12

%Y

2024

%Y%m%d%H%M

202412272030

%Y%m%d%H

2024122720

%Y%m%d

20241227

%Y%m

202412

SimpleDateFormat

これは、yyyy-MM-dd HH:mm のような Java の `SimpleDateFormat` 構文に基づく時間フォーマットです。構文の詳細については、「Class SimpleDateFormat」をご参照ください。

説明

`SimpleDateFormat` 時間フォーマットは、互換性を確保するために旧バージョンから新バージョンへの移行にのみ使用されます。新しい MaxCompute ジョブを作成する場合、`StrfTimeFormat` 時間フォーマットを使用する必要があります。

旧バージョンからの移行ジョブでは、次のパーティションフォーマットがサポートされています:

時間パーティションフォーマット

テーブルパーティションの例

yyyy-MM-ddHH:mm

2024-12-2720-30

yyyy_MM_dd_HH_mm

2024_12_27_20_30

yyyy_MM_dd_HH

2024_12_27_20

yyyy-MM-dd HH:mm

2024-12-27 20:30

yyyyMMddHHmm

202412272030

yyyyMMddHH

2024122720

yyyyMMdd

20241227

yyyy_MM-dd_HH_mm

2024_12-27_20_30

yyyy-MM-dd

2024-12-27

参考情報

  • __partition_time__ フィールド

    ログ時間をパーティションフィールドとして使用して時間でデータをフィルタリングすることは、MaxCompute で一般的な方法です。

    • フォーマット

      __partition_time__ フィールドの値は、SLS の __time__ フィールドの値に基づいて計算されます。タイムゾーン設定と時間パーティションフォーマットに基づいて時間文字列が生成されます。単一の MaxCompute テーブルのパーティション制限を超えないようにするため、日付パーティション列の値は 30 分 (1800 秒) 間隔にアライメントされます。

      例えば、SLS のログ時間が 27/Jan/2022 20:50:13 +0800 の場合、SLS は予約フィールド __time__ の値を 1643287813 (UNIX タイムスタンプ) として計算します。次の表に、異なる設定での時間パーティション列の値を示します。

      時間パーティションフォーマット

      __partition_time__

      %Y_%m_%d_%H_%M_00

      2022_01_27_20_30_00

      %Y_%m_%d_%H_%M

      2022_01_27_20_30

      %Y%m%d

      20220127

    • 使用方法

      __partition_time__ フィールドを使用してデータをフィルタリングし、全表スキャンを回避します。例えば、2024 年 12 月 26 日のログデータをクエリするには、次のクエリ文を実行します。

      select * from {ODPS_TABLE_NAME} where log_partition_time >= "2024_12_26" and log_partition_time < "2024_12_27";
  • __receive_time__ フィールド

    ログがサーバーに到着した時間をパーティションフィールドとして使用して時間でデータをフィルタリングすることは、MaxCompute で一般的な方法です。

    • フォーマット

      時間パーティションフォーマット

      __recetive_time__

      %Y_%m_%d_%H_%M_00

      2022_01_27_20_30_00

      %Y_%m_%d_%H_%M

      2022_01_27_20_30

      %Y%m%d

      20220127

  • __extract_others__ および __extract_others_all__ フィールド

    • __extract_others__ フィールドには、__topic____tag__:*__source__ を除く、ログ内のすべての未マッピングフィールドが含まれます。

    • __extract_others_all__ フィールドには、__topic____tag__:*__source__ を含む、ログ内のすべての未マッピングフィールドが含まれます。

転送モードの説明

現在、MaxCompute (新バージョン) へのデータ転送は、リアルタイム転送とバッチ転送の 2 つのモードをサポートしています。

  • リアルタイム転送:Logstore からリアルタイムでデータを読み取り、MaxCompute に転送します。

  • バッチ転送:現在時刻より 5〜10 分前の Logstore からデータを読み取り、MaxCompute に転送します。

    [転送モード][バッチ転送] に設定した後、[開始時刻範囲][開始時刻] または [終了時刻] を設定する場合は、時間を 5 分間隔にアライメントする必要があります。例えば、2022-05-24 16:35:00 は有効な設定ですが、2022-05-24 16:36:00 は無効な設定です。

    さらに、バッチ転送は __receive_time__ フィールドの転送をサポートしています。__receive_time__ フィールドは、ログが SLS によって受信された時刻を示します。このフィールドのフォーマットは、時間パーティションフォーマットを使用して設定でき、最大 30 分の精度です。時間パーティションフォーマットの詳細については、「時間パーティションフォーマット」をご参照ください。

    このフィールドを転送する場合、[MaxCompute のパーティションキー列] にのみ追加できます。

SDK の例

export_odps_sink_demo.py