Log Serviceがログを収集した後、データの保存と分析のためにログをMaxComputeテーブルに送信できます。 このトピックでは、新しいバージョンのデータシッピングジョブを作成して、データをMaxComputeに送信する方法について説明します。
前提条件
プロジェクトと Logstore が作成済みである必要があります。 詳細については、「プロジェクトとLogstoreの作成」をご参照ください。
ログが収集されていること。 詳細については、「データ収集の概要」をご参照ください。
Log Serviceプロジェクトが存在するリージョンにMaxComputeパーティションテーブルが作成されます。 詳細については、「テーブルの作成」をご参照ください。
使用上の注意
新しいバージョンのデータ配送機能を使用して、中国 (北京) 、中国 (張家口) 、中国 (杭州) 、中国 (上海) 、中国 (深セン) 、中国 (深セン) 、中国 (香港) 、ドイツ (フランクフルト) 、マレーシア (クアラルンプール) 、米国 (バージニア) 、米国 (シリコンバレー) 、日本 (東京) 、シンガポール、インドネシア (ジャカルタ) 、英国 (ロンドン) 。 他のリージョンでこの機能を使用する場合は、 チケット
char型またはvarchar型のフィールド値が指定された長さを超える場合、値はMaxComputeに出荷された後に切り捨てられ、余分な部分は破棄されます。
たとえば、最大長が3に設定され、フィールド値が012345の場合、値がMaxComputeに出荷された後、値は012に切り捨てられます。
string型、char型、またはvarchar型のフィールド値が空の文字列の場合、値はMaxComputeに出荷された後にNullに変換されます。
datetime型のフィールド値は、YYYY-MM-DD HH:mm:ss形式である必要があります。 DDとHHの間に複数のスペースが存在できます。 datetime型のフィールド値が無効な形式の場合、値はMaxComputeに送信できますが、値はNullに変換されます。
日付タイプのフィールド値が無効な形式の場合、値はMaxComputeに送信できますが、値はNullに変換されます。
小数型のフィールド値の小数点の後の桁数が指定された制限を超えると、値は丸められ、切り捨てられます。 小数点以下の桁数が指定された制限を超えると, ログ全体がダーティデータとして破棄され, 失敗したログの数が増加します。
デフォルトでは、ダーティデータはデータ転送中に破棄されます。
ログに存在しない値がMaxComputeに送信された場合、値はデフォルト値またはNullに変換されます。
MaxComputeテーブルの作成時にデフォルト値が指定されている場合、ログに存在しない値は、MaxComputeに出荷された後にデフォルト値に変換されます。
MaxComputeテーブルの作成時にデフォルト値が指定されておらず、値Nullが許可されている場合、ログに存在しない値は、値がMaxComputeに出荷された後にNullに変換されます。
最大64のデータシッピングジョブを実行して、MaxComputeにデータを同時に発送できます。 1秒あたり最大10 MBのデータを各MaxComputeパーティションに書き込むことができます。
手順
Simple Log Serviceコンソールにログインします。
[プロジェクト] セクションで、目的のプロジェクトをクリックします。
を選択します。 [Logstores] タブで、管理するLogstoreを見つけ、[>] をクリックし、 を選択します。
ポインタをMaxComputeに移動し、[+] をクリックします。
[MaxComputeへのデータ配送] パネルで、次のパラメーターを設定し、[OK] をクリックします。
データシッピングジョブが作成された後、ログデータはLogstoreに書き込まれてから1時間後にMaxComputeに出荷されます。 ログデータの出荷後、MaxComputeでログデータを表示できます。 詳細については、「」をご参照ください。Simple Log Serviceから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 | +------------+------------+-----------+-----------+-----------+-----------+------------------+--------------------+-----------+
データモデルマッピング
データ出荷ジョブがLog ServiceからMaxComputeにデータを出荷する場合、2つのサービス間のデータモデルマッピングが有効になります。 次のリストでは、使用上の注意事項と例を示します。
MaxComputeテーブルには、少なくとも1つのデータ列と1つのパーティションキー列が含まれます。
Log Serviceで __partition_time__ 、__source__ 、および __topic__ の予約フィールドを使用することを推奨します。
各MaxComputeテーブルは、最大60,000個のパーティションを持つことができます。 パーティションの数が上限を超えると、テーブルにデータを書き込むことができません。
システム予約フィールドの以前の名前 __extract_others__ は _extract_others_ です。 両方の名前を一緒に使用できます。
MaxComputeテーブルのパーティションキー列の値は、MaxComputeの予約語またはキーワードにすることはできません。 詳細については、「予約済みの単語とキーワード」をご参照ください。
MaxComputeテーブルのパーティションキー列の値を空の文字列にすることはできません。 パーティションキー列にマップされるフィールドは、予約フィールドまたはログコンテンツフィールドである必要があります。 古いバージョンのデータシッピングでは、cast関数を使用して、文字列型のフィールドをマップされたパーティションキー列の型に変換します。 変換の失敗により、パーティションキー列にマッピングされているフィールドの値が空の文字列になった場合、データの配布中にフィールドの値を記録したログが破棄されます。
log Serviceのログフィールドは、MaxComputeテーブルの1つのデータ列またはパーティションキー列にのみマッピングできます。 フィールド冗長性はサポートされていません。
次の表に、MaxComputeデータ列、パーティションキー列、およびLog Serviceフィールド間のマッピング関係を示します。 Log Serviceの予約フィールドの詳細については、「予約フィールド」をご参照ください。
MaxComputeの列タイプ | MaxComputeの列名 | MaxComputeのデータ型 | Log Serviceのフィールド名 | Log Serviceのフィールドタイプ | 説明 |
データ列 | log_source | String | __source__ | 予約フィールド | ログのソースです。 |
log_time | bigint | __time__ | 予約フィールド | ログのUNIXタイムスタンプ。 このフィールドは、データモデルのTimeフィールドに対応します。 | |
log_topic | String | __topic__ | 予約フィールド | ログのトピックです。 | |
time | String | time | Log contentフィールド | このフィールドはログから解析され、データモデルのキーと値のペアに対応します。 ほとんどの場合、Logtailを使用して収集されるデータの__time__フィールドの値は、timeフィールドの値と同じです。 | |
ip | String | ip | Log contentフィールド | このフィールドはログから解析されます。 | |
スレッド | String | スレッド | Log contentフィールド | このフィールドはログから解析されます。 | |
log_extract_others | String | __extract_others__ | 予約フィールド | 設定でマップされていない他のログフィールドは、キーと値のペアに基づいてJSONデータにシリアル化されます。 JSONデータは単一レベルの構造を使用し、JSONネスティングはログフィールドではサポートされていません。 | |
パーティションキー列 | log_partition_time | String | __partition_time__ | 予約フィールド | このフィールドは、ログ内の __time__ フィールドの値に基づいて計算されます。 フィールドのパーティションの粒度を指定できます。 |
status | String | status | Log contentフィールド | このフィールドはログから解析されます。 このフィールドの値は、パーティションの数が上限を超えないように列挙をサポートします。 |
配送モード
新しいバージョンのデータ配送機能は、次の配送モードをサポートしています。
リアルタイム: Logstoreからデータをリアルタイムで読み取り、MaxComputeに送信します。
バッチシッピング: 現在の時刻より5〜10分早く生成されたデータをLogstoreから読み取り、そのデータをバッチでMaxComputeに発送します。
[配送モード] パラメーターを [一括配送] に設定した場合、[開始時間範囲] セクションの [開始時間] または [終了時間] パラメーターを5分の倍数に設定できます。 たとえば、
2022-05-24 16:35:00
は有効な開始時間または終了時間ですが、2022-05-24 16:36:00
は有効ではありません。__receive_time__ フィールドのデータをバッチ出荷モードで出荷できます。 __receive_time__ フィールドの値は、log Serviceがログを受信した時刻を示します。 時間パーティション形式を使用して、__receive_time__フィールドの値形式を設定できます。 時間は30分まで正確にすることができます。 タイムパーティション形式の詳細については、「参照」をご参照ください。
__receive_time__フィールドのデータを送信する場合、このフィールドはMaxCompute Partition Columnパラメーターにのみ追加できます。
関連ドキュメント
__partition_time__ フィールド
ほとんどの場合、MaxComputeはデータを時間でフィルタリングするか、ログ時間フィールドをパーティションキー列として使用します。
Format
__partition_time__ フィールドの値は、Log Serviceの __time__ フィールドの値に基づいて計算されます。 値は、タイムゾーンとタイムパーティションの形式に基づいて生成される時間文字列です。 日付パーティションキー列の値は、1,800秒間隔で指定します。 これにより、1つのMaxComputeテーブルのパーティション数が制限を超えないようにします。
たとえば、log Serviceのログのタイムスタンプが27/Jan/2022 20:50:13 + 0800の場合、Log Serviceはタイムスタンプに基づいて __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__ フィールドを使用してデータをフィルタリングし、フルテーブルスキャンを防ぐことができます。 たとえば、次のクエリステートメントを実行して、2022年1月26日のログデータをクエリできます。
select * from {ODPS_TABLE_NAME} where log_partition_time >= "2022_01_26" and log_partition_time < "2022_01_27";
__extract_others__ および __extract_others_all__ フィールド
__extract_others__ フィールドの値には、__topic__ 、__tag __: * 、および __source__ フィールドを除く、マップされていないすべてのフィールドが含まれます。
__extract_others_all__ フィールドの値には、__topic___ 、__tag __: * 、__source__ フィールドなど、マップされていないすべてのフィールドが含まれます。