Quy trình tạo tập dữ liệu gồm 2 bước:
Tạo yêu cầu tạo tập dữ liệu.
Tạo yêu cầu tải dữ liệu lên tập dữ liệu.
Sau lần tải dữ liệu ban đầu lên, bạn có thể tải dữ liệu mới lên tập dữ liệu để tạo phiên bản mới của tập dữ liệu.
Tạo tập dữ liệu
Tạo tập dữ liệu bằng cách gửi yêu cầu POST
đến điểm cuối datasets (tập dữ liệu):
https://mapsplatformdatasets.googleapis.com/v1/projects/PROJECT_NUMBER_OR_ID/datasets
Truyền phần nội dung JSON vào yêu cầu xác định tập dữ liệu. Bạn phải:
Chỉ định
displayName
của tập dữ liệu. Giá trị củadisplayName
phải là duy nhất cho tất cả các tập dữ liệu.Đặt
usage
thànhUSAGE_DATA_DRIVEN_STYLING
.
Ví dụ:
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"
Phản hồi chứa mã nhận dạng của tập dữ liệu, ở dạng projects/PROJECT_NUMBER_OR_ID/datasets/DATASET_ID
cùng với thông tin bổ sung. Sử dụng mã nhận dạng tập dữ liệu khi đưa ra yêu cầu cập nhật hoặc sửa đổi tập dữ liệu.
{ "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" }
Tải dữ liệu lên tập dữ liệu
Sau khi bạn tạo tập dữ liệu, hãy tải dữ liệu lên từ Google Cloud Storage hoặc từ tệp cục bộ vào tập dữ liệu.
Thao tác tải lên là không đồng bộ. Sau khi bạn tải dữ liệu lên, dữ liệu sẽ được nhập và xử lý. Điều đó có nghĩa là bạn phải tạo một yêu cầu GET HTTP để theo dõi trạng thái của tập dữ liệu nhằm xác định thời điểm tập dữ liệu sẵn sàng để sử dụng hoặc liệu có lỗi nào không. Để biết thêm thông tin, hãy xem phần Nhận trạng thái xử lý dữ liệu.
Tải dữ liệu lên từ Cloud Storage
Bạn tải dữ liệu lên từ Cloud Storage vào tập dữ liệu bằng cách gửi yêu cầu POST
đến điểm cuối datasets (tập dữ liệu) cũng bao gồm mã nhận dạng của tập dữ liệu:
https://mapsplatformdatasets.googleapis.com/v1/projects/PROJECT_NUMBER_OR_ID/datasets/DATASET_ID:import
Trong phần nội dung yêu cầu JSON:
Sử dụng
inputUri
để chỉ định đường dẫn tệp đến tài nguyên chứa dữ liệu trong Cloud Storage. Đường dẫn này có dạnggs://GCS_BUCKET/FILE
.Người dùng đưa ra yêu cầu cần có vai trò Người xem đối tượng bộ nhớ hoặc bất kỳ vai trò nào khác có quyền
storage.objects.get
. Để biết thêm thông tin về cách quản lý quyền truy cập vào Cloud Storage, hãy xem bài viết Tổng quan về tính năng kiểm soát quyền truy cập.Sử dụng
fileFormat
để chỉ định định dạng tệp của dữ liệu là:FILE_FORMAT_GEOJSON
(tệp GeoJson),FILE_FORMAT_KML
(tệp KML) hoặcFILE_FORMAT_CSV
(tệp CSV).
Ví dụ:
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"
Phản hồi có dạng:
{ "name": "projects/PROJECT_NUMBER_OR_ID/datasets/DATASET_ID@VERSION_NUMBER" }
Tải dữ liệu lên từ một tệp
Để tải dữ liệu lên từ một tệp, hãy gửi yêu cầu HTTP POST
đến điểm cuối tập dữ liệu cũng bao gồm mã nhận dạng của tập dữ liệu:
https://mapsplatformdatasets.googleapis.com/upload/v1/projects/PROJECT_NUMBER_OR_ID/datasets/DATASET_ID:import
Yêu cầu này chứa:
Tiêu đề
Goog-Upload-Protocol
được đặt thànhmultipart
.Thuộc tính
metadata
chỉ định đường dẫn đến một tệp chỉ định loại dữ liệu cần tải lên, chẳng hạn như:FILE_FORMAT_GEOJSON
(tệp GeoJSON),FILE_FORMAT_KML
(tệp KML) hoặcFILE_FORMAT_CSV
(tệp CSV).Nội dung của tệp này có định dạng như sau:
{"local_file_source": {"file_format": "FILE_FORMAT_GEOJSON"}}
Thuộc tính
rawdata
chỉ định đường dẫn đến tệp GeoJSON, KML hoặc CSV chứa dữ liệu cần tải lên.
Yêu cầu sau đây sử dụng tuỳ chọn curl -F
để chỉ định đường dẫn đến 2 tệp:
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"
Phản hồi có dạng:
{ "name": "projects/PROJECT_NUMBER_OR_ID/datasets/DATASET_ID@VERSION_NUMBER" }
Nhận trạng thái xử lý dữ liệu
Thao tác tải lên là không đồng bộ. Điều đó có nghĩa là sau khi lệnh gọi API để tải dữ liệu lên tập dữ liệu trả về, bạn phải thăm dò tập dữ liệu để xác định xem quá trình nhập và xử lý dữ liệu thành công hay không thành công.
Để xác định state
của tập dữ liệu, hãy sử dụng Lấy tập dữ liệu. Ví dụ: trong khi dữ liệu đang được xử lý, state
được đặt thành STATE_PROCESSING
. Khi tập dữ liệu đã sẵn sàng để sử dụng trong ứng dụng, state
sẽ được đặt thành STATE_COMPLETED
.
Ví dụ: thực hiện lệnh gọi GET trên tập dữ liệu:
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"
Để tải lên thành công, state
của tập dữ liệu phải là STATE_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 }
Khi xử lý dữ liệu không thành công, state
được đặt thành một giá trị khác với STATE_COMPLETED
, chẳng hạn như STATE_PUBLISHING_FAILED
hoặc bất kỳ trạng thái nào kết thúc bằng chuỗi _FAILED
.
Ví dụ: bạn tải dữ liệu lên một tập dữ liệu, sau đó tạo một yêu cầu GET để lấy thông tin chi tiết về tập dữ liệu đó. Cùng với thuộc tính state
, phản hồi còn bao gồm một thuộc tính errorMessage
duy nhất chứa nội dung mô tả lỗi.
{ "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 }
Nhận lỗi xử lý dữ liệu
Khi việc nhập và xử lý dữ liệu không thành công, thuộc tính errorMessage
sẽ chứa một thông báo mô tả lỗi. Tuy nhiên, một thông báo lỗi không nhất thiết phải cung cấp đủ thông tin để xác định và khắc phục vấn đề.
Để biết thông tin đầy đủ về lỗi, hãy gọi API fetchDatasetErrors
. API này trả về tất cả các lỗi xử lý dữ liệu liên quan đến một tập dữ liệu:
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"
Phản hồi chứa mảng errors
. Mảng này chứa tối đa 50 lỗi thuộc loại Status
cho mỗi lệnh gọi và hỗ trợ tổng cộng tối đa 500 lỗi:
{ "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)" }, ... ] }
Nếu có hơn 50 lỗi, tức là có nhiều trang lỗi, thì phản hồi sẽ chứa mã thông báo trang trong trường nextPageToken
.
Truyền giá trị đó trong tham số truy vấn pageToken
của lệnh gọi tiếp theo để nhận trang lỗi tiếp theo. Khi nextPageToken
trống, sẽ không còn trang nào nữa.
Ví dụ: để xem trang lỗi tiếp theo bằng mã thông báo của phản hồi trước đó:
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"
Theo mặc định, phản hồi chứa tối đa 50 lỗi trên mỗi trang. Sử dụng tham số truy vấn pageSize
để kiểm soát kích thước trang.
Tải dữ liệu mới lên tập dữ liệu
Sau khi bạn tạo tập dữ liệu và tải dữ liệu ban đầu lên thành công, trạng thái của tập dữ liệu sẽ được đặt thành STATE_COMPLETED
. Điều đó có nghĩa là tập dữ liệu đã sẵn sàng để sử dụng trong ứng dụng của bạn. Để xác định state
của tập dữ liệu, hãy xem phần Tải tập dữ liệu.
Bạn cũng có thể tải dữ liệu mới lên tập dữ liệu để tạo phiên bản mới của tập dữ liệu. Để tải dữ liệu mới lên, hãy sử dụng quy trình tương tự như khi bạn thực hiện để Tải dữ liệu lên từ Cloud Storage hoặc Tải dữ liệu lên từ một tệp, rồi chỉ định dữ liệu mới cần tải lên.
Nếu dữ liệu mới được tải lên thành công:
Trạng thái của phiên bản mới của tập dữ liệu được đặt thành
STATE_COMPLETED
.Phiên bản mới sẽ trở thành phiên bản "đang hoạt động" và là phiên bản mà ứng dụng của bạn sử dụng.
Nếu có lỗi trong quá trình tải lên:
Trạng thái của phiên bản tập dữ liệu mới được đặt thành một trong các trạng thái sau:
STATE_IMPORT_FAILED
STATE_PROCESSING_FAILED
STATE_PUBLISHING_FAILED
STATE_DELETION_FAILED
Phiên bản thành công của tập dữ liệu trước đó vẫn là phiên bản "đang hoạt động" và là phiên bản mà ứng dụng của bạn sử dụng.