Funkcja PLACES_COUNT
zwraca pojedynczą wartość liczbową miejsc na podstawie określonego obszaru wyszukiwania i filtrów wyszukiwania. W funkcji PLACES_COUNT
musisz określić obszar wyszukiwania. Opcjonalnie możesz też podać dodatkowe parametry filtra, takie jak typ miejsca, stan działania, poziom cen i inne.
Ponieważ funkcja PLACES_COUNT
zwraca pojedynczą wartość, wywołaj ją za pomocą klauzuli SELECT
.
Parametry wejściowe:
Wymagany:
geography
parametr filtra, który określa obszar wyszukiwania. Parametrgeography
przyjmuje wartość zdefiniowaną przez typ danych BigQueryGEOGRAPHY
, który obsługuje punkty, linie i wielokąty.Opcjonalnie: dodatkowe parametry filtra, które pozwalają zawęzić wyszukiwanie.
Zwraca:
- Pojedyncza wartość
count
jakoINT64
.
- Pojedyncza wartość
Przykład: obliczanie liczby miejsc w promieniu wyszukiwania
Najprostsze wywołanie funkcji PLACES_COUNT
zwraca pojedynczą liczbę wszystkich miejsc w obszarze geograficznym. W tym przykładzie zwracasz liczbę wszystkich działających miejsc w promieniu 1000 metrów od Empire State Building.
W tym przykładzie użyto funkcji BigQueryST_GEOGPOINT
, aby zwrócić wartość GEOGRAPHY
z punktu.
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;
Odpowiedź zawiera jedną liczbę:
Bardziej typowe wywołanie stosuje filtry do obszaru wyszukiwania. W następnym przykładzie użyto filtrów, aby ograniczyć wyszukiwanie do zwracania tylko liczby:
- Miejsca typu
restaurant
z minimalną oceną 3 - poziom cen: niedrogi lub średni;
- Obecnie działająca
- Można wejść z psem
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;
Odfiltrowana odpowiedź:
Pamiętaj, że w przypadku zapytań dotyczących zbioru danych o miejscach obowiązuje minimalny próg liczby wynoszący 5. Jedną z zalet funkcji zliczania miejsc jest to, że mogą one zwracać dowolne liczby, w tym 0. Na przykład to wywołanie zwraca wartość 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;
Przykład: obliczanie liczby restauracji za pomocą wielokąta
Obszar wyszukiwania możesz określić za pomocą wielokąta. W przypadku wielokąta punkty muszą tworzyć zamkniętą pętlę, w której pierwszy punkt jest taki sam jak ostatni.
W tym przykładzie użyto funkcji BigQuery
ST_GEOGFROMTEXT
do zwrócenia wartości GEOGRAPHY
z wielokąta.
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;
Odpowiedź dotycząca widocznego obszaru:
Przykład: obliczanie liczby restauracji za pomocą linii
W następnym przykładzie obszar wyszukiwania jest definiowany za pomocą linii połączonych punktów z promieniem wyszukiwania wynoszącym 100 metrów wokół linii. Linia jest podobna do trasy podróży obliczonej przez Routes API. Trasa może być przeznaczona dla pojazdu, roweru lub pieszego:
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;
Odpowiedź na wiersz:
Przykład: łączenie wyników kilku wywołań
Możesz łączyć wyniki wielu wywołań funkcji PLACES_COUNT
.
Załóżmy na przykład, że chcesz uzyskać jeden wynik pokazujący liczbę restauracji w określonym obszarze w tych przedziałach cenowych:
PRICE_LEVEL_INEXPENSIVE
PRICE_LEVEL_MODERATE
PRICE_LEVEL_EXPENSIVE
PRICE_LEVEL_VERY_EXPENSIVE"
W tym przykładzie tworzysz pętlę, aby wywołać funkcję PLACES_COUNT
dla każdego poziomu ceny, i wstawiasz wyniki każdego wywołania do tabeli tymczasowej. Następnie możesz wysłać zapytanie do tabeli tymczasowej, aby wyświetlić wyniki:
-- 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;
Połączona odpowiedź:
Inną opcją jest użycie polecenia UNION ALL
, aby połączyć wyniki kilku instrukcji SELECT
. Poniższy przykład pokazuje te same wyniki co w poprzednim przykładzie:
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