Hàm PLACES_COUNT
trả về một giá trị đếm duy nhất của các địa điểm dựa trên khu vực tìm kiếm và bộ lọc tìm kiếm được chỉ định. Bạn phải chỉ định khu vực tìm kiếm cho hàm PLACES_COUNT
và có thể tuỳ ý chỉ định các tham số bộ lọc bổ sung, chẳng hạn như loại địa điểm, trạng thái hoạt động, mức giá, v.v.
Vì hàm PLACES_COUNT
trả về một giá trị duy nhất, hãy gọi hàm này bằng cách sử dụng mệnh đề SELECT
.
Tham số đầu vào:
Bắt buộc: Tham số bộ lọc
geography
chỉ định khu vực tìm kiếm. Tham sốgeography
nhận một giá trị do kiểu dữ liệu BigQueryGEOGRAPHY
xác định, hỗ trợ các điểm, chuỗi đường và đa giác.Không bắt buộc: Các thông số bộ lọc bổ sung để tinh chỉnh nội dung tìm kiếm.
Trả về:
- Một giá trị
count
duy nhất dưới dạngINT64
.
- Một giá trị
Ví dụ: Tính số lượng địa điểm trong bán kính tìm kiếm
Lệnh gọi hàm PLACES_COUNT
đơn giản nhất sẽ trả về một số lượng duy nhất của tất cả các địa điểm trong một khu vực địa lý. Trong ví dụ này, bạn trả về số lượng tất cả các địa điểm đang hoạt động trong vòng 1.000 mét tính từ toà nhà Empire State.
Ví dụ này sử dụng hàm BigQuery ST_GEOGPOINT
để trả về giá trị GEOGRAPHY
từ một điểm.
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;
Phản hồi chứa một số lượng duy nhất:
Một lệnh gọi điển hình hơn sẽ áp dụng các bộ lọc cho khu vực tìm kiếm. Ví dụ tiếp theo sử dụng các bộ lọc để giới hạn phạm vi tìm kiếm chỉ trả về số lượng:
- Địa điểm thuộc loại
restaurant
có điểm xếp hạng tối thiểu là 3 - Có cấp độ hội viên với giá thấp hoặc trung bình
- Hiện đang hoạt động
- Cho phép mang theo chó
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;
Phản hồi đã lọc:
Xin lưu ý rằng các truy vấn tập dữ liệu địa điểm áp dụng ngưỡng số lượng tối thiểu là 5. Một trong những lợi thế của các hàm đếm địa điểm là chúng có thể trả về mọi số lượt đếm, kể cả 0. Ví dụ: lệnh gọi sau đây sẽ trả về số lượng là 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;
Ví dụ: Tính số lượng nhà hàng bằng đa giác
Bạn có thể dùng một đa giác để chỉ định khu vực tìm kiếm. Khi sử dụng đa giác, các điểm của đa giác phải xác định một vòng khép kín, trong đó điểm đầu tiên trong đa giác giống với điểm cuối cùng.
Ví dụ này sử dụng hàm ST_GEOGFROMTEXT
của BigQuery để trả về giá trị GEOGRAPHY
từ một đa giác.
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;
Phản hồi cho khung nhìn:
Ví dụ: Tính số lượng nhà hàng bằng một đường thẳng
Trong ví dụ tiếp theo, bạn sẽ xác định khu vực tìm kiếm bằng một đường thẳng gồm các điểm được kết nối với bán kính tìm kiếm là 100 mét xung quanh đường thẳng đó. Đường này tương tự như tuyến đường được tính bằng Routes API. Tuyến đường có thể dành cho xe, xe đạp hoặc người đi bộ:
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;
Phản hồi cho dòng:
Ví dụ: Kết hợp kết quả của nhiều lệnh gọi
Bạn có thể kết hợp kết quả của nhiều lệnh gọi đến hàm PLACES_COUNT
.
Ví dụ: bạn muốn một kết quả duy nhất cho biết số lượng nhà hàng có mức giá sau đây trong một khu vực cụ thể:
PRICE_LEVEL_INEXPENSIVE
PRICE_LEVEL_MODERATE
PRICE_LEVEL_EXPENSIVE
PRICE_LEVEL_VERY_EXPENSIVE"
Trong ví dụ này, bạn sẽ tạo một vòng lặp để gọi hàm PLACES_COUNT
cho từng mức giá và chèn kết quả của mỗi lệnh gọi vào một bảng tạm thời. Sau đó, bạn truy vấn bảng tạm thời để hiển thị kết quả:
-- 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;
Câu trả lời kết hợp:
Một lựa chọn khác là sử dụng lệnh UNION ALL
để kết hợp kết quả của nhiều câu lệnh SELECT
. Ví dụ sau đây cho thấy kết quả tương tự như ví dụ trước:
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