Google datalab не может запросить и создать таблицу

Я пытаюсь запросить большой объем данных в BigQuery, а затем загрузить таблицу в нужный набор данных (datasetxxx), используя "datalab" в PyCharm в качестве IDE. Ниже мой код:

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()

Тем не менее, я получил "Идентификатор проекта не найден". Идентификатор проекта импортируется через файл.jason как os.environ["GOOGLE_APPLICATION_CREDENTIALS"] = путь к файлу. Я также попытался явно объявить вышеуказанный идентификатор проекта следующим образом.

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

На этот раз я закончил со следующей ошибкой:

TypeError: init() получил неожиданный аргумент ключевого слова 'context'.

Это также актуальная версия. Спасибо за вашу помощь.

Re: Идентификатор проекта указан в предложении "FROM", и я также могу видеть путь к файлу.json с помощью команды "echo". Ниже приведена трассировка стека:

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.

1 ответ

Итак, если вы сделаете "echo $GOOGLE_APPLICATION_CREDENTIALS", вы сможете увидеть путь к вашему JSON. Итак, не могли бы вы убедиться, что в запросе "FROM" указан правильный внешний проект? Кроме того, если ваше назначение QueryOutput - это ваш проект, вы делаете это правильно,

стол ('dataset.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()

Вот обновленный способ, если кому-то понадобится:

Теперь вы можете использовать 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()
...
Другие вопросы по тегам