ゼファーネットのロゴ

Amazon Location Service と AWS 分析サービスを使用して、過去の位置データから洞察を得る |アマゾン ウェブ サービス

日付:

世界中の多くの組織は、エンド顧客にサービスを提供するために車両などの物理的資産の使用に依存しています。これらの資産をリアルタイムで追跡し、その結果を保存することで、資産所有者は、資産がどのように使用されているかについて貴重な洞察を得ることができ、継続的にビジネスを改善し、将来の変化に備えて計画を立てることができます。たとえば、多数の車両を運用している配送会社は、発表された配送サービスの拡大など、自社の制御が及ばない地域のポリシー変更による影響を確認する必要がある場合があります。 超低排出ゾーン (ULEZ)。過去の車両位置データと他のソースからの情報を組み合わせることで、同社はより適切な意思決定のための経験的アプローチを考案できます。たとえば、同社の調達チームはこの情報を使用して、ポリシー変更が発効する前にどの車両を優先して交換するかを決定できます。

開発者は次のサポートを利用できます。 Amazonロケーションサービス for デバイスの位置更新の公開 〜へ アマゾンイベントブリッジ 追跡された資産の場所を保存するほぼリアルタイムのデータ パイプラインを構築する Amazon シンプル ストレージ サービス (アマゾンS3)。さらに、次のこともできます。 AWSラムダ 受信した位置データを他のソースからのデータで強化します。 Amazon DynamoDB 車両のメンテナンスの詳細を含む表。その後、データ アナリストは 地理空間クエリ機能 of アマゾンアテナ 拡張されたULEZの提案された境界内で車両が運行した日数などの洞察を得る。 ULEZ 排出基準を満たしていない車両は、ゾーン内で走行するために日次料金が課せられるため、位置データと、車両の年数、現在の走行距離、現在の排出基準などのメンテナンス データを使用して、料金を見積もることができます。会社は日々の手数料を支払わなければなりません。

この投稿では、Amazon Location、EventBridge、Lambda、 Amazon データ ファイアホース、Amazon S3 を使用して位置認識データ パイプラインを構築し、このデータを使用して有意義な洞察を導き出します。 AWSグルー そしてアテナ。

ソリューションの概要

これは、ロケーションベースの資産管理のための完全なサーバーレス ソリューションです。このソリューションは次のインターフェイスで構成されます。

  • IoTまたはモバイルアプリケーション – モバイルアプリケーションまたはモノのインターネット (IoT) デバイスにより、使用中の社用車の追跡が可能になり、その現在の位置が AWS のデータ取り込みレイヤーに安全に送信されます。取り込みアプローチはこの投稿の範囲外です。代わりに、ソリューションの Lambda 関数はサンプル車両の移動をシミュレートし、ランダム化された位置で Amazon ロケーション トラッカー オブジェクトを直接更新します。
  • データ分析 – ビジネス アナリストは、車両から収集された位置データなど、複数のデータ ソースから運用上の洞察を収集します。データ アナリストは、「特定の車両が提案されたゾーン内で過去にどれくらいの時間を費やしたか、また、過去 12 か月間政策が実施されていた場合、料金はいくらになっただろうか?」などの質問に対する答えを探しています。

次の図は、ソリューションのアーキテクチャを示しています。
アーキテクチャ図

ワークフローは次の主要な手順で構成されます。

  1. 車両の追跡には、Amazon Location の追跡機能が使用されます。 EventBridge 統合を使用すると、フィルタリングされた位置更新が EventBridge イベント バスに発行されます。このソリューションでは、 距離ベースの コストとジッターを削減するフィルタリング。距離ベースのフィルタリングでは、デバイスの移動距離が 30 メートル (98.4 フィート) 未満の位置更新は無視されます。
  2. Amazon Location デバイスの位置イベントが EventBridge に到着します default バス付き source: ["aws.geo"] & detail-type: ["Location Device Position Event"]。これらのイベントを 2 つのダウンストリーム ターゲット (Lambda 関数と Firehose 配信ストリーム) に転送するために 1 つのルールが作成されます。
  3. この投稿では、S3 バケットにデータをコミットするためのさまざまなアプローチを示すために、各ターゲットに基づいた XNUMX つの異なるパターンについて説明します。
    1. ラムダ関数 – 最初のアプローチでは、Lambda 関数を使用して、データ パイプラインのコードを使用して受信位置データを直接変換する方法を示します。 Lambda 関数を変更して、結果を S3 バケットに保存する前に、別のデータストア (DynamoDB テーブルや顧客関係管理システムなど) から追加の車両情報を取得してデータを強化できます。このモデルでは、受信イベントごとに Lambda 関数が呼び出されます。
    2. Firehose 配信ストリーム – 3 番目のアプローチでは、Firehose 配信ストリームを使用して、受信した位置更新をバッファリングしてバッチ処理してから、修正せずに SXNUMX バケットに保存します。この方法では、GZIP 圧縮を使用して、ストレージ消費とクエリのパフォーマンスを最適化します。を使用することもできます。 データ変換 Data Firehose の機能を使用して Lambda 関数を呼び出し、データ変換をバッチで実行します。
  4. AWS Glue は両方の S3 バケット パスをクロールし、推論されたスキーマに基づいて AWS Glue データベース テーブルにデータを入力し、AWS Glue データ カタログを通じて他の分析アプリケーションでデータを利用できるようにします。
  5. Athena は、S3 バケットに保存されている位置データに対して地理空間クエリを実行するために使用されます。データカタログは、Athena を使用する分析アプリケーションが Amazon S3 に保存されている位置データを検索、読み取り、処理できるようにするメタデータを提供します。
  6. このソリューションには、架空の旅行からのシミュレートされた位置データを使用して Amazon ロケーション トラッカーを継続的に更新する Lambda 関数が含まれています。 Lambda 関数は、スケジュールされた EventBridge ルールを使用して定期的にトリガーされます。

このソリューションは、次のコマンドを使用して自分でテストできます。 AWS サンプル GitHub リポジトリ。リポジトリには、 AWSサーバーレスアプリケーションモデル このソリューションを試すには、(AWS SAM) テンプレートと Lambda コードが必要です。の手順を参照してください。 README このソリューションをプロビジョニングおよび廃止する方法の手順については、このファイルを参照してください。

この投稿の一部のスクリーンショットの視覚的なレイアウトは、実際のものとは異なって見える場合があります。 AWSマネジメントコンソール.

データ生成

このセクションでは、ジャーニー データを手動または自動で生成する手順について説明します。

行程データを手動で生成する

デバイスの位置を手動で更新するには、 AWSコマンドラインインターフェイス (AWS CLI) コマンド aws location batch-update-device-position。 交換する tracker-name, device-id, Position, SampleTime 独自の値を使用し、イベントを配置するには、連続する更新の距離が 30 メートル以上離れていることを確認してください。 default EventBridge イベント バス:

aws location batch-update-device-position --tracker-name <tracker-name> --updates "[{"DeviceId": "<device-id>", "Position": [<longitude>, <latitude>], "SampleTime": "<YYYY-MM-DDThh:mm:ssZ>"}]"

シミュレータを使用して走行データを自動生成

提供 AWS CloudFormation テンプレートは、EventBridge のスケジュールされたルールと、車両からのトラッカーの更新をシミュレートする付随する Lambda 関数をデプロイします。このルールはデフォルトで有効になっており、ルールで指定された頻度で実行されます。 SimulationIntervalMinutes CloudFormation パラメータ。データ生成 Lambda 関数は、車両の基本位置からのランダム化された位置オフセットを使用して Amazon 位置トラッカーを更新します。

車両名と拠点の位置は、 車両.json ファイル。車両の開始位置は毎日リセットされ、その日に ULEZ に出入りできるようにドリフトできるように拠点の場所が選択され、現実的な移動シミュレーションを提供します。

また、ご購読はいつでも停止することが可能です ルールを無効にする EventBridge コンソールでスケジュールされたルールの詳細に移動して、一時的にルールを変更します。または、パラメータを変更します State: ENABLED 〜へ State: DISABLED スケジュールされたルールリソースの場合 GenerateDevicePositionsScheduleRule セクションに テンプレート.yml ファイル。この変更を有効にするには、AWS SAM テンプレートを再構築して再デプロイします。

位置データパイプラインのアプローチ

このセクションで説明する構成は、提供された AWS SAM テンプレートによって自動的にデプロイされます。このセクションの情報は、ソリューションの関連部分を説明するために提供されています。

Amazon Location デバイス位置イベント

Amazon Location は、デバイス位置更新イベントを次の形式で EventBridge に送信します。

{
    "version":"0",
    "id":"<event-id>",
    "detail-type":"Location Device Position Event",
    "source":"aws.geo",
    "account":"<account-number>",
    "time":"<YYYY-MM-DDThh:mm:ssZ>",
    "region":"<region>",
    "resources":[
        "arn:aws:geo:<region>:<account-number>:tracker/<tracker-name>"
    ],
    "detail":{
        "EventType":"UPDATE",
        "TrackerName":"<tracker-name>",
        "DeviceId":"<device-id>",
        "SampleTime":"<YYYY-MM-DDThh:mm:ssZ>",
        "ReceivedTime":"<YYYY-MM-DDThh:mm:ss.sssZ>",
        "Position":[
            <longitude>, 
            <latitude>
	]
    }
}

オプションで指定できます 入力変換 ターゲットに到達する前に、デバイス位置イベント データの形式と内容を変更します。

Lambda を使用したデータ強化

このパターンでのデータ強化は、Lambda 関数の呼び出しによって容易になります。この例では、この関数を呼び出します ProcessDevicePosition、Python ランタイムを使用します。カスタム変換は EventBridge ターゲット定義に適用され、次の形式でイベント データを受信します。

{
    "EventType":<EventType>,
    "TrackerName":<TrackerName>,
    "DeviceId":<DeviceId>,
    "SampleTime":<SampleTime>,
    "ReceivedTime":<ReceivedTime>,
    "Position":[<Longitude>,<Latitude>]
}

リファクタリングなどの追加の変換を適用することもできます。 Latitude & Longitude イベントを処理する下流のビジネス ロジックで必要な場合、データを個別のキーと値のペアに分割します。

次のコードは、によって実行される Python アプリケーション ロジックを示しています。 ProcessDevicePosition ラムダ関数。簡潔にするために、このコード スニペットではエラー処理が省略されています。完全なコードは次の場所にあります。 GitHubレポ.

import json
import os
import uuid
import boto3

# Import environment variables from Lambda function.
bucket_name = os.environ["S3_BUCKET_NAME"]
bucket_prefix = os.environ["S3_BUCKET_LAMBDA_PREFIX"]

s3 = boto3.client("s3")

def lambda_handler(event, context):
    key = "%s/%s/%s-%s.json" % (bucket_prefix,
                                event["DeviceId"],
                                event["SampleTime"],
                                str(uuid.uuid4())
    body = json.dumps(event, separators=(",", ":"))
    body_encoded = body.encode("utf-8")
    s3.put_object(Bucket=bucket_name, Key=key, Body=body_encoded)
    return {
        "statusCode": 200,
        "body": "success"
    }

前述のコードは、EventBridge が受信したデバイス位置イベントごとに S3 オブジェクトを作成します。コードでは、 DeviceId オブジェクトをバケットに書き込むためのプレフィックスとして使用します。

前述の Lambda 関数コードに追加のロジックを追加して、他のソースを使用してイベント データを強化できます。の例では、 GitHubレポ DynamoDB 車両メンテナンス テーブルのデータを使用してイベントを充実させる方法を示します。

前提条件に加えて AWS IDおよびアクセス管理 ロールによって提供される (IAM) 権限 AWSBasicLambdaExecutionRole ProcessDevicePosition 関数には S3 を実行する権限が必要です put_object アクションおよびデータ エンリッチメント ロジックに必要なその他のアクション。ソリューションに必要な IAM 権限は、次のドキュメントに記載されています。 テンプレート.yml ファイルにソフトウェアを指定する必要があります。

{
    "Version":"2012-10-17",
    "Statement":[
        {
            "Action":[
                "s3:ListBucket"
            ],
            "Resource":[
                "arn:aws:s3:::<S3_BUCKET_NAME>"
            ],
            "Effect":"Allow"
        },
        {
            "Action":[
                "s3:PutObject"
            ],
            "Resource":[
                "arn:aws:s3:::<S3_BUCKET_NAME>/<S3_BUCKET_LAMBDA_PREFIX>/*"
            ],
            "Effect":"Allow"
        }
    ]
}

Amazon Data Firehose を使用したデータ パイプライン

Firehose 配信ストリームを作成するには、次の手順を実行します。

  1. Amazon Data Firehose コンソールで、選択します。 消防ホースの流れ ナビゲーションペインに表示されます。
  2. 選択する Firehose ストリームを作成する.
  3. ソースとして選択 ダイレクトプット.
  4. 開催場所、選択する アマゾンS3.
  5. Firehose ストリーム名、名前を入力してください (この投稿の場合、 ProcessDevicePositionFirehose).
    Firehose ストリームを作成する
  6. 位置データが保存されている S3 バケットに関する詳細とパーティション化戦略を使用して宛先設定を構成します。
    1.   & バケットとオブジェクトのプレフィックスを決定します。
    2.   DeviceId オブジェクトをバケットに書き込むための追加のプレフィックスとして使用します。
  7. 有効にします 動的パーティショニング & 改行区切り文字 に基づいてパーティショニングが自動的に行われるようにする DeviceId、Amazon S3 に配信されるオブジェクトのレコード間には新しい行区切り文字が追加されます。

これらは、AWS Glue が後でデータをクロールし、Athena が個々のレコードを認識するために必要です。
Firehose ストリームの宛先設定

EventBridge ルールを作成し、ターゲットをアタッチする

EventBridge ルール ProcessDevicePosition 2 つのターゲットを定義します。 ProcessDevicePosition ラムダ関数と、 ProcessDevicePositionFirehose 配信ストリーム。ルールを作成してターゲットをアタッチするには、次の手順を実行します。

  1. EventBridge コンソールで、新しいルールを作成します。
  2. 名前 、名前を入力してください (この投稿の場合、 ProcessDevicePosition).
  3. イベントバス¸選ぶ デフォルト.
  4. ルールタイプ選択する イベントパターンのあるルール.
    EventBridge ルールの詳細
  5. イベント·ソース選択 AWS イベントまたは EventBridge パートナー イベント.
    EventBridge イベントソース
  6. 方法選択 パターンフォームを使用する.
  7. イベントパターン セクション、指定 AWSサービス ソースとして、 Amazonロケーションサービス 具体的なサービスとしては、 位置デバイス位置イベント イベントタイプとして。
    EventBridgeの作成方法
  8. ターゲット1を添付します。 ProcessDevicePosition Lambda 関数をターゲットとして使用します。
    イベントブリッジターゲット1
  9. を使用しております 入力トランス S3 バケットにコミットされるイベントをカスタマイズします。
    EventBridge ターゲット 1 トランスフォーマー
  10. 構成 入力パスマップ & 入力テンプレート ペイロードを目的の形式に編成します。
    1. 次のコードは入力パス マップです。
      {
          EventType: $.detail.EventType
          TrackerName: $.detail.TrackerName
          DeviceId: $.detail.DeviceId
          SampleTime: $.detail.SampleTime
          ReceivedTime: $.detail.ReceivedTime
          Longitude: $.detail.Position[0]
          Latitude: $.detail.Position[1]
      }

    2. 次のコードは入力テンプレートです。
      {
          "EventType":<EventType>,
          "TrackerName":<TrackerName>,
          "DeviceId":<DeviceId>,
          "SampleTime":<SampleTime>,
          "ReceivedTime":<ReceivedTime>,
          "Position":[<Longitude>, <Latitude>]
      }

  11. ターゲット2を選択してください ProcessDevicePositionFirehose 配信ストリームをターゲットとして指定します。
    イベントブリッジターゲット2

このターゲットには、1 つまたは複数のレコードを Firehose 配信ストリームに書き込むことを許可する IAM ロールが必要です。

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Action": [
                "firehose:PutRecord",
                "firehose:PutRecords"
            ],
            "Resource": [
                "arn:aws:firehose:<region>:<account-id>:deliverystream/<delivery-stream-name>"
            ],
            "Effect": "Allow"
        }
    ]
}

AWS Glue を使用してデータをクロールおよびカタログ化する

十分なデータが生成されたら、次の手順を実行します。

  1. AWS Glue コンソールで、選択します Crawlers ナビゲーションペインに表示されます。
  2. 作成したクローラーを選択し、 location-analytics-glue-crawler-lambda & location-analytics-glue-crawler-firehose.
  3. 選択する ラン.

クローラーは自動的にデータを JSON 形式に分類し、レコードをテーブルとパーティションにグループ化し、関連するメタデータを AWS Glue データ カタログにコミットします。
Crawlers

  1. 前回の実行 両方のクローラのステータスは次のように表示されます 成功した、2 つのテーブル (lambda & firehose) で作成されました。 テーブル類 ページで見やすくするために変数を解析したりすることができます。

このソリューションは、受信した位置データを以下に基づいて分割します。 deviceid 分野。したがって、新しいデバイスやスキーマの変更がない限り、クローラーを再度実行する必要はありません。ただし、新しいデバイスが追加された場合、またはパーティション化に別のフィールドが使用された場合は、クローラを再度実行する必要があります。
テーブル類

これで、Athena を使用してテーブルにクエリを実行する準備が整いました。

Athenaを使用してデータをクエリする

Athena は、ホストされている非構造化データ、半構造化データ、構造化データを分析するために構築されたサーバーレスの対話型分析サービスです。 Athena コンソールを初めて使用する場合は、 指示に従ってください Amazon S3 にクエリ結果の場所を設定します。 Athena を使用してデータをクエリするには、次の手順を実行します。

  1. Athenaコンソールで、クエリエディタを開きます。
  2. 情報元、選択する AwsDataCatalog.
  3. データベース、選択する location-analytics-glue-database.
  4. オプション メニュー (縦に並んだ 3 つの点) で、次を選択します。 プレビューテーブル 両方のテーブルの内容をクエリします。
    プレビュー表

このクエリは、テーブルに現在保存されている 10 個のサンプル位置レコードを表示します。次のスクリーンショットは、プレビューの例です。 firehose テーブル。 ザ・ firehose テーブルには、Amazon ロケーション トラッカーからの未加工の未変更データが保存されます。
クエリ結果
これで、地理空間クエリを実験できるようになりました。 2021 年のロンドン ULEZ 拡張用の GeoJSON ファイル はリポジトリの一部であり、両方の Athena テーブルと互換性のあるクエリにすでに変換されています。

  1. から内容をコピーして貼り付けます。 1-firehose-athena-ulez-2021-create-view.sql で見つかったファイル examples/firehose フォルダーをクエリ エディターにコピーします。

このクエリは ST_Within 記録された位置がポリゴンによって定義された ULEZ ゾーンの内側か外側かを判断する地理空間関数。と呼ばれる新しいビュー ulezvehicleanalysis_firehose 新しい列が作成されます。 insidezone、記録された位置がゾーン内に存在するかどうかをキャプチャします。

単純な Python ユーティリティ ダウンロードされた GeoJSON ファイルにあるポリゴン フィーチャを次の形式に変換します。 ST_Polygon に基づく文字列 よく知られたテキスト形式 これは Athena クエリで直接使用できます。

  1. 選択する プレビュービュー ulezvehicleanalysis_firehose を表示してその内容を調べます。
    プレビュービュー

このビューに対してクエリを実行して、包括的な洞察を得ることができるようになりました。

  1. から内容をコピーして貼り付けます。 2-firehose-athena-ulez-2021-query-days-in-zone.sql で見つかったファイル examples/firehose フォルダーをクエリ エディターにコピーします。

このクエリは、各車両が ULEZ に入った合計日数と、予想される合計料金を確立します。クエリは次を使用してパラメータ化されています。 ? プレースホルダー文字。 パラメータ化されたクエリ 異なるパラメーター値を使用して同じクエリを再実行できます。

  1. 1日あたりの料金金額を入力してください パラメータ1をクリックしてクエリを実行します。
    クエリエディタ

結果には、各車両、提案された ULEZ で費やした合計日数、および入力した日次料金に基づく合計料金が表示されます。
クエリ結果
を使用してこの演習を繰り返すことができます。 lambda テーブル。のデータ lambda このテーブルは、Lambda 関数による処理時に車両メンテナンス DynamoDB テーブルに存在する追加の車両の詳細で拡張されます。このソリューションは次のフィールドをサポートしています。

  • MeetsEmissionStandards (ブール値)
  • Mileage (番号)
  • PurchaseDate (文字列、in YYYY-MM-DD フォーマット)

新しいデータが到着したときに、そのデータを強化することもできます。

  1. DynamoDB コンソールで、次の車両メンテナンス テーブルを見つけます。 テーブル類。テーブル名が出力として提供されます VehicleMaintenanceDynamoTable デプロイされた CloudFormation スタック内。
  2. 選択する テーブル アイテムを調べる テーブルの内容を表示します。
  3. 選択する アイテムを作成する 車両の新しい記録を作成します。
    アイテムを作成する
  4. 入力します DeviceId (といった vehicle1 文字列として)、 PurchaseDate (といった 2005-10-01 文字列として)、 Mileage (といった 10000 数値として)、および MeetsEmissionStandards (次のような値を指定します) False ブール値として)。
  5. 選択する アイテムを作成する レコードを作成します。
    アイテムを作成する
  6. 新しく作成したレコードを、他の車両 (車両など) の追加エントリで複製します。 vehicle2 or vehicle3)、属性の値を毎回わずかに変更します。
  7. 再実行 location-analytics-glue-crawler-lambda 新しいデータが生成された後の AWS Glue クローラーは、新しいフィールドを含むスキーマへの更新が登録されていることを確認します。
  8. から内容をコピーして貼り付けます。 1-lambda-athena-ulez-2021-create-view.sql で見つかったファイル examples/lambda フォルダーをクエリ エディターにコピーします。
  9. プレビュー ulezvehicleanalysis_lambda を表示して、新しい列が作成されたことを確認します。

などのエラーが発生した場合、 Column 'mileage' cannot be resolved が表示されているか、データの強化が行われていないか、AWS Glue クローラーがスキーマの更新をまだ検出していません。

Status プレビューテーブルオプション DynamoDB テーブルにレコードを作成する前の結果のみを返す場合は、次を使用してクエリ結果を降順で返します。 sampletime (例えば、 order by sampletime desc limit 100;).
クエリ結果
ここでは、現在排出基準を満たしていない車両に焦点を当て、年間走行距離 (最新の走行距離 / 車両の年数を使用して計算) に基づいて降順に車両を並べます。

  1. から内容をコピーして貼り付けます。 2-lambda-athena-ulez-2021-query-days-in-zone.sql で見つかったファイル examples/lambda フォルダーをクエリ エディターにコピーします。
    クエリ結果

この例では、当社の車両のうち 5 台が排出基準を満たしていないことが報告されていることがわかります。また、年間の走行距離が多い車両や、提案されている ULEZ で過ごした日数も確認できます。フリートの運営者は、これらの車両を優先して交換することを決定する可能性があります。位置データは取り込まれた時点で最新の車両メンテナンス データで強化されるため、これらのクエリをさらに進化させて、定義された時間枠で実行できます。たとえば、過去 1 年間の走行距離の変化を考慮に入れることができます。

データ強化の動的な性質により、Amazon S3 にコミットされる新しいデータはクエリ結果とともに、DynamoDB 車両メンテナンス テーブルのレコードが更新されるたびに変更されます。

クリーンアップ

の手順を参照してください。 README ファイルを使用して、このソリューション用にプロビジョニングされたリソースをクリーンアップします。

まとめ

この投稿では、Amazon Location、EventBridge、Lambda、Amazon Data Firehose、Amazon S3 を使用して位置認識データ パイプラインを構築し、収集されたデバイスの位置データを使用して AWS Glue と Athena を使用して分析上の洞察を得る方法を説明しました。これらの資産をリアルタイムで追跡し、その結果を保存することで、企業は自社のフリートがどの程度効果的に利用されているかについて貴重な洞察を導き出し、将来の変化にうまく対応できるようになります。ここで、独自のデバイス追跡データと分析要件に合わせてこのサンプル コードを拡張してみることができます。


著者について

アラン・ピーティ AWS のシニア パートナー ソリューション アーキテクトです。 Alan は、グローバル システム インテグレーター (GSI) とグローバル独立系ソフトウェア ベンダー (GISV) が AWS のサービスを使用して顧客の複雑な課題を解決できるよう支援しています。 AWS に入社する前は、システム インテグレーターでアーキテクトとしてビジネス要件を技術ソリューションに変換する仕事をしていました。仕事以外では、アランは IoT 愛好家であり、イギリスの田舎のぬかるんだ道を走るのが大好きな熱心なランナーです。

パラグ・スリバスタヴァ AWS のソリューションアーキテクトとして、企業顧客のクラウド導入と移行の成功を支援しています。専門的なキャリアの中で、彼は複雑なデジタル変革プロジェクトに幅広く携わってきました。彼はまた、住所の地理空間的側面を中心とした革新的なソリューションの構築にも熱心に取り組んでいます。

スポット画像

最新のインテリジェンス

スポット画像