Places Insights データにアクセスするには、BigQuery でSQL クエリを記述して、場所に関する集約された分析情報を取得します。結果は、クエリで指定された検索条件のデータセットから返されます。
クエリの要件
クエリの SELECT
ステートメントには WITH AGGREGATION_THRESHOLD
を含め、データセットを指定する必要があります。次に例を示します。
SELECT WITH AGGREGATION_THRESHOLD COUNT(*) AS count FROM `places_insights___us___sample.places_sample`
この例では、FROM
を使用して米国の places_insights___us___sample.places_sample
データセットを指定します。
地域の制限を指定する
上記のクエリではロケーション制限が指定されていないため、データ集計はデータセット全体に適用されます。通常、次のように地域の制限を指定します。
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)
この例では、ニューヨーク市のエンパイア ステート ビルを中心とする半径 1,000 メートルのターゲット制限を指定しています。
検索エリアを指定するには、ポリゴンを使用します。ポリゴンを使用する場合、ポリゴンのポイントは閉じたループを定義する必要があります。ポリゴンの最初のポイントは最後のポイントと同じです。
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)
次の例では、接続された点の線を使用して検索エリアを定義します。この線は、Routes API で計算された移動ルートに似ています。ルートは、車両、自転車、歩行者のいずれかになります。
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)
この例では、線の周囲 100 メートルを検索半径に設定します。
プレイス データセットのフィールドでフィルタする
データセット スキーマで定義されたフィールドに基づいて検索を絞り込みます。場所 regular_opening_hours
、price_level
、顧客 rating
などのデータセット フィールドに基づいて結果をフィルタします。
対象国のデータセット スキーマで定義されたデータセット内のフィールドを参照します。各国のデータセット スキーマは、次の 2 つの部分で構成されています。
たとえば、クエリにクエリのフィルタ条件を定義する WHERE
句を含めることができます。次の例では、business_status
が OPERATIONAL
で、rating
が 4.0 以上で、allows_dogs
が true
に設定されている restaurant
タイプの場所の集計データを返します。
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
次のクエリは、EV 充電スタンドが 8 台以上ある場所の結果を返します。
SELECT WITH AGGREGATION_THRESHOLD COUNT(*) AS count FROM `places_insights___us___sample.places_sample` WHERE ev_charge_options.connector_count > 8;
スポットのプライマリ タイプとスポットタイプでフィルタする
データセット内の各場所には、次のものを含めることができます。
テーブル A で定義された型から関連付けられた単一の主型。たとえば、プライマリ タイプは
mexican_restaurant
またはsteak_house
になります。クエリでprimary_type
を使用して、プレイスのプライマリ タイプで結果をフィルタします。テーブル A で定義された型から、関連付けられた複数の型値。たとえば、レストランには
seafood_restaurant
、restaurant
、food
、point_of_interest
、establishment
などのタイプがあります。クエリでtypes
を使用して、場所に関連付けられたタイプのリストで結果をフィルタします。
次のクエリは、メインタイプが bar
で、restaurant
としても機能するすべての場所の結果を返します。
SELECT WITH AGGREGATION_THRESHOLD COUNT(*) AS count FROM `places_insights___us___sample.places_sample` WHERE 'restaurant' IN UNNEST(types) AND 'bar' = primary_type
事前定義されたデータ値でフィルタする
多くのデータセット フィールドには、事前定義された値があります。次に例を示します。
price_level
フィールドは、次の事前定義された値をサポートしています。PRICE_LEVEL_FREE
PRICE_LEVEL_INEXPENSIVE
PRICE_LEVEL_MODERATE
PRICE_LEVEL_EXPENSIVE
PRICE_LEVEL_VERY_EXPENSIVE
business_status
フィールドは、次の事前定義された値をサポートしています。OPERATIONAL
CLOSED_TEMPORARILY
CLOSED_PERMANENTLY
この例では、ニューヨーク市のエンパイア ステート ビルから半径 1, 000 メートル以内の business_status
が OPERATIONAL
のすべてのレストランの数を返します。
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)
営業時間でフィルタする
この例では、金曜日にハッピーアワーを実施している地理的エリア内のすべての場所の数を返します。
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);
集計関数を使用する
次の例は、サポートされている BigQuery の集計関数を示しています。このクエリは、ニューヨーク市のエンパイア ステート ビルから半径 1,000 メートル以内にあるすべての場所の評価を集計して、評価統計を生成します。
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"
結果グループを返す
これまで見てきたクエリは、クエリの集計カウントを含む単一行を結果として返します。GROUP BY
演算子を使用して、グループ化条件に基づいてレスポンスで複数の行を返すこともできます。
たとえば、次のクエリは、検索エリア内の各場所のプライマリ タイプ別にグループ化された結果を返します。
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
次の画像は、このクエリの出力例を示しています。
この例では、位置情報のテーブルを定義します。次に、各場所について、近くのレストラン(1, 000 メートル以内)の数を計算します。
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
次の画像は、このクエリの出力例を示しています。