Google BigQuery: создание представления через Python google-cloud-bigquery версия 0.27.0 против 0.28.0
Все,
У меня проблемы с созданием представления Google BigQuery на python с версией 0.28 библиотеки bq, которая появилась около двух недель назад. Я совершенно уверен, что проблема на моей стороне, чего-то не хватает, но я не могу найти проблему.
Пожалуйста, будьте осторожны, я не задаю много вопросов в Интернете, но я весьма озадачен. Я также не совсем некомпетентен, вот некоторые детали:
- Мой GOOGLE_APPLICATION_CREDENTIALS настроен правильно
- Все остальные команды, которые я запускал против bq через python, в порядке
Я просмотрел https://cloud.google.com/bigquery/docs/python-client-migration
Я думаю, что проблема заключается в "исправить" https://github.com/GoogleCloudPlatform/google-cloud-python/pull/4038 BigQuery: заменяет table.create() на client.create_table() #4038
- Я пробовал наследство против стандартного sql
- Я на Python 2.7.12 (не могу обновить в ближайшее время, корпоративная версия вещь)
Проблема? Код во втором блоке ниже создает TABLE без схемы и записей. Очевидно, что вместо этого следует создать ВИД, верно?
sudo pip install -Iv google-cloud-bigquery == 0.27.0
from google.cloud import bigquery
project=None
dataset_name = 'my_dataset_id'
view_name = 'vw_dummy_data20'
sqlQuery = 'select record_id as id, UPPER(first_name) as first_name, UPPER(last_name) as last_name from [my_project_code:my_dataset_id.dummy_data13]'
bigquery_client = bigquery.Client(project=project)
dataset = bigquery_client.dataset(dataset_name)
table = dataset.table(view_name)
table.view_query = sqlQuery
table.create()
все вышеперечисленное работает отлично, вид создан, отлично!
ниже создается только таблица, без строк, без схемы, чёрт!
sudo pip удалить google-cloud-bigquery
sudo pip install -Iv google-cloud-bigquery == 0.28.0
from google.cloud import bigquery
project=None
dataset_name = 'my_dataset_id'
view_name = 'vw_dummy_data21'
sqlQuery = 'select record_id as id, UPPER(first_name) as first_name, UPPER(last_name) as last_name from [my_project_code:my_dataset_id.dummy_data13]'
bigquery_client = bigquery.Client(project=project)
dataset_ref = bigquery_client.dataset(dataset_name)
table_ref = dataset_ref.table(view_name)
table_ref.view_query = sqlQuery
table_ref.view_use_legacy_sql = True
table = bigquery.Table(table_ref)
bigquery_client.create_table(table)
Другие ссылки:
- Как я могу создать новый вид в BigQuery, используя API Python?
- https://googlecloudplatform.github.io/google-cloud-python/latest/bigquery/usage.html
Любые полезные мысли будут очень цениться.
Спасибо и всего наилучшего... Богатый
2 ответа
Вы были так близко!
Вопрос с линиями
table_ref.view_query = sqlQuery
table_ref.view_use_legacy_sql = True
TableReference
Класс не содержит этих свойств. Вместо этого вы должны заполнить их на Table
класс, как в
table = bigquery.Table(table_ref)
table.view_query = sqlQuery
table.view_use_legacy_sql = True
bigquery_client.create_table(table)
Ответ Тима был идеальным, большое спасибо.
Вот окончательный код:
from google.cloud import bigquery
bigquery_client = bigquery.Client(project=project)
dataset_ref = bigquery_client.dataset(dataset_name)
table_ref = dataset_ref.table(view_name)
table = bigquery.Table(table_ref)
table.view_query = sqlQuery
table.view_use_legacy_sql = True
bigquery_client.create_table(table)