如何在Big查询中使用ST_CONTAINS加入地理列 [英] How to JOIN in geography columns using ST_CONTAINS in Big query

查看:113
本文介绍了如何在Big查询中使用ST_CONTAINS加入地理列的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个BigQuery表,其地址包括纬度/经度和其他BQ表,这些表具有从人口普查shapefile导入的有效geom定义.对于地址表中的每一行,我正在尝试查找包含它的geom行.

I have one BigQuery table with addresses including Lat/Lng and other BQ tables with working geom definitions imported from Census shapefiles. For each row in addresses table I am attempting to lookup which geom row contains it.

以下查询是我查找的lat/lng个人作品正常吗?

The following query were I look up an INDIVIDUAL lat/lng works fine:

SELECT SLDLST FROM `geographies.tl_2018_sldl_*` sldl WHERE ST_CONTAINS(sldl.geom, ST_GEOGPOINT(-95.221080, 38.974500));

但是当我尝试将抽象抽象为连接时

But when I attempt abstract into a join like

SELECT 
  address_id,
  SLDLST
FROM `launchpad-239920.address_standardization.temp_delete_geo_match_sample` ssgolden
LEFT JOIN `geographies.tl_2018_sldl_*` sldl ON ST_CONTAINS(sldl.geom, ST_GEOGPOINT(ssgolden.longitude, ssgolden.latitude));

我得到一个错误: 如果没有连接两端的字段相等的条件,则不能使用LEFT OUTER JOIN."

如何重组我的联接查询,以便能够提取每个地址的匹配地理位置?

How do I restructure my join query to be able to extract the matching geography for each address?

推荐答案

以下是BigQuery标准SQL

Below is for BigQuery Standard SQL

如果要在输出中保留不匹配的地址-可以在下面使用

If you want to preserve not matching addresses in output - you can use below

#standardSQL
WITH matched_addresses AS (
  SELECT 
    address_id,
    SLDLST
  FROM `launchpad-239920.address_standardization.temp_delete_geo_match_sample` ssgolden
  JOIN `geographies.tl_2018_sldl_X` sldl 
  ON ST_CONTAINS(sldl.geom, ST_GEOGPOINT(ssgolden.longitude, ssgolden.latitude)) 
)
SELECT * FROM matched_addresses UNION ALL 
SELECT address_id, NULL 
FROM `launchpad-239920.address_standardization.temp_delete_geo_match_sample`
WHERE NOT address_id IN (SELECT address_id FROM matched_addresses)   

但如果您只对匹配项感兴趣,请在-1以下使用

but if you interested in only matched - use below one

#standardSQL
WITH matched_addresses AS (
  SELECT 
    address_id,
    SLDLST
  FROM `launchpad-239920.address_standardization.temp_delete_geo_match_sample` ssgolden
  JOIN `geographies.tl_2018_sldl_X` sldl 
  ON ST_CONTAINS(sldl.geom, ST_GEOGPOINT(ssgolden.longitude, ssgolden.latitude)) 
)
SELECT * FROM matched_addresses  

这篇关于如何在Big查询中使用ST_CONTAINS加入地理列的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆