Die Funktion PLACES_COUNT gibt einen einzelnen Zählwert für Orte basierend auf dem angegebenen Suchbereich und den Suchfiltern zurück. Sie müssen den Suchbereich für die Funktion PLACES_COUNT angeben und können optional zusätzliche Filterparameter wie Ortstyp, Öffnungsstatus und Preisklasse angeben.
Da die Funktion PLACES_COUNT einen einzelnen Wert zurückgibt, rufen Sie sie mit einer SELECT-Klausel auf.
Eingabeparameter:
Erforderlich: Der
geographyFilterparameter, der den Suchbereich angibt. DergeographyParameter verwendet einen Wert, der durch den BigQueryGEOGRAPHYDatentyp definiert wird. Dieser unterstützt Punkte, Linienzüge und Polygone.Optional: Zusätzliche Filterparameter, um die Suche zu verfeinern.
Liefert:
- Einen einzelnen
count-Wert alsINT64.
- Einen einzelnen
Beispiel: Anzahl der Orte in einem Suchradius berechnen
Der einfachste PLACES_COUNT Funktionsaufruf gibt eine einzelne Anzahl aller Orte in einem geografischen Gebiet zurück. In diesem Beispiel wird die Anzahl aller Orte zurückgegeben, die sich im Umkreis von 1.000 Metern um das Empire State Building befinden.
In diesem Beispiel wird die BigQuery
ST_GEOGPOINT
Funktion verwendet, um einen GEOGRAPHYWert aus einem Punkt zurückzugeben.
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;
Die Antwort enthält eine einzelne Anzahl:

Bei einem typischeren Aufruf werden Filter auf den Suchbereich angewendet. Im nächsten Beispiel werden Filter verwendet, um die Suche so einzuschränken, dass nur eine Anzahl der folgenden Orte zurückgegeben wird:
- Orte vom Typ
restaurantmit einer Mindestbewertung von 3 - Orte mit der Preisklasse „Günstig“ oder „Mittel“
- Orte, die derzeit geöffnet sind
- Orte, an denen Hunde erlaubt sind
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;
Die gefilterte Antwort:

Bei Abfragen von Ortsdatensätzen gilt ein Mindestschwellenwert von 5. Einer der Vorteile der Funktionen zur Berechnung der Anzahl von Orten besteht darin, dass sie alle Anzahlen zurückgeben können, einschließlich 0. Der folgende Aufruf gibt beispielsweise die Anzahl 1 zurück:
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;
Beispiel: Anzahl der Restaurants mit einem Polygon berechnen
Sie können ein Polygon verwenden, um den Suchbereich anzugeben. Wenn Sie ein Polygon verwenden, müssen die Punkte des Polygons eine geschlossene Schleife definieren, wobei der erste Punkt im Polygon mit dem letzten Punkt identisch sein muss.
In diesem Beispiel wird die BigQuery
ST_GEOGFROMTEXT
Funktion verwendet, um einen GEOGRAPHY Wert aus einem Polygon zurückzugeben.
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;
Die Antwort für den Darstellungsbereich:

Beispiel: Anzahl der Restaurants mit einer Linie berechnen
Im nächsten Beispiel definieren Sie den Suchbereich mit einer Linie aus verbundenen Punkten und einem Suchradius von 100 Metern um die Linie. Die Linie ähnelt einer Reiseroute, die von der Routes API berechnet wird. Die Route kann für ein Fahrzeug, ein Fahrrad oder einen Fußgänger sein:
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;
Die Antwort für die Linie:

Beispiel: Ergebnisse mehrerer Aufrufe kombinieren
Sie können die Ergebnisse mehrerer Aufrufe der Funktion PLACES_COUNT kombinieren.
Sie möchten beispielsweise ein einzelnes Ergebnis mit der Anzahl der Restaurants für die folgenden Preisklassen in einem bestimmten Bereich:
PRICE_LEVEL_INEXPENSIVEPRICE_LEVEL_MODERATEPRICE_LEVEL_EXPENSIVEPRICE_LEVEL_VERY_EXPENSIVE"
In diesem Beispiel erstellen Sie eine Schleife, um die Funktion PLACES_COUNT für jede Preisklasse aufzurufen, und fügen die Ergebnisse jedes Aufrufs in eine temporäre Tabelle ein. Anschließend fragen Sie die temporäre Tabelle ab, um die Ergebnisse anzuzeigen:
-- 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;
Die kombinierte Antwort:

Eine weitere Möglichkeit besteht darin, den Befehl UNION ALL zu verwenden, um die Ergebnisse mehrerer SELECT-Anweisungen zu kombinieren. Das folgende Beispiel zeigt die gleichen Ergebnisse wie im vorherigen Beispiel:
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