Para acceder a los datos de Places Insights, escribe consultas en SQL en BigQuery que devuelvan estadísticas agregadas sobre lugares. Los resultados se devuelven del conjunto de datos para los criterios de búsqueda especificados en la consulta.
Requisitos de la búsqueda
La declaración SELECT
en la consulta debe incluir WITH AGGREGATION_THRESHOLD
y especificar el conjunto de datos. Por ejemplo:
SELECT WITH AGGREGATION_THRESHOLD COUNT(*) AS count FROM `places_insights___us___sample.places_sample`
En este ejemplo, usas FROM
para especificar el conjunto de datos places_insights___us___sample.places_sample
de Estados Unidos.
Cómo especificar una restricción de ubicación
Ten en cuenta que la consulta anterior no especifica ninguna restricción de ubicación, lo que significa que la agregación de datos se aplica a todo el conjunto de datos. Por lo general, se especifica una restricción de ubicación como la que se muestra a continuación:
SELECT WITH AGGREGATION_THRESHOLD COUNT(*) AS count FROM `places_insights___us___sample.places_sample` WHERE ST_DWITHIN(ST_GEOGPOINT(-73.9857, 40.7484), point, 1000)
En este ejemplo, tu búsqueda especifica una restricción de segmentación centrada en el Empire State Building de la ciudad de Nueva York, con un radio de 1,000 metros.
Puedes usar un polígono para especificar el área de búsqueda. Cuando se usa un polígono, sus puntos deben definir un bucle cerrado en el que el primer punto del polígono sea el mismo que el último:
SELECT WITH AGGREGATION_THRESHOLD COUNT(*) AS count FROM `places_insights___us___sample.places_sample` WHERE ST_CONTAINS(ST_GEOGFROMTEXT("""POLYGON((-73.985708 40.75773,-73.993324 40.750298, -73.9857 40.7484,-73.9785 40.7575, -73.985708 40.75773))"""), point)
En el siguiente ejemplo, definirás el área de búsqueda con una línea de puntos conectados. La línea es similar a una ruta de viaje calculada por la API de Routes. La ruta puede ser para un vehículo, una bicicleta o un peatón:
DECLARE route GEOGRAPHY; SET route = ST_GEOGFROMTEXT("""LINESTRING(-73.98903537033028 40.73655649223003, -73.93580216278471 40.80955538843361)"""); SELECT WITH AGGREGATION_THRESHOLD COUNT(*) AS count FROM `places_insights___us___sample.places_sample` WHERE ST_DWITHIN(route, point, 100)
En este ejemplo, estableces el radio de búsqueda en 100 metros alrededor de la línea.
Filtra por campos del conjunto de datos de lugares
Define mejor tu búsqueda en función de los campos definidos por el esquema del conjunto de datos. Filtrar los resultados según los campos del conjunto de datos, como lugar regular_opening_hours
, price_level
y cliente rating
Haz referencia a cualquier campo del conjunto de datos definido por el esquema del conjunto de datos para el país que te interesa. El esquema del conjunto de datos de cada país consta de dos partes:
- El esquema principal que es común a los conjuntos de datos de todos los países.
- Un esquema específico del país que define los componentes del esquema específicos de ese país.
Por ejemplo, tu consulta puede incluir una cláusula WHERE
que defina los criterios de filtrado para la consulta. En el siguiente ejemplo, se muestran los datos de agregación para los lugares del tipo restaurant
con un business_status
de OPERATIONAL
, que tienen un rating
mayor o igual que 4.0 y con allows_dogs
establecido en true
:
SELECT WITH AGGREGATION_THRESHOLD COUNT(*) AS count FROM `places_insights___us___sample.places_sample` WHERE ST_DWITHIN(ST_GEOGPOINT(-73.9857, 40.7484), point, 1000) AND 'restaurant' IN UNNEST(types) AND business_status = "OPERATIONAL" AND rating >= 4.0 AND allows_dogs = true
La siguiente consulta devuelve resultados para lugares que tienen al menos ocho estaciones de carga de VE:
SELECT WITH AGGREGATION_THRESHOLD COUNT(*) AS count FROM `places_insights___us___sample.places_sample` WHERE ev_charge_options.connector_count > 8;
Filtra por tipo principal de lugar y tipo de lugar
Cada lugar del conjunto de datos puede tener lo siguiente:
Un solo tipo principal asociado a él de los tipos definidos por la Tabla A. Por ejemplo, el tipo principal podría ser
mexican_restaurant
osteak_house
. Usaprimary_type
en una búsqueda para filtrar los resultados según el tipo principal de un lugar.Varios valores de tipo asociados a él de los tipos definidos por la tabla A. Por ejemplo, un restaurante puede tener los siguientes tipos:
seafood_restaurant
,restaurant
,food
,point_of_interest
yestablishment
. Usatypes
en una búsqueda para filtrar los resultados en la lista de tipos asociados con el lugar.
La siguiente consulta devuelve resultados para todos los lugares con un tipo principal de bar
, pero que también funcionan como restaurant
:
SELECT WITH AGGREGATION_THRESHOLD COUNT(*) AS count FROM `places_insights___us___sample.places_sample` WHERE 'restaurant' IN UNNEST(types) AND 'bar' = primary_type
Filtrar los valores de datos predefinidos
Muchos campos del conjunto de datos tienen valores predefinidos. Por ejemplo:
El campo
price_level
admite los siguientes valores predefinidos:PRICE_LEVEL_FREE
PRICE_LEVEL_INEXPENSIVE
PRICE_LEVEL_MODERATE
PRICE_LEVEL_EXPENSIVE
PRICE_LEVEL_VERY_EXPENSIVE
El campo
business_status
admite los siguientes valores predefinidos:OPERATIONAL
CLOSED_TEMPORARILY
CLOSED_PERMANENTLY
En este ejemplo, la consulta devuelve el recuento de todos los restaurantes con un business_status
de OPERATIONAL
en un radio de 1,000 metros del Empire State Building en la ciudad de Nueva York:
SELECT WITH AGGREGATION_THRESHOLD COUNT(*) AS count FROM `places_insights___us___sample.places_sample` WHERE ST_DWITHIN(ST_GEOGPOINT(-73.9857, 40.7484), point, 1000) AND business_status = "OPERATIONAL" AND 'restaurant' IN UNNEST(types)
Filtrar por horario de atención
En este ejemplo, se muestra el recuento de todos los lugares en un área geográfica con horas felices los viernes:
SELECT WITH AGGREGATION_THRESHOLD COUNT(*) AS count FROM `places_insights___us___sample.places_sample`, UNNEST(regular_opening_hours_happy_hour.friday) AS friday_hours WHERE '17:00:00' BETWEEN friday_hours.start_time AND friday_hours.end_time AND ST_DWITHIN(ST_GEOGPOINT(-73.9857, 40.7484), point, 1000);
Usa una función de agregación
En el siguiente ejemplo, se muestran las funciones de agregación de BigQuery compatibles. Esta consulta agrega las calificaciones de todos los lugares ubicados en un radio de 1,000 metros del Empire State Building en la ciudad de Nueva York para generar estadísticas de calificaciones:
SELECT WITH AGGREGATION_THRESHOLD COUNT(id) AS place_count, APPROX_COUNT_DISTINCT(rating) as distinct_ratings, COUNTIF(rating > 4.0) as good_rating_count, LOGICAL_AND(rating <= 5) as all_ratings_equal_or_below_five, LOGICAL_OR(rating = 5) as any_rating_exactly_five, AVG(rating) as avg_rating, SUM(user_rating_count) as rating_count, COVAR_POP(rating, user_rating_count) as rating_covar_pop, COVAR_SAMP(rating, user_rating_count) as rating_covar_samp, STDDEV_POP(rating) as rating_stddev_pop, STDDEV_SAMP(rating) as rating_stddev_samp, VAR_POP(rating) as rating_var_pop, VAR_SAMP(rating) as rating_var_samp, FROM `places_insights___us___sample.places_sample` WHERE ST_DWITHIN(ST_GEOGPOINT(-73.9857, 40.7484), point, 1000) AND business_status = "OPERATIONAL"
Devuelve grupos de resultados
Las consultas que se mostraron hasta ahora devuelven una sola fila en el resultado que contiene el recuento de agregación para la consulta. También puedes usar el operador GROUP BY
para devolver varias filas en la respuesta según los criterios de agrupación.
Por ejemplo, la siguiente consulta devuelve resultados agrupados por el tipo principal de cada lugar en el área de búsqueda:
SELECT WITH AGGREGATION_THRESHOLD primary_type, COUNT(*) AS count FROM `places_insights___us___sample.places_sample` WHERE ST_DWITHIN(ST_GEOGPOINT(-73.99992071622756, 40.71818785986936), point, 1000) GROUP BY primary_type
En la siguiente imagen, se muestra un ejemplo del resultado de esta búsqueda:
En este ejemplo, definirás una tabla de ubicaciones. Luego, para cada ubicación, calcula la cantidad de restaurantes cercanos, es decir, los que se encuentran a menos de 1,000 metros:
WITH my_locations AS ( SELECT 'Location 1' AS name, ST_GEOGPOINT(-74.00776440888504, 40.70932825380786) AS location UNION ALL SELECT 'Location 2' AS name, ST_GEOGPOINT(-73.98257192833559, 40.750738934863215) AS location UNION ALL SELECT 'Location 3' AS name, ST_GEOGPOINT(-73.94701794263223, 40.80792954838445) AS location ) SELECT WITH AGGREGATION_THRESHOLD l.name, COUNT(*) as count FROM `places_insights___us___sample.places_sample` p JOIN my_locations l ON ST_DWITHIN(l.location, p.point, 1000) WHERE primary_type = "restaurant" AND business_status = "OPERATIONAL" GROUP BY l.name
En la siguiente imagen, se muestra un ejemplo del resultado de esta búsqueda: