Google datalab无法查询和创建表

时间:2018-08-20 02:08:44

标签: python-3.x google-bigquery google-cloud-datalab

我正在尝试在BigQuery中查询大量数据,然后使用PyCharm中的“ datalab”作为IDE将表上传到所需数据集(datasetxxx)中。下面是我的代码:

query = bq.Query(sql=myQuery)
job = query.execute_async(
        output_options=bq.QueryOutput.table('datasetxxx._tmp_table', mode='overwrite', allow_large_results=True))
job.result()

但是,我最终得到“找不到项目ID”。项目ID通过.jason文件作为os.environ [“ GOOGLE_APPLICATION_CREDENTIALS”] =文件的路径导入。我还尝试如下明确声明项目ID。

self.project_id = 'xxxxx'
query = bq.Query(sql=myQuery, context = self.project_id)

这次我遇到以下错误:

TypeError: init ()获得了意外的关键字参数'context'。

它也是最新版本。感谢您的帮助。

重新:在“ FROM”子句中指定了项目ID,并且我还可以使用“ echo”命令查看.json文件的路径。下面是堆栈跟踪:

Traceback (most recent call last):
  File "xxx/Queries.py", line 265, in <module>
brwdata._extract_gbq()
  File "xxx/Queries.py", line 206, in _extract_gbq
, allow_large_results=True))

File "xxx/.local/lib/python3.5/site packages/google/datalab/bigquery/_query.py", line 260, in execute_async
table_name = _utils.parse_table_name(table_name, api.project_id)

File "xxx/.local/lib/python3.5/site-packages/google/datalab/bigquery/_api.py", line 47, in project_id
return self._context.project_id

File "xxx/.local/lib/python3.5/site-packages/google/datalab/_context.py", line 62, in project_id
raise Exception('No project ID found. Perhaps you should set one by running'

Exception: No project ID found. Perhaps you should set one by running"%datalab project set -p <project-id>" in a code cell.

2 个答案:

答案 0 :(得分:1)

因此,如果您执行“ echo $ GOOGLE_APPLICATION_CREDENTIALS”,则可以看到JSON的路径。 因此,您可以确定查询中的“ FROM”是否指定了正确的外部项目? 另外,如果您的QueryOutput目标是您的完全相同的项目,那么您做对了,

  

table('dataset.table'.....)

但是,在订购时,您应指定:

  

table('project.dataset.table'....)

我不完全知道您的查询方式,但是错误可能存在。

我复制了此文件,对我来说效果很好:

import google.datalab
from google.datalab import bigquery as bq
import os
os.environ["GOOGLE_APPLICATION_CREDENTIALS"] ="./bqauth.json"

myQuery="SELECT * FROM `MY_EXAMPLE_PROJECT.MY_EXAMPLE_DATASET.MY_EXAMPLE_TABLE` LIMIT 1000"
query = bq.Query(sql=myQuery)
job = query.execute_async(
        output_options=bq.QueryOutput.table('MY_EXAMPLE_PROJECT.MY_EXAMPLE_DATASET2.MY_EXAMPLE_TABLE2', mode='overwrite', allow_large_results=True))
job.result()

答案 1 :(得分:0)

如果有需要的人,这是更新的方法:

现在您可以将最新版本的Context用作:

from google.datalab import bigquery as bq
from google.datalab import Context as ctx

ctx.project_id = 'PROJECT_ID'
df = bq.Query(query).execute()
...