Google DataFlow无法在不同位置读写(Python SDK v0.5.5)

时间:2017-02-09 11:05:38

标签: python sdk google-cloud-platform google-cloud-dataflow

我正在使用Python SDK v0.5.5编写一个非常基本的DataFlow管道。管道使用带有查询的BigQuerySource,它从位于EU的数据集中查询BigQuery表。

执行管道时,我收到以下错误(项目名称为匿名):

HttpError: HttpError accessing <https://www.googleapis.com/bigquery/v2/projects/XXXXX/queries/93bbbecbc470470cb1bbb9c22bd83e9d?alt=json&maxResults=10000>: response: <{'status': '400', 'content-length': '292', 'x-xss-protection': '1; mode=block', 'x-content-type-options': 'nosniff', 'transfer-encoding': 'chunked', 'expires': 'Thu, 09 Feb 2017 10:28:04 GMT', 'vary': 'Origin, X-Origin', 'server': 'GSE', '-content-encoding': 'gzip', 'cache-control': 'private, max-age=0', 'date': 'Thu, 09 Feb 2017 10:28:04 GMT', 'x-frame-options': 'SAMEORIGIN', 'alt-svc': 'quic=":443"; ma=2592000; v="35,34"', 'content-type': 'application/json; charset=UTF-8'}>, content <{
 "error": {
  "errors": [
   {
    "domain": "global",
    "reason": "invalid",
    "message": "Cannot read and write in different locations: source: EU, destination: US"
   }
  ],
  "code": 400,
  "message": "Cannot read and write in different locations: source: EU, destination: US"
 }
}

指定项目,数据集和表名时也会发生错误。但是,从可用的公共数据集(位于美国 - 像莎士比亚)中选择数据时,没有错误。我也有运行SDK的v0.4.4的作业没有这个错误。

这些版本之间的区别在于创建临时数据集,如管道启动时的警告所示:

WARNING:root:Dataset does not exist so we will create it

我简要介绍了SDK的不同版本,差异似乎与此临时数据集有关。看起来当前版本默认情况下会创建一个临时数据集,其位置在美国(取自master):

我还没有找到禁用这些临时数据集创建的方法。我是否忽视了某些事情,或者从欧盟数据集中选择数据时,这确实不再有用了吗?

1 个答案:

答案 0 :(得分:1)

感谢您报告此问题。我假设您使用的是DirectRunner。我们更改了DirectRunner的BigQuery读取转换的实现,以创建临时数据集(适用于SDK版本0.5.1及更高版本)以支持大型数据集。好像我们没有在这里正确设置区域。我们将考虑解决这个问题。

如果使用DataflowRunner在正确的区域中创建临时数据集,则不应发生此问题。