Para acceder directamente a los datos de Places Insights, debes escribir consultas de SQL en BigQuery que muestren estadísticas agregadas sobre los lugares. Los resultados se muestran desde el conjunto de datos para los criterios de búsqueda especificados en la consulta.
Comprende el umbral de agregación
Las consultas de SQL estándar que se ejecutan directamente en las tablas sin procesar aplican un límite de agregación estricto. Se genera una fila de salida solo si el recuento de agregación calculado es 5 o más.
Si los filtros de tu consulta producen un recuento de 0, 1, 2, 3 o 4, se omite toda la fila de resultados de la respuesta. Si la lógica de tu aplicación requiere recuentos bajos precisos (incluido 0) o necesita recuperar IDs de lugares individuales, debes consultar el conjunto de datos con las funciones de recuento de lugares en su lugar.
Conceptos básicos de las consultas
En la siguiente imagen, se muestra el formato básico de una consulta:
Cada parte de la consulta se describe con más detalle a continuación.
Requisitos de las consultas
Las consultas de SQL que se realizan directamente en el conjunto de datos deben especificar el conjunto de datos y deben incluir WITH AGGREGATION_THRESHOLD en la cláusula SELECT. De lo contrario, la consulta fallará.
En este ejemplo, se especifica places_insights___us.places para consultar el conjunto de datos de Estados Unidos.
SELECT WITH AGGREGATION_THRESHOLD COUNT(*) AS count FROM `PROJECT_NAME.places_insights___us.places`
Especifica un nombre de proyecto (opcional)
De manera opcional, puedes incluir el nombre de tu proyecto en la consulta. Si no especificas un nombre de proyecto, la consulta usará el proyecto activo de forma predeterminada.
Te recomendamos incluir el nombre de tu proyecto si vinculaste conjuntos de datos con el mismo nombre en diferentes proyectos o si consultas una tabla fuera del proyecto activo.
Por ejemplo, [project name].[dataset name].places.
Especifica 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 producir 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 `PROJECT_NAME.places_insights___us.places` WHERE ST_DWITHIN(ST_GEOGPOINT(-73.9857, 40.7484), point, 1000) AND business_status = "OPERATIONAL"
Filtra los resultados con polígonos y líneas geográficas
Si no especificas una restricción de ubicación, la agregación de datos se aplica a todo el conjunto de datos. Por lo general, especificas una restricción de ubicación para buscar un área específica.
1. Filtra con búferes de búsqueda radial (ST_DWITHIN)
En esta consulta de ejemplo, se especifica una restricción de destino centrada en el Empire State Building en la ciudad de Nueva York, con un radio de 1,000 metros.
SELECT WITH AGGREGATION_THRESHOLD COUNT(*) AS count FROM `PROJECT_NAME.places_insights___us.places` WHERE ST_DWITHIN(ST_GEOGPOINT(-73.9857, 40.7484), point, 1000)
2. Filtra con límites de polígonos (ST_CONTAINS)
Puedes usar un polígono para especificar el área de búsqueda. Cuando usas un polígono, los puntos del polígono 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 `PROJECT_NAME.places_insights___us.places` 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)
3. Filtra a lo largo de los búferes de viaje de la ruta (LINESTRING)
En el siguiente ejemplo, defines el área de búsqueda con una línea de puntos conectados y estableces el radio de búsqueda en 100 metros alrededor de la línea. 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 `PROJECT_NAME.places_insights___us.places` WHERE ST_DWITHIN(route, point, 100)
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. Filtra los resultados en función de los campos del conjunto de datos, como regular_opening_hours, price_level y rating del cliente.
Haz referencia a cualquier campo del conjunto de datos definido por el esquema del conjunto de datos para el país que te interese. El esquema del conjunto de datos para 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 de la consulta.
En el siguiente ejemplo, se muestran los datos de agregación de los lugares de tipo tourist_attraction con un business_status de OPERATIONAL, que tienen una rating mayor o igual que 4.0 y con allows_dogs establecido en true:
SELECT WITH AGGREGATION_THRESHOLD COUNT(*) AS count FROM `PROJECT_NAME.places_insights___us.places` WHERE ST_DWITHIN(ST_GEOGPOINT(-73.9857, 40.7484), point, 1000) AND 'tourist_attraction' IN UNNEST(types) AND business_status = "OPERATIONAL" AND rating >= 4.0 AND allows_dogs = true
La siguiente consulta muestra los resultados de los lugares que tienen al menos ocho estaciones de carga de VE:
SELECT WITH AGGREGATION_THRESHOLD COUNT(*) AS count FROM `PROJECT_NAME.places_insights___us.places` 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
Tipos de lugares. Por ejemplo, el tipo principal podría ser
mexican_restaurantosteak_house. Usaprimary_typeen una consulta para filtrar los resultados según el tipo principal de un lugar. - Varios valores de tipo asociados a él de los tipos definidos por Tipos
de lugares. Por ejemplo, un
restaurante podría tener los siguientes tipos:
seafood_restaurant,restaurant,food,point_of_interest,establishment. Usatypesen una consulta para filtrar los resultados según la lista de tipos asociados con el lugar.
La siguiente consulta muestra los resultados de todos los lugares con un tipo principal de skin_care_clinic que también funcionan como un spa:
SELECT WITH AGGREGATION_THRESHOLD COUNT(*) AS count FROM `PROJECT_NAME.places_insights___us.places` WHERE 'spa' IN UNNEST(types) AND 'skin_care_clinic' = primary_type
Filtra por ID de lugar
En el siguiente ejemplo, se calcula la calificación promedio de 5 lugares. Los lugares se identifican por su place_id.
DECLARE place_ids ARRAY<STRING>; SET place_ids = ['ChIJPQOh8YVZwokRE2WsbZI4tOk', 'ChIJibtT3ohZwokR7tX0gp0nG8U', 'ChIJdfD8moVZwokRO6vxjXAtoWs', 'ChIJsdNONuFbwokRLM-yuifjb8k', 'ChIJp0gKoClawokR0txqrcaEkFc']; SELECT WITH AGGREGATION_THRESHOLD AVG(rating) as avg_rating, FROM `PROJECT_NAME.places_insights___us.places`, UNNEST(place_ids) place_id WHERE id = place_id;
Excluye IDs de lugares específicos de los resultados de la consulta
También puedes excluir un array de IDs de lugares de una consulta.
Puedes encontrar los IDs de lugares que buscas con el buscador de IDs de lugares o de forma programática con la API de Places para realizar una solicitud de Text Search (nueva).
En el siguiente ejemplo, la consulta encuentra la cantidad de cafeterías en el código postal 2000 de Sídney, Australia, que no aparecen en el array excluded_cafes.
Este tipo de consulta puede ser útil para un propietario de una empresa que desea excluir sus propias empresas de un recuento.
WITH excluded_cafes AS ( -- List the specific place IDs to exclude from the final count SELECT * FROM UNNEST([ 'ChIJLTcYGz-uEmsRmazk9oMnP5w', 'ChIJeWDDDNOvEmsRF8SMPUwPbhw', 'ChIJKdaKHbmvEmsRSdxq_1O05bU' ]) AS place_id ) SELECT WITH AGGREGATION_THRESHOLD COUNT(*) AS count FROM `places_insights___au.places` AS places -- Perform a LEFT JOIN to identify which places are in the exclusion list LEFT JOIN excluded_cafes ON places.id = excluded_cafes.place_id WHERE -- Filter for specific place type and postal code places.primary_type = 'cafe' AND '2000' IN UNNEST(places.postal_code_names) -- Keep only the rows where the join failed (meaning the ID was NOT in the list) AND excluded_cafes.place_id IS NULL;
Filtra por valores de datos predefinidos
Muchos campos del conjunto de datos tienen valores predefinidos. Por ejemplo:
- El campo
price_leveladmite los siguientes valores predefinidos:PRICE_LEVEL_FREEPRICE_LEVEL_INEXPENSIVEPRICE_LEVEL_MODERATEPRICE_LEVEL_EXPENSIVEPRICE_LEVEL_VERY_EXPENSIVE
- El campo
business_statusadmite los siguientes valores predefinidos:OPERATIONALCLOSED_TEMPORARILYCLOSED_PERMANENTLYFUTURE_OPENING
En este ejemplo, la consulta muestra el recuento de todas las floristerías 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 `PROJECT_NAME.places_insights___us.places` WHERE ST_DWITHIN(ST_GEOGPOINT(-73.9857, 40.7484), point, 1000) AND business_status = "OPERATIONAL" AND 'florist' IN UNNEST(types)
Filtra por horario de atención
En este ejemplo, se muestra el recuento de todos los lugares en un área geográfica con happy hours los viernes:
SELECT WITH AGGREGATION_THRESHOLD COUNT(*) AS count FROM `PROJECT_NAME.places_insights___us.places`, 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);
Filtra por región (componentes de dirección)
Nuestro conjunto de datos de lugares también contiene un conjunto de componentes de dirección que son útiles para filtrar los resultados en función de los límites políticos. Cada componente de dirección se identifica por su nombre de código de texto (10002 para el código postal en Nueva York) o el ID de lugar (ChIJm5NfgIBZwokR6jLqucW0ipg) para el ID de código postal equivalente.
SELECT WITH AGGREGATION_THRESHOLD COUNT(*) AS count FROM `PROJECT_NAME.places_insights___us.places` WHERE '10002' IN UNNEST(postal_code_names) -- 'ChIJm5NfgIBZwokR6jLqucW0ipg' IN UNNEST(postal_code_ids) -- same filter as above using postal code ID
Filtra por configuraciones de carga de VE
En este ejemplo, se proporciona un recuento de la cantidad de lugares con al menos 8 cargadores de VE:
SELECT WITH AGGREGATION_THRESHOLD COUNT(*) AS count FROM `PROJECT_NAME.places_insights___us.places` WHERE ev_charge_options.connector_count > 8;
En este ejemplo, se cuenta la cantidad de lugares que tienen al menos 10 cargadores Tesla que admiten carga rápida:
SELECT WITH AGGREGATION_THRESHOLD COUNT(*) AS count FROM `PROJECT_NAME.places_insights___us.places`, UNNEST(ev_charge_options.connector_aggregation) as connectors WHERE connectors.type ='EV_CONNECTOR_TYPE_TESLA' AND connectors.max_charge_rate_kw >= 50 AND connectors.count >= 10
Filtra por fecha de la instantánea de datos
El conjunto de datos de lugares contiene datos de recuento de lugares para cada mes desde enero de 2024. Para consultar la instantánea de los datos de lugares de un mes determinado, filtra con el campo snapshot_date.
Por ejemplo, la siguiente consulta muestra los resultados agrupados por el tipo principal de cada lugar en el área de búsqueda, en el mes de enero de 2024:
SELECT WITH AGGREGATION_THRESHOLD primary_type, COUNT(*) AS count FROM `PROJECT_NAME.places_insights___us.places_historical` WHERE snapshot_date = '2024-01-01' AND ST_DWITHIN(ST_GEOGPOINT(-73.9857, 40.7484), point, 1000) GROUP BY primary_type;
Muestra filas de resultados agrupadas
Las consultas que se muestran hasta ahora muestran una sola fila en el resultado que contiene el recuento de agregación de la consulta. También puedes usar el operador GROUP BY para mostrar varias filas en la respuesta según los criterios de agrupación.
Por ejemplo, la siguiente consulta muestra los 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 `PROJECT_NAME.places_insights___us.places` WHERE ST_DWITHIN(ST_GEOGPOINT(-73.99992071622756, 40.71818785986936), point, 1000) GROUP BY primary_type
En esta imagen, se muestra un ejemplo de resultado de esta consulta:

En este ejemplo, defines una tabla de ubicaciones. Para cada ubicación, calculas la cantidad de restaurantes cercanos, es decir, aquellos que se encuentran a 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 `PROJECT_NAME.places_insights___us.places` AS 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 esta imagen, se muestra un ejemplo de resultado de esta consulta:
