הפונקציה PLACES_COUNT
מחזירה ערך יחיד של מספר המקומות על סמך אזור החיפוש ומסנני החיפוש שצוינו. צריך לציין את אזור החיפוש בפונקציה PLACES_COUNT
, ואפשר גם לציין פרמטרים נוספים לסינון, כמו סוג המקום, סטטוס הפעילות, רמת המחיר ועוד.
מכיוון שהפונקציה PLACES_COUNT
מחזירה ערך יחיד, צריך להפעיל אותה באמצעות פסוקית SELECT
.
פרמטרים של קלט:
חובה:
geography
פרמטר הסינון שמציין את אזור החיפוש. הפרמטרgeography
מקבל ערך שמוגדר על ידי סוג הנתוניםGEOGRAPHY
ב-BigQuery, שתומך בנקודות, בקווי שבר ובמצולעים.אופציונלי: פרמטרים נוספים של מסנן לחידוד החיפוש.
החזרות:
- ערך יחיד של
count
בתורINT64
.
- ערך יחיד של
דוגמה: חישוב מספר המקומות ברדיוס חיפוש
הקריאה הפשוטה ביותר לפונקציה PLACES_COUNT
מחזירה ספירה אחת של כל המקומות באזור גיאוגרפי. בדוגמה הזו, הפונקציה מחזירה את מספר המקומות הפעילים ברדיוס של 1,000 מטר מבניין אמפייר סטייט.
בדוגמה הזו נעשה שימוש בפונקציה ST_GEOGPOINT
של BigQuery כדי להחזיר ערך GEOGRAPHY
מנקודה.
SELECT `maps-platform-analytics-hub.sample_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 `maps-platform-analytics-hub.sample_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;
התשובה המסוננת:
חשוב לזכור שבשאילתות של מערך נתונים של מקומות יש סף מינימלי של 5. אחד היתרונות של פונקציות ספירת המקומות הוא שהן יכולות להחזיר כל ספירה, כולל 0. לדוגמה, הקריאה הבאה מחזירה את הערך 1:
SELECT `maps-platform-analytics-hub.sample_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;
דוגמה: חישוב מספר המסעדות באמצעות מצולע
אפשר להשתמש במצולע כדי לציין את אזור החיפוש. כשמשתמשים בפוליגון, הנקודות של הפוליגון צריכות להגדיר לולאה סגורה שבה הנקודה הראשונה בפוליגון זהה לנקודה האחרונה.
בדוגמה הזו נעשה שימוש בפונקציה ST_GEOGFROMTEXT
של BigQuery כדי להחזיר ערך 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 `maps-platform-analytics-hub.sample_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 `maps-platform-analytics-hub.sample_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, `maps-platform-analytics-hub.sample_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, `maps-platform-analytics-hub.sample_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, `maps-platform-analytics-hub.sample_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, `maps-platform-analytics-hub.sample_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, `maps-platform-analytics-hub.sample_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