একটি স্থান অন্তর্দৃষ্টি প্রশ্ন লিখুন

স্থানের অন্তর্দৃষ্টি ডেটা অ্যাক্সেস করতে, আপনি BigQuery-এ SQL কোয়েরি লিখুন যা স্থানগুলির সম্বন্ধে সমষ্টিগত অন্তর্দৃষ্টি প্রদান করে। ক্যোয়ারীতে নির্দিষ্ট করা অনুসন্ধানের মানদণ্ডের জন্য ডেটাসেট থেকে ফলাফল ফেরত দেওয়া হয়।

ক্যোয়ারী প্রয়োজনীয়তা

ক্যোয়ারীতে SELECT স্টেটমেন্টটি অবশ্যই WITH AGGREGATION_THRESHOLD অন্তর্ভুক্ত করতে হবে এবং ডেটাসেটটি নির্দিষ্ট করতে হবে। যেমন:

SELECT WITH AGGREGATION_THRESHOLD
COUNT(*) AS count
FROM `places_insights___us___sample.places_sample`

এই উদাহরণে, আপনি মার্কিন যুক্তরাষ্ট্রের জন্য places_insights___us___sample.places_sample ডেটাসেট নির্দিষ্ট করতে FROM ব্যবহার করেন।

একটি অবস্থান সীমাবদ্ধতা নির্দিষ্ট করুন

লক্ষ্য করুন যে পূর্ববর্তী ক্যোয়ারী কোনো অবস্থানের সীমাবদ্ধতা নির্দিষ্ট করে না, যার অর্থ সমগ্র ডেটাসেটে ডেটা একত্রিতকরণ প্রয়োগ করা হয়। সাধারণত আপনি একটি অবস্থান সীমাবদ্ধতা নির্দিষ্ট করেন যেমন নীচে দেখানো হয়েছে:

SELECT WITH AGGREGATION_THRESHOLD
COUNT(*) AS count
FROM `places_insights___us___sample.places_sample`
WHERE
ST_DWITHIN(ST_GEOGPOINT(-73.9857, 40.7484), point, 1000)

এই উদাহরণে, আপনার ক্যোয়ারী 1000 মিটার ব্যাসার্ধ সহ নিউ ইয়র্ক সিটির এম্পায়ার স্টেট বিল্ডিংকে কেন্দ্র করে একটি লক্ষ্য সীমাবদ্ধতা নির্দিষ্ট করে৷

আপনি অনুসন্ধান এলাকা নির্দিষ্ট করতে একটি বহুভুজ ব্যবহার করতে পারেন। বহুভুজ ব্যবহার করার সময়, বহুভুজের বিন্দুগুলিকে অবশ্যই একটি বন্ধ লুপ সংজ্ঞায়িত করতে হবে যেখানে বহুভুজের প্রথম বিন্দুটি শেষ বিন্দুর মতো:

SELECT WITH AGGREGATION_THRESHOLD
COUNT(*) AS count
FROM `places_insights___us___sample.places_sample`
WHERE
ST_CONTAINS(ST_GEOGFROMTEXT("""POLYGON((-73.985708 40.75773,-73.993324 40.750298,
                                      -73.9857 40.7484,-73.9785 40.7575,
                                      -73.985708 40.75773))"""), point)

পরবর্তী উদাহরণে, আপনি সংযুক্ত পয়েন্টগুলির একটি লাইন ব্যবহার করে অনুসন্ধান এলাকাটি সংজ্ঞায়িত করুন। লাইনটি রুট API দ্বারা গণনা করা একটি ভ্রমণ রুটের অনুরূপ। পথটি একটি যানবাহন, একটি সাইকেল বা পথচারীর জন্য হতে পারে:

DECLARE route GEOGRAPHY;

SET route = ST_GEOGFROMTEXT("""LINESTRING(-73.98903537033028 40.73655649223003,
                                          -73.93580216278471 40.80955538843361)""");

SELECT WITH AGGREGATION_THRESHOLD
  COUNT(*) AS count
FROM `places_insights___us___sample.places_sample`
WHERE
  ST_DWITHIN(route, point, 100)

এই উদাহরণে, আপনি লাইনের চারপাশে 100 মিটার অনুসন্ধান ব্যাসার্ধ সেট করেছেন।

স্থান ডেটাসেট ক্ষেত্র দ্বারা ফিল্টার

ডেটাসেট স্কিমা দ্বারা সংজ্ঞায়িত ক্ষেত্রগুলির উপর ভিত্তি করে আপনার অনুসন্ধানকে পরিমার্জিত করুন৷ ডেটাসেট ক্ষেত্রগুলির উপর ভিত্তি করে ফলাফলগুলি ফিল্টার করুন যেমন স্থান regular_opening_hours , price_level , এবং গ্রাহকের rating

আপনার আগ্রহের দেশের জন্য ডেটাসেট স্কিমা দ্বারা সংজ্ঞায়িত ডেটাসেটের যেকোনো ক্ষেত্র উল্লেখ করুন। প্রতিটি দেশের জন্য ডেটাসেট স্কিমা দুটি অংশ নিয়ে গঠিত:

উদাহরণস্বরূপ, আপনার ক্যোয়ারীতে একটি WHERE ক্লজ অন্তর্ভুক্ত থাকতে পারে যা ক্যোয়ারীটির জন্য ফিল্টারিং মানদণ্ড নির্ধারণ করে। নিম্নলিখিত উদাহরণে, আপনি OPERATIONAL এর business_status সহ restaurant ধরনের স্থানগুলির জন্য একত্রিতকরণ ডেটা ফেরত দেন, যার rating 4.0-এর বেশি বা সমান, এবং allows_dogs true সেট করা আছে:

SELECT WITH AGGREGATION_THRESHOLD
COUNT(*) AS count
FROM `places_insights___us___sample.places_sample`
WHERE
ST_DWITHIN(ST_GEOGPOINT(-73.9857, 40.7484), point, 1000)
AND 'restaurant' IN UNNEST(types)
AND business_status = "OPERATIONAL"
AND rating >= 4.0
AND allows_dogs = true

পরবর্তী ক্যোয়ারী এমন জায়গাগুলির জন্য ফলাফল প্রদান করে যেখানে কমপক্ষে আটটি ইভি চার্জিং স্টেশন রয়েছে:

SELECT WITH AGGREGATION_THRESHOLD
  COUNT(*) AS count
FROM
  `places_insights___us___sample.places_sample`
WHERE
  ev_charge_options.connector_count > 8;

স্থান প্রাথমিক প্রকার এবং স্থানের ধরন উপর ফিল্টার

ডেটাসেটের প্রতিটি জায়গায় থাকতে পারে:

  • সারণি A দ্বারা সংজ্ঞায়িত প্রকারগুলি থেকে এটির সাথে যুক্ত একটি একক প্রাথমিক প্রকার । উদাহরণস্বরূপ, প্রাথমিক প্রকার হতে পারে mexican_restaurant বা steak_house । একটি স্থানের প্রাথমিক প্রকারের ফলাফলগুলি ফিল্টার করতে একটি প্রশ্নে primary_type ব্যবহার করুন৷

  • সারণি A দ্বারা সংজ্ঞায়িত প্রকারগুলি থেকে এটির সাথে যুক্ত একাধিক ধরণের মান । যেমন একটি রেস্তোরাঁর নিম্নলিখিত প্রকার থাকতে পারে: seafood_restaurant , restaurant , food , point_of_interest , establishment । স্থানের সাথে সম্পর্কিত প্রকারের তালিকায় ফলাফলগুলি ফিল্টার করতে একটি প্রশ্নে types ব্যবহার করুন৷

নিম্নলিখিত ক্যোয়ারী একটি প্রাথমিক ধরনের bar সহ সমস্ত স্থানের জন্য ফলাফল প্রদান করে কিন্তু এটি একটি restaurant হিসাবে কাজ করে:

SELECT WITH AGGREGATION_THRESHOLD
  COUNT(*) AS count
FROM
  `places_insights___us___sample.places_sample`
WHERE
  'restaurant' IN UNNEST(types)
  AND 'bar' = primary_type

পূর্বনির্ধারিত ডেটা মানগুলিতে ফিল্টার করুন

অনেক ডেটাসেট ক্ষেত্রের পূর্বনির্ধারিত মান রয়েছে। যেমন

  • price_level ক্ষেত্রটি নিম্নলিখিত পূর্বনির্ধারিত মানগুলিকে সমর্থন করে:

    • PRICE_LEVEL_FREE
    • PRICE_LEVEL_INEXPENSIVE
    • PRICE_LEVEL_MODERATE
    • PRICE_LEVEL_EXPENSIVE
    • PRICE_LEVEL_VERY_EXPENSIVE
  • business_status ক্ষেত্র নিম্নলিখিত পূর্বনির্ধারিত মান সমর্থন করে:

    • OPERATIONAL
    • CLOSED_TEMPORARILY
    • CLOSED_PERMANENTLY

এই উদাহরণে, ক্যোয়ারীটি নিউ ইয়র্ক সিটির এম্পায়ার স্টেট বিল্ডিং-এর 1000 মিটার ব্যাসার্ধের মধ্যে business_status OPERATIONAL সমস্ত রেস্তোরাঁর গণনা প্রদান করে:

SELECT WITH AGGREGATION_THRESHOLD
COUNT(*) AS count
FROM `places_insights___us___sample.places_sample`
WHERE
ST_DWITHIN(ST_GEOGPOINT(-73.9857, 40.7484), point, 1000)
AND business_status = "OPERATIONAL"
AND 'restaurant' IN UNNEST(types)

অপারেশন ঘন্টা দ্বারা ফিল্টার

এই উদাহরণে, শুক্রবারের খুশির সময় সহ একটি ভৌগলিক এলাকার সমস্ত স্থানের গণনা ফেরত দিন:

SELECT WITH AGGREGATION_THRESHOLD COUNT(*) AS count
FROM `places_insights___us___sample.places_sample`,
UNNEST(regular_opening_hours_happy_hour.friday) AS friday_hours
WHERE '17:00:00' BETWEEN friday_hours.start_time AND friday_hours.end_time
AND ST_DWITHIN(ST_GEOGPOINT(-73.9857, 40.7484), point, 1000);

একটি সমষ্টি ফাংশন ব্যবহার করুন

নীচের উদাহরণটি সমর্থিত BigQuery একত্রীকরণ ফাংশন দেখায়। এই প্রশ্নটি রেটিং পরিসংখ্যান তৈরি করতে নিউ ইয়র্ক সিটির এম্পায়ার স্টেট বিল্ডিংয়ের 1000 মিটার ব্যাসার্ধের মধ্যে অবস্থিত সমস্ত স্থানের রেটিংগুলিকে একত্রিত করে:

SELECT WITH AGGREGATION_THRESHOLD
  COUNT(id) AS place_count,
  APPROX_COUNT_DISTINCT(rating) as distinct_ratings,
  COUNTIF(rating > 4.0) as good_rating_count,
  LOGICAL_AND(rating <= 5) as all_ratings_equal_or_below_five,
  LOGICAL_OR(rating = 5) as any_rating_exactly_five,
  AVG(rating) as avg_rating,
  SUM(user_rating_count) as rating_count,
  COVAR_POP(rating, user_rating_count) as rating_covar_pop,
  COVAR_SAMP(rating, user_rating_count) as rating_covar_samp,
  STDDEV_POP(rating) as rating_stddev_pop,
  STDDEV_SAMP(rating) as rating_stddev_samp,
  VAR_POP(rating) as rating_var_pop,
  VAR_SAMP(rating) as rating_var_samp,
FROM
  `places_insights___us___sample.places_sample`
WHERE
  ST_DWITHIN(ST_GEOGPOINT(-73.9857, 40.7484), point, 1000)
  AND business_status = "OPERATIONAL"

ফলাফল গোষ্ঠী ফেরত দিন

এখন পর্যন্ত দেখানো কোয়েরি ফলাফলে একটি একক সারি প্রদান করে যাতে ক্যোয়ারীটির সমষ্টির সংখ্যা থাকে। আপনি গ্রুপিং মানদণ্ডের উপর ভিত্তি করে প্রতিক্রিয়াতে একাধিক সারি ফেরত দিতে GROUP BY অপারেটর ব্যবহার করতে পারেন।

উদাহরণ স্বরূপ, নিম্নোক্ত ক্যোয়ারী সার্চ এলাকায় প্রতিটি স্থানের প্রাথমিক প্রকার অনুসারে গোষ্ঠীবদ্ধ ফলাফল প্রদান করে:

SELECT WITH AGGREGATION_THRESHOLD
  primary_type,
  COUNT(*) AS count
FROM
  `places_insights___us___sample.places_sample`
WHERE
  ST_DWITHIN(ST_GEOGPOINT(-73.99992071622756, 40.71818785986936), point, 1000)
GROUP BY primary_type

নিম্নলিখিত চিত্রটি এই প্রশ্নের একটি উদাহরণ আউটপুট দেখায়:

প্রাইমারি টাইপ অনুসারে গোষ্ঠীভুক্ত ফলাফলের জন্য কোয়েরি ফলাফল।

এই উদাহরণে আপনি অবস্থানের একটি টেবিল সংজ্ঞায়িত করুন। প্রতিটি অবস্থানের জন্য আপনি তখন কাছাকাছি রেস্তোরাঁর সংখ্যা গণনা করবেন, যার অর্থ 1000 মিটারের মধ্যে রয়েছে:

WITH my_locations AS (
  SELECT 'Location 1' AS name, ST_GEOGPOINT(-74.00776440888504, 40.70932825380786) AS location
  UNION ALL
  SELECT 'Location 2' AS name, ST_GEOGPOINT(-73.98257192833559, 40.750738934863215) AS location
  UNION ALL
  SELECT 'Location 3' AS name, ST_GEOGPOINT(-73.94701794263223, 40.80792954838445)  AS location
)
SELECT WITH AGGREGATION_THRESHOLD
  l.name,
  COUNT(*) as count
FROM
  `places_insights___us___sample.places_sample` p
JOIN
   my_locations l
ON
  ST_DWITHIN(l.location, p.point, 1000)
WHERE
  primary_type = "restaurant"
  AND business_status = "OPERATIONAL"
GROUP BY
  l.name

নিম্নলিখিত চিত্রটি এই প্রশ্নের একটি উদাহরণ আউটপুট দেখায়:

অবস্থান অনুসারে গোষ্ঠীভুক্ত ফলাফলের জন্য অনুসন্ধানের ফলাফল।