创建数据集

创建数据集的过程分为两个步骤:

  1. 发出创建数据集的请求。

  2. 发出请求以将数据上传到数据集。

初始数据上传后,您可以向数据集上传新数据,以创建数据集的新版本。

创建数据集

通过向 datasets 端点发送 POST 请求来创建数据集:

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

JSON 正文传递给用于定义数据集的请求。您必须:

  • 指定数据集的 displayName。所有数据集的 displayName 值都必须是唯一的。

  • usage 设置为 USAGE_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 上传到数据集,请向 datasets 端点发送 POST 请求,其中还包含数据集的 ID:

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"
}

通过文件上传数据

如需从文件上传数据,请向 datasets 端点发送 HTTP POST 请求,其中还包含数据集的 ID:

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"}}
  • rawdata 属性 - 用于指定包含要上传的数据的 GeoJSON、KML 或 CSV 文件的路径。

以下请求使用 curl -F 选项指定两个文件的路径:

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,请使用获取数据集。例如,在处理数据时,state 会设置为 STATE_PROCESSING。当数据集准备好在应用中使用时,state 会设为 STATE_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
}

当数据处理失败时,state 会设置为 STATE_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
  • 先前成功发布的数据集版本会保留为“有效”版本,并成为应用使用的版本。