স্থানের অন্তর্দৃষ্টি ডেটা অ্যাক্সেস করতে, আপনি 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
নিম্নলিখিত চিত্রটি এই প্রশ্নের একটি উদাহরণ আউটপুট দেখায়: