PLACES_COUNT फ़ंक्शन

PLACES_COUNT फ़ंक्शन, खोज के लिए तय की गई जगह और खोज के फ़िल्टर के आधार पर, जगहों की गिनती की एक वैल्यू दिखाता है. PLACES_COUNT फ़ंक्शन के लिए, खोज के दायरे की जानकारी देना ज़रूरी है. इसके अलावा, फ़िल्टर करने के लिए अन्य पैरामीटर भी दिए जा सकते हैं. जैसे, जगह का टाइप, चालू होने की स्थिति, कीमत का लेवल वगैरह.

PLACES_COUNT फ़ंक्शन एक वैल्यू दिखाता है. इसलिए, इसे SELECT क्लॉज़ का इस्तेमाल करके कॉल करें.

  • इनपुट पैरामीटर:

    • ज़रूरी है: geography फ़िल्टर पैरामीटर, जो खोज के दायरे के बारे में बताता है. geography पैरामीटर, BigQuery के GEOGRAPHY डेटा टाइप से तय की गई वैल्यू लेता है. यह पॉइंट, लाइनस्ट्रिंग, और पॉलीगॉन के साथ काम करता है.

    • ज़रूरी नहीं: खोज के नतीजों को बेहतर बनाने के लिए, फ़िल्टर करने वाले अतिरिक्त पैरामीटर.

  • वापसी:

    • count की एक वैल्यू को INT64 के तौर पर इस्तेमाल किया जाता है.

उदाहरण: खोज के दायरे में मौजूद जगहों की संख्या का हिसाब लगाना

सबसे आसान PLACES_COUNT फ़ंक्शन कॉल, किसी भौगोलिक इलाके में मौजूद सभी जगहों की गिनती दिखाता है. इस उदाहरण में, एंपायर स्टेट बिल्डिंग से 1,000 मीटर के दायरे में मौजूद सभी जगहों की संख्या दिखाई गई है.

इस उदाहरण में, BigQuery के ST_GEOGPOINT फ़ंक्शन का इस्तेमाल किया गया है. इससे किसी पॉइंट से GEOGRAPHY वैल्यू मिलती है.

SELECT `places_insights___us___sample.PLACES_COUNT`(
  JSON_OBJECT(
      'geography', ST_GEOGPOINT(-73.9857, 40.7484), -- Empire State Building
      'geography_radius', 1000 -- Radius in meters
      )
) as count;

जवाब में सिर्फ़ एक संख्या शामिल है:

न्यूयॉर्क शहर में Place Count फ़ंक्शन के नतीजे.

ज़्यादातर कॉल में, खोज के दायरे पर फ़िल्टर लागू किए जाते हैं. अगले उदाहरण में, फ़िल्टर का इस्तेमाल किया गया है. इससे खोज के नतीजे में सिर्फ़ इनकी संख्या दिखेगी:

  • restaurant टाइप की ऐसी जगहें जिनकी रेटिंग कम से कम 3 हो
  • किफ़ायती या सामान्य कीमत वाला
  • फ़िलहाल चालू है
  • कुत्तों को लाने की अनुमति है
SELECT `places_insights___us___sample.PLACES_COUNT`(
  JSON_OBJECT(
      'geography', ST_GEOGPOINT(-73.9857, 40.7484), -- Empire State Building
      'geography_radius', 1000, -- Radius in meters
      'types', ["restaurant"],
      'min_rating', 3,
      'price_level', ['PRICE_LEVEL_INEXPENSIVE', 'PRICE_LEVEL_MODERATE'],
      'business_status', ['OPERATIONAL'],
      'allows_dogs', TRUE
      )
) as count;

फ़िल्टर किया गया जवाब:

न्यूयॉर्क सिटी में रेस्टोरेंट की जगह की गिनती करने वाले फ़ंक्शन को फ़िल्टर करने के नतीजे.

ध्यान रखें कि जगह के डेटासेट की क्वेरी के लिए, कम से कम पांच की थ्रेशोल्ड सीमा लागू होती है. जगह की गिनती करने वाले फ़ंक्शन का एक फ़ायदा यह है कि ये कोई भी गिनती दिखा सकते हैं. इसमें 0 भी शामिल है. उदाहरण के लिए, इस कॉल से 1 की गिनती मिलती है:

SELECT `places_insights___us___sample.PLACES_COUNT`(
  JSON_OBJECT(
      'geography', ST_GEOGPOINT(-73.9857, 40.7484), -- Empire State Building
      'geography_radius', 500, -- Radius in meters
      'types', ["restaurant"],
      'min_rating', 4.0,
      'free_parking_lot', TRUE,
      'good_for_watching_sports', TRUE
      )
) as count;

उदाहरण: पॉलीगॉन का इस्तेमाल करके, रेस्टोरेंट की संख्या का हिसाब लगाना

खोज के लिए, पॉलीगॉन का इस्तेमाल किया जा सकता है. पॉलीगॉन का इस्तेमाल करते समय, पॉलीगॉन के पॉइंट एक क्लोज़्ड लूप तय करने चाहिए. साथ ही, पॉलीगॉन का पहला पॉइंट, आखिरी पॉइंट के जैसा होना चाहिए.

इस उदाहरण में, BigQuery के ST_GEOGFROMTEXT फ़ंक्शन का इस्तेमाल करके, पॉलीगॉन से GEOGRAPHY वैल्यू दिखाई गई है.

DECLARE geo GEOGRAPHY;
SET geo = ST_GEOGFROMTEXT('''POLYGON((-73.985708 40.75773,-73.993324 40.750298,
                                      -73.9857 40.7484,-73.9785 40.7575,
                                      -73.985708 40.75773))''');  -- NYC viewport

SELECT `places_insights___us___sample.PLACES_COUNT`(
  JSON_OBJECT(
      'geography',geo, -- viewport 
      'types', ["restaurant"],
      'min_rating', 1.0,
      'max_rating', 4.5,
      'min_user_rating_count', 1,
      'max_user_rating_count', 10000,
      'price_level', ['PRICE_LEVEL_INEXPENSIVE', 'PRICE_LEVEL_MODERATE'],
      'business_status', ['OPERATIONAL'],
      'allows_dogs', TRUE
      )
) as count;

व्यूपोर्ट के लिए जवाब:

न्यूयॉर्क शहर के व्यूपोर्ट में, रेस्टोरेंट की जगह की गिनती करने वाली सुविधा को फ़िल्टर करने के नतीजे.

उदाहरण: लाइन का इस्तेमाल करके रेस्टोरेंट की संख्या का हिसाब लगाना

अगले उदाहरण में, कनेक्ट किए गए पॉइंट की लाइन का इस्तेमाल करके खोज के दायरे को तय किया गया है. इस लाइन के चारों ओर 100 मीटर के दायरे में खोज की जाएगी. यह लाइन, Routes API से कैलकुलेट किए गए यात्रा के रूट की तरह होती है. यह रूट किसी वाहन, साइकल या पैदल चलने वाले व्यक्ति के लिए हो सकता है:

DECLARE geo GEOGRAPHY;
SET geo = ST_GEOGFROMTEXT('LINESTRING(-73.98903537033028 40.73655649223003,-73.93580216278471 40.80955538843361)');  -- NYC line

SELECT `places_insights___us___sample.PLACES_COUNT`(
  JSON_OBJECT(
      'geography',geo, -- line
      'geography_radius', 100, -- Radius around line
      'types', ["restaurant"],
      'min_rating', 1.0,
      'max_rating', 4.5,
      'min_user_rating_count', 1,
      'max_user_rating_count', 10000,
      'price_level', ['PRICE_LEVEL_INEXPENSIVE', 'PRICE_LEVEL_MODERATE'],
      'business_status', ['OPERATIONAL'],
      'allows_dogs', TRUE
      )
) as count;

लाइन के लिए जवाब:

न्यूयॉर्क शहर में किसी लाइन के हिसाब से, रेस्टोरेंट की जगह की गिनती करने वाले फ़ंक्शन को फ़िल्टर करने के नतीजे.

उदाहरण: एक से ज़्यादा कॉल के नतीजों को जोड़ना

PLACES_COUNT फ़ंक्शन को कई बार कॉल करके मिले नतीजों को एक साथ इस्तेमाल किया जा सकता है. उदाहरण के लिए, आपको किसी इलाके में कीमत के इन लेवल के हिसाब से रेस्टोरेंट की संख्या दिखाने वाला एक नतीजा चाहिए:

  • PRICE_LEVEL_INEXPENSIVE
  • PRICE_LEVEL_MODERATE
  • PRICE_LEVEL_EXPENSIVE
  • PRICE_LEVEL_VERY_EXPENSIVE"

इस उदाहरण में, हर कीमत के लेवल के लिए PLACES_COUNT फ़ंक्शन को कॉल करने के लिए एक लूप बनाया जाता है. साथ ही, हर कॉल के नतीजे को एक अस्थायी टेबल में डाला जाता है. इसके बाद, नतीजों को दिखाने के लिए, अस्थायी टेबल से क्वेरी करें:

-- Create a temp table to hold the results.
CREATE TEMP TABLE results (type STRING, count INT64);

-- Create a loop that calls PLACES_COUNT for each price level.
FOR types IN (SELECT type FROM UNNEST(["PRICE_LEVEL_INEXPENSIVE", "PRICE_LEVEL_MODERATE", "PRICE_LEVEL_EXPENSIVE", "PRICE_LEVEL_VERY_EXPENSIVE"]) as type)
DO
  INSERT INTO results VALUES (types.type, `places_insights___us___sample.PLACES_COUNT`(
  JSON_OBJECT(
      'types', ["restaurant"],
      'geography', ST_GEOGPOINT(-73.9857, 40.7484), -- Empire State Building
      'geography_radius', 1000, -- Radius in meters
      'business_status', ['OPERATIONAL'],
      'price_level', [types.type]
  )));
END FOR;

-- Query the table of results.
SELECT * FROM results;

मिला-जुला जवाब:

कीमत के हिसाब से रेस्टोरेंट फ़िल्टर करने के लिए, मिले-जुले नतीजे.

एक और विकल्प यह है कि कई SELECT स्टेटमेंट के नतीजों को एक साथ देखने के लिए, UNION ALL कमांड का इस्तेमाल करें. यहां दिए गए उदाहरण में, पिछले उदाहरण के नतीजे दिखाए गए हैं:

SELECT "PRICE_LEVEL_INEXPENSIVE" as price_level, `places_insights___us___sample.PLACES_COUNT`(
  JSON_OBJECT(
      'types', ["restaurant"],
      'geography', ST_GEOGPOINT(-73.9857, 40.7484), -- Empire State Building
      'geography_radius', 1000, -- Radius in meters
      'business_status', ['OPERATIONAL'],
      'price_level', ['PRICE_LEVEL_INEXPENSIVE']
  )
) as count

UNION ALL

SELECT "PRICE_LEVEL_MODERATE" as price_level, `places_insights___us___sample.PLACES_COUNT`(
  JSON_OBJECT(
      'types', ["restaurant"],
      'geography', ST_GEOGPOINT(-73.9857, 40.7484), -- Empire State Building
      'geography_radius', 1000, -- Radius in meters
      'business_status', ['OPERATIONAL'],
      'price_level', ['PRICE_LEVEL_MODERATE']
  )
) as count

UNION ALL

SELECT "PRICE_LEVEL_EXPENSIVE" as price_level, `places_insights___us___sample.PLACES_COUNT`(
  JSON_OBJECT(
      'types', ["restaurant"],
      'geography', ST_GEOGPOINT(-73.9857, 40.7484), -- Empire State Building
      'geography_radius', 1000, -- Radius in meters
      'business_status', ['OPERATIONAL'],
      'price_level', ['PRICE_LEVEL_EXPENSIVE']
  )
) as count

UNION ALL

SELECT "PRICE_LEVEL_VERY_EXPENSIVE" as price_level, `places_insights___us___sample.PLACES_COUNT`(
  JSON_OBJECT(
      'types', ["restaurant"],
      'geography', ST_GEOGPOINT(-73.9857, 40.7484), -- Empire State Building
      'geography_radius', 1000, -- Radius in meters
      'business_status', ['OPERATIONAL'],
      'price_level', ['PRICE_LEVEL_VERY_EXPENSIVE']
  )
) as count