ডেটাসেট তৈরি করা

ডেটাসেট তৈরি করার প্রক্রিয়াটি দুটি ধাপে সম্পন্ন হয়:

  1. ডেটাসেট তৈরি করার জন্য অনুরোধ করুন।

  2. ডেটাসেটে ডেটা আপলোড করার অনুরোধ করুন।

প্রাথমিক ডেটা আপলোডের পরে, ডেটাসেটের নতুন ভার্সন তৈরি করতে আপনি ডেটাসেটে নতুন ডেটা আপলোড করতে পারবেন।

ডেটাসেট তৈরি করা

ডেটাসেট এন্ডপয়েন্টে 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"

উত্তরে ডেটাসেটের আইডি, এই ফর্ম্যাটে projects/PROJECT_NUMBER_OR_ID/datasets/DATASET_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 থেকে ডেটা আপলোড করা

আপনি ডেটাসেট এন্ডপয়েন্টে POST অনুরোধ পাঠিয়ে ক্লাউড স্টোরেজ থেকে আপনার ডেটাসেটে আপলোড করেন, এতে ডেটাসেটের আইডিও অন্তর্ভুক্ত থাকে:

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

JSON অনুরোধের প্রধান অংশে:

  • Cloud Storage-এ ডেটা থাকা রিসোর্সের ফাইল পাথ নির্দিষ্ট করতে inputUri ব্যবহার করুন। এই পাথটি হল gs://GCS_BUCKET/FILE.

    অনুরোধকারী ব্যবহারকারীর স্টোরেজ অবজেক্ট ভিউয়ার ভূমিকা অথবা 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"
}

ফাইল থেকে ডেটা আপলোড করুন

কোনও ফাইল থেকে ডেটা আপলোড করতে, ডেটাসেট এন্ডপয়েন্টে 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 বিকল্প ব্যবহার করা হয়েছে:

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"

সফলভাবে আপলোড করার জন্য, ডেটাসেটের state হল 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
}

ডেটা প্রসেসিং ব্যর্থ হলে, 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 অ্যারে রয়েছে। এই অ্যারেতে কল পিছু Status এই ধরনের সর্বাধিক ৫০টি সমস্যা থাকে এবং মোট ৫০০টি সমস্যা এতে থাকতে পারে:

{
  "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)"
    },
    ...
  ]
}

৫০টির বেশি সমস্যা থাকলে, অর্থাৎ সমস্যার একাধিক পৃষ্ঠা থাকলে, উত্তরে 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"

ডিফল্ট হিসেবে, উত্তরে পৃষ্ঠা প্রতি সর্বাধিক ৫০টি ভুল থাকে। পৃষ্ঠার সাইজ নিয়ন্ত্রণ করতে pageSize কোয়েরি প্যারামিটার ব্যবহার করুন।

ডেটাসেটে নতুন ডেটা আপলোড করুন

আপনি ডেটাসেট তৈরি করে প্রাথমিক ডেটা আপলোড করার পরে, ডেটাসেটের স্ট্যাটাস STATE_COMPLETED-এ সেট করা হয়। এর অর্থ হল, ডেটাসেট আপনার অ্যাপে ব্যবহার করার জন্য প্রস্তুত। ডেটাসেটের state নির্ধারণ করতে, ডেটাসেট পান দেখুন।

এছাড়াও, ডেটাসেটের নতুন ভার্সন তৈরি করতে আপনি ডেটাসেটে নতুন ডেটা আপলোড করতে পারেন। নতুন ডেটা আপলোড করতে, Cloud Storage থেকে ডেটা আপলোড করা অথবা ফাইল থেকে ডেটা আপলোড করার জন্য আপনি যে প্রসেস ব্যবহার করেছিলেন, সেই একই প্রসেস ব্যবহার করুন এবং আপলোড করার জন্য নতুন ডেটা নির্দিষ্ট করুন।

নতুন ডেটা আপলোড করা হলে:

  • ডেটাসেটের নতুন ভার্সনের স্ট্যাটাস STATE_COMPLETED-এ সেট করা হয়েছে।

  • নতুন ভার্সনটি "অ্যাক্টিভ" ভার্সন হয়ে যায় এবং আপনার অ্যাপ এই ভার্সনটিই ব্যবহার করে।

আপলোড করার সময় কোনও সমস্যা হলে:

  • নতুন ডেটাসেট ভার্সনের স্ট্যাটাস নিম্নলিখিত স্ট্যাটাসের মধ্যে একটিতে সেট করা হয়:

    • STATE_IMPORT_FAILED
    • STATE_PROCESSING_FAILED
    • STATE_PUBLISHING_FAILED
    • STATE_DELETION_FAILED
  • আগের ডেটাসেটের সফল ভার্সনটি "অ্যাক্টিভ" ভার্সন হিসেবে থেকে যায় এবং আপনার অ্যাপ এই ভার্সনটিই ব্যবহার করে।