联邦表/查询异常:报错“Cannot read in location: us-west1”问题咨询
为啥US-WEST1区域读不了GCS桶?我来给你拆解下
这问题我之前碰到过类似的,核心是BigQuery和GCS之间的区域匹配规则在搞鬼,咱们一步步理清楚:
- 你的BigQuery数据集是美国多区域(US)的,而GCS桶在us-west1单区域。BigQuery的US多区域集群默认跑在
us-central1,它只认同属US多区域的GCS桶——us-west1是独立的单区域,不在US多区域的覆盖范围内,所以就会弹出Cannot read in location: us-west1的报错。 - 为啥换asia-northeast1就能正常跑?因为当你切换到这个单区域运行查询时,BigQuery会用asia-northeast1的计算节点,而单区域的节点允许跨区域读取其他GCS桶(只要权限没问题),所以就能顺利读到us-west1里的文件了。
解决办法给你列几个,按需选就行
- 把GCS桶改成US多区域:如果业务允许,把us-west1的桶迁移到US多区域,这样和你的US多区域BigQuery数据集完美兼容,不用改其他配置。
- 把BigQuery数据集迁到us-west1:把外部表所在的数据集改成us-west1单区域,查询时就会用该区域的节点,直接读同区域的GCS桶,速度还快。
- 查询时强制指定us-west1作为运行区域:不管数据集在哪,执行查询时指定用us-west1的节点就行。比如用CLI的话:
BigQuery UI里也能选运行区域,找一下设置里的位置选项就行。bq query --location=us-west1 'SELECT * FROM `grey-sort-challenge.bigtable.federated` LIMIT 100' - 继续用asia-northeast1(不推荐):虽然能跑,但跨区域传输会产生额外费用,查询速度也会慢不少,除非实在没办法才选这个。
内容的提问来源于stack exchange,提问作者Graham Polley
相关产品推荐
相关产品推荐

