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