Google BigQuery: создание представления через Python google-cloud-bigquery версия 0.27.0 против 0.28.0

Все,

У меня проблемы с созданием представления Google BigQuery на python с версией 0.28 библиотеки bq, которая появилась около двух недель назад. Я совершенно уверен, что проблема на моей стороне, чего-то не хватает, но я не могу найти проблему.

Пожалуйста, будьте осторожны, я не задаю много вопросов в Интернете, но я весьма озадачен. Я также не совсем некомпетентен, вот некоторые детали:

  1. Мой GOOGLE_APPLICATION_CREDENTIALS настроен правильно
  2. Все остальные команды, которые я запускал против bq через python, в порядке
  3. Я просмотрел https://cloud.google.com/bigquery/docs/python-client-migration

  4. Я думаю, что проблема заключается в "исправить" https://github.com/GoogleCloudPlatform/google-cloud-python/pull/4038 BigQuery: заменяет table.create() на client.create_table() #4038

  5. Я пробовал наследство против стандартного sql
  6. Я на 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)

Другие ссылки:

Любые полезные мысли будут очень цениться.

Спасибо и всего наилучшего... Богатый

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)
Другие вопросы по тегам