データセットの作成

データセットの作成は、次の 2 段階のプロセスで行います。

  1. データセットを作成するリクエストを送信します。

  2. データセットにデータをアップロードするリクエストを送信します。

最初のデータのアップロード後、データセットに新しいデータをアップロードして、データセットの新しいバージョンを作成できます。

データセットの作成

データセット エンドポイントに datasets リクエストを送信して、データセットを作成します。POST

https://mapsplatformdatasets.googleapis.com/v1/projects/PROJECT_NUMBER_OR_ID/datasets

データセットを定義するリクエストにJSON 本文 を渡します。以下を行ってください:

  • データセットの displayName を指定します。displayName の値は、すべてのデータセットで一意である必要があります。

  • usageUSAGE_DATA_DRIVEN_STYLING に設定します。

次に例を示します。

curl -X POST -d '{
    "displayName": "My Test Dataset", 
    "usage": "USAGE_DATA_DRIVEN_STYLING"
  }' \
  -H 'X-Goog-User-Project: PROJECT_NUMBER_OR_ID' \
  -H 'Content-Type: application/json' \
  -H "Authorization: Bearer $TOKEN" \
  "https://mapsplatformdatasets.googleapis.com/v1/projects/PROJECT_NUMBER_OR_ID/datasets"

レスポンスには、データセットの ID( projects/PROJECT_NUMBER_OR_ID/datasets/DATASET_ID 形式)と追加情報が含まれます。データセットを更新または変更するリクエストを行う場合は、データセット ID を使用します。

{
  "name": "projects/PROJECT_NUMBER_OR_ID/datasets/f57074a0-a8b6-403e-9df1-e9fc46",
  "displayName": "My Test Dataset",
  "usage": [
    "USAGE_DATA_DRIVEN_STYLING"
  ],
  "createTime": "2022-08-15T17:50:00.189682Z",
  "updateTime": "2022-08-15T17:50:00.189682Z" 
}

データセットにデータをアップロードする

データセットを作成したら、 Google Cloud Storage またはローカル ファイルからデータセットにデータをアップロードします。

アップロード オペレーションは非同期です。データをアップロードすると、データが取り込まれて処理されます。つまり、HTTP GET リクエストを送信してデータセットの状態をモニタリングし、データセットを使用できる状態になったかどうか、エラーが発生したかどうかを確認する必要があります。詳細については、データ処理の 状態を取得するをご覧ください。

Cloud Storage からデータをアップロードする

Cloud Storage からデータセットにアップロードするには、データセットの ID も含む POST リクエストを データセット エンドポイントに送信します。

https://mapsplatformdatasets.googleapis.com/v1/projects/PROJECT_NUMBER_OR_ID/datasets/DATASET_ID:import

JSON リクエスト本文で、次の操作を行います。

  • inputUri を使用して、Cloud Storage 内のデータを含むリソースのファイルパスを指定します。このパスは gs://GCS_BUCKET/FILE の形式です。

    リクエストを行うユーザーには、Storage Object Viewer ロール、または storage.objects.get 権限を含む他のロールが必要です。Cloud Storage へのアクセス権の管理について詳しくは、 アクセス制御の概要をご覧ください。

  • fileFormat を使用して、データのファイル形式を次のいずれかで指定します: FILE_FORMAT_GEOJSON(GeoJson ファイル)、FILE_FORMAT_KML(KML ファイル)、または FILE_FORMAT_CSV(CSV ファイル)。

次に例を示します。

curl -X POST  -d '{
    "gcs_source":{
      "inputUri": "gs://my_bucket/my_csv_file",
      "fileFormat": "FILE_FORMAT_CSV"
    }
  }' \
  -H 'X-Goog-User-Project: PROJECT_NUMBER_OR_ID' \
  -H "content-type: application/json" \
  -H "Authorization: Bearer $TOKEN" \
  "https://mapsplatformdatasets.googleapis.com/v1/projects/PROJECT_NUMBER_OR_ID/datasets/f57074a0-a8b6-403e-9df1-e9fc46:import"

レスポンスは次の形式になります。

{
  "name": "projects/PROJECT_NUMBER_OR_ID/datasets/DATASET_ID@VERSION_NUMBER"
}

ファイルからデータをアップロードする

ファイルからデータをアップロードするには、データセットの ID も含む HTTP POST リクエストを データセット エンドポイントに送信します。

https://mapsplatformdatasets.googleapis.com/upload/v1/projects/PROJECT_NUMBER_OR_ID/datasets/DATASET_ID:import

リクエストには次のものが含まれます。

  • Goog-Upload-Protocol ヘッダーが multipart に設定されています。

  • アップロードするデータのタイプを指定するファイルのパスを指定する metadata プロパティ。 FILE_FORMAT_GEOJSON(GeoJSON ファイル)、 FILE_FORMAT_KML(KML ファイル)、FILE_FORMAT_CSV(CSV ファイル)のいずれかです。

    このファイルの内容は次の形式です。

    {"local_file_source": {"file_format": "FILE_FORMAT_GEOJSON"}}
  • アップロードするデータを含む GeoJSON、KML、または CSV ファイルのパスを指定する rawdata プロパティ。

次のリクエストでは、curl -F オプションを使用して 2 つのファイルのパスを指定します。

curl -X POST \
  -H 'X-Goog-User-Project: PROJECT_NUMBER_OR_ID' \
  -H "Authorization: Bearer $TOKEN" \
  -H "X-Goog-Upload-Protocol: multipart" \
  -F "metadata=@csv_metadata_file" \
  -F "rawdata=@csv_data_file" \
  "https://mapsplatformdatasets.googleapis.com/upload/v1/projects/PROJECT_NUMBER_OR_ID/datasets/f57074a0-a8b6-403e-9df1-e9fc46:import"

レスポンスは次の形式になります。

{
  "name": "projects/PROJECT_NUMBER_OR_ID/datasets/DATASET_ID@VERSION_NUMBER"
}

データ処理の状態を取得する

アップロード オペレーションは非同期です。つまり、データセットにデータをアップロードする API 呼び出しが返されたら、データ取り込みと処理が成功したか失敗したかを判断するために、データセットをポーリングする必要があります。

データセットの state を確認するには、データセットを取得するを使用します。たとえば、データの処理中、stateSTATE_PROCESSING に設定されます。アプリでデータセットを使用できる状態になると、stateSTATE_COMPLETED に設定されます。

たとえば、データセットに対して GET 呼び出しを行います。

curl -X GET \
  -H "X-Goog-User-Project: PROJECT_NUMBER_OR_ID" \
  -H "Authorization: Bearer $TOKEN" \
  "https://mapsplatformdatasets.googleapis.com/v1/projects/PROJECT_NUMBER_OR_ID/datasets/f57074a0-a8b6-403e-9df1-e9fc46"

アップロードが成功した場合、データセットの stateSTATE_COMPLETED になります。

{
  "name": "projects/119757857/datasets/f57074a0-a8b6-403e-9df1-e9fc46",
  "displayName": "My Test Dataset",
  "description": " ",
  "versionId": "837c5a9e-c885-4a5f-a462-7e35673e5218",
  "usage": [
    "USAGE_DATA_DRIVEN_STYLING"
  ],
  "localFileSource": {
    "filename": "Parks_Properties_20240529.csv",
    "fileFormat": "FILE_FORMAT_CSV"
  },
  "createTime": "2024-05-30T16:41:11.130816Z",
  "updateTime": "2024-05-30T16:41:14.416130Z",
  "versionCreateTime": "2024-05-30T16:41:14.416130Z",
  "status": {
    "state": "STATE_COMPLETED",
  },
  "sizeBytes": "6916924",
  "downloadable": true
}

データ処理が失敗すると、stateSTATE_COMPLETED以外の値(STATE_PUBLISHING_FAILED や 文字列 _FAILEDで終わるステータスなど)に設定されます。

たとえば、データセットにデータをアップロードしてから、GET リクエストを送信してデータセットの詳細を取得します。レスポンスには、state プロパティとともに、エラーの説明を含む単一の errorMessage プロパティも含まれます。

{
  "name": "projects/119757857/datasets/f57074a0-a8b6-403e-9df1-e9fc46",
  "displayName": "My Test Dataset",
  "description": " ",
  "versionId": "837c5a9e-c885-4a5f-a462-7e35673e5218",
  "usage": [
    "USAGE_DATA_DRIVEN_STYLING"
  ],
  "localFileSource": {
    "filename": "Parks_Properties_20240529.csv",
    "fileFormat": "FILE_FORMAT_CSV"
  },
  "createTime": "2024-05-30T16:41:11.130816Z",
  "updateTime": "2024-05-30T16:41:14.416130Z",
  "versionCreateTime": "2024-05-30T16:41:14.416130Z",
  "status": {
    "state": "STATE_PUBLISHING_FAILED",
    "errorMessage": "INVALID_ARGUMENT: Skipping row because address could not be geocoded: 5521 18 AVENUE (from line 79)"
  },
  "sizeBytes": "6916924",
  "downloadable": true
}

データ処理エラーを取得する

データの取り込みと処理が失敗すると、errorMessage プロパティにエラーを説明する単一のメッセージが含まれます。ただし、単一のエラー メッセージでは、問題を特定して修正するのに十分な情報が得られない場合があります。

完全なエラー情報を取得するには、 fetchDatasetErrors API を呼び出します。この API は、データセットに関連付けられたすべてのデータ処理エラーを返します。

curl -X GET \
  -H "X-Goog-User-Project: PROJECT_NUMBER_OR_ID" \
  -H "Authorization: Bearer $TOKEN" \
  "https://mapsplatformdatasets.googleapis.com/v1/projects/PROJECT_NUMBER_OR_ID/datasets/f57074a0-a8b6-403e-9df1-e9fc46:fetchDatasetErrors"

レスポンスには errors 配列が含まれます。この配列には、呼び出しごとに最大 50 個の 型 Status のエラーが含まれ、合計で最大 500 個のエラーがサポートされます。

{
  "nextPageToken": "cigKJkIkMTU3MzM0NjQtYzlmMy00YzYxLWIxM2YtYmVkYjFjYjRkYzRj",
  "errors": [
    {
      "code": 3,
      "message": "INVALID_ARGUMENT: No address was derived from fields 2. (from line 631)"
    },
    {
      "code": 3,
      "message": "INVALID_ARGUMENT: No address was derived from fields 2. (from line 457)"
    },
    {
      "code": 3,
      "message": "INVALID_ARGUMENT: No address was derived from fields 2. (from line 31)"
    },
    ...
  ]
}

50 個を超えるエラーがある場合(複数のエラーページがある場合)、レスポンスの nextPageToken フィールドにページトークンが含まれます。 後続の呼び出しの pageToken クエリ パラメータにその値を渡して、次のページのエラーを取得します。nextPageToken が空の場合、それ以上のページはありません。

たとえば、前のレスポンスのトークンを使用して次のページのエラーを取得するには、次のようにします。

curl -X GET \
  -H "content-type: application/json" \
  -H "X-Goog-User-Project: PROJECT_NUMBER_OR_ID" \
  -H "Authorization: Bearer $TOKEN" \
  "https://mapsplatformdatasets.googleapis.com/v1/projects/PROJECT_NUMBER_OR_ID/datasets/f57074a0-a8b6-403e-9df1-e9fc46:fetchDatasetErrors?pageToken=cigKJkIkMTU3MzM0NjQtYzlmMy00YzYxLWIxM2YtYmVkYjFjYjRkYzRj"

デフォルトでは、レスポンスにはページごとに最大 50 個のエラーが含まれます。pageSize クエリ パラメータを使用して、ページサイズを制御します。

データセットに新しいデータをアップロードする

データセットを作成して最初のデータを正常にアップロードすると、データセットの状態が STATE_COMPLETED に設定されます。つまり、アプリでデータセットを使用できる状態になります。データセットの state を確認するには、データセットを取得するをご覧ください。

データセットに新しいデータをアップロードして、データセットの新しいバージョンを作成することもできます。新しいデータをアップロードするには、データをアップロード Cloud Storage からまたはファイルからデータをアップロードで説明したのと同じプロセスを使用し、 アップロードする新しいデータを指定します。

新しいデータのアップロードが正常に完了した場合:

  • 新しいバージョンのデータセットの状態が STATE_COMPLETED に設定されます。

  • 新しいバージョンが「有効な」バージョン(アプリで使用されるバージョン)になります。

アップロード中にエラーが発生した場合:

  • 新しいデータセット バージョンの状態は、次のいずれかの状態に設定されます。

    • STATE_IMPORT_FAILED
    • STATE_PROCESSING_FAILED
    • STATE_PUBLISHING_FAILED
    • STATE_DELETION_FAILED
  • 以前のデータセットの成功バージョンが「有効な」バージョン(アプリで使用されるバージョン)のままになります。