PLACES_COUNT फ़ंक्शन

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

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

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

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

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

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

जवाब में, संख्या की एक वैल्यू होती है:

न्यूयॉर्क शहर में मौजूद जगहों की संख्या के लिए नतीजे.

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

  • restaurant टाइप की जगहें, जिनकी रेटिंग कम से कम 3 हो
  • कीमत का लेवल, सस्ता या सामान्य हो
  • फ़िलहाल चालू हों
  • कुत्तों को लाने की अनुमति हो
SELECT `PROJECT_NAME.places_insights___us.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;

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

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

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

SELECT `PROJECT_NAME.places_insights___us.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 `PROJECT_NAME.places_insights___us.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 `PROJECT_NAME.places_insights___us.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, `PROJECT_NAME.places_insights___us.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;

जोड़ा गया जवाब:

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

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

SELECT "PRICE_LEVEL_INEXPENSIVE" as price_level, `PROJECT_NAME.places_insights___us.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, `PROJECT_NAME.places_insights___us.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, `PROJECT_NAME.places_insights___us.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, `PROJECT_NAME.places_insights___us.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