A função PLACES_COUNT
retorna um único valor de contagem de lugares com base na área de pesquisa e nos filtros especificados. Você precisa especificar a área de pesquisa para a função PLACES_COUNT
e pode especificar parâmetros de filtro adicionais, como tipo de lugar, status de funcionamento, nível de preço e muito mais.
Como a função PLACES_COUNT
retorna um único valor, chame-a usando
uma cláusula SELECT
.
Parâmetros de entrada:
Obrigatório: o parâmetro de filtro
geography
que especifica a área de pesquisa. O parâmetrogeography
usa um valor definido pelo tipo de dadosGEOGRAPHY
do BigQuery, que aceita pontos, linestrings e polígonos.Opcional: outros parâmetros de filtro para refinar sua pesquisa.
Retorna:
- Um único valor
count
como umINT64
.
- Um único valor
Exemplo: calcular o número de lugares em um raio de pesquisa
A chamada de função PLACES_COUNT
mais simples retorna uma única contagem de todos os lugares em uma área geográfica. Neste exemplo, você retorna a contagem de todos os lugares operacionais em um raio de 1.000 metros do Empire State Building.
Este exemplo usa a função ST_GEOGPOINT
do BigQuery para retornar um valor GEOGRAPHY
de um ponto.
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;
A resposta contém uma única contagem:
Uma chamada mais típica aplica filtros à área de pesquisa. O exemplo a seguir usa filtros para limitar a pesquisa e retornar apenas uma contagem de:
- Lugares do tipo
restaurant
com classificação mínima de 3 - Um nível de preço barato ou médio
- Em operação
- Permite a entrada de cães
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;
A resposta filtrada:
As consultas de conjunto de dados de lugares exigem um limite mínimo de contagem de 5. Uma das vantagens das funções de contagem de lugares é que elas podem retornar qualquer contagem, incluindo 0. Por exemplo, a chamada a seguir retorna uma contagem de 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;
Exemplo: calcular o número de restaurantes usando um polígono
É possível usar um polígono para especificar a área de pesquisa. Ao usar um polígono, os pontos precisam definir um loop fechado em que o primeiro e o último ponto são iguais.
Este exemplo usa a função ST_GEOGFROMTEXT
do BigQuery para retornar um valor GEOGRAPHY
de um polígono.
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;
A resposta para a janela de visualização:
Exemplo: calcular o número de restaurantes usando uma linha
No exemplo a seguir, você define a área de pesquisa usando uma linha de pontos conectados com um raio de pesquisa de 100 metros ao redor da linha. A linha é semelhante a um trajeto calculado pela API Routes. O trajeto pode ser para um veículo, uma bicicleta ou para um pedestre:
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;
A resposta para a linha:
Exemplo: combinar os resultados de várias chamadas
É possível combinar os resultados de várias chamadas para a função PLACES_COUNT
.
Por exemplo, você quer um único resultado mostrando o número de restaurantes para os seguintes níveis de preço em uma área específica:
PRICE_LEVEL_INEXPENSIVE
PRICE_LEVEL_MODERATE
PRICE_LEVEL_EXPENSIVE
PRICE_LEVEL_VERY_EXPENSIVE"
Neste exemplo, você cria um loop para chamar a função PLACES_COUNT
para cada
nível de preço e insere os resultados de cada chamada em uma tabela temporária. Em seguida, consulte a tabela temporária para mostrar os resultados:
-- 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;
A resposta combinada:
Outra opção é usar o comando UNION ALL
para combinar os resultados de várias instruções SELECT
. O exemplo a seguir mostra os mesmos resultados do exemplo anterior:
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