Google BigQuery Storage API может читать из временных таблиц , созданных из базовых запросов, включающих только SELECT, FROM и WHERE.
Я вижу, что при использовании оператора ORDER BY для получения упорядоченного набора строк создаваемая временная таблица не читается из API хранилища BigQuery.
Естьпосмотрите на пример кода ниже:
Давайте возьмем этот запрос:
sql = """SELECT name FROM `bigquery-public-data.usa_names.usa_1910_current` LIMIT 1000"""
Если вы запустите его с этим кодом Python API BigQuery:
bq_client = bigquery.Client("myproject") ## << Change to your project
query_job = bq_client.query(
sql,
location='US')
project_id = query_job.destination.project
dataset_id = query_job.destination.dataset_id
table_id = query_job.destination.table_id
print("Destination table: " + project_id + "." + dataset_id + "." + table_id)
...затем вы получаете таблицу назначения.
Отсюда вы можете передать эту таблицу назначения в API хранилища BigQuery для получения результатов с помощью RPC:
client = bigquery_storage_v1beta1.BigQueryStorageClient()
table_ref = bigquery_storage_v1beta1.types.TableReference()
table_ref.project_id = project_id
table_ref.dataset_id = dataset_id
table_ref.table_id = table_id
read_options = bigquery_storage_v1beta1.types.TableReadOptions()
read_options.selected_fields.append("name")
parent = "projects/{}".format(project_id)
session = client.create_read_session(
table_ref, parent, table_modifiers=modifiers, read_options=read_options
) # API request.
reader = client.read_rows(
bigquery_storage_v1beta1.types.StreamPosition(stream=session.streams[0])
)
rows = reader.rows(session)
Это работает нормально.
Теперь измените запрос в sql= <yourquery>
на
sql = """SELECT name FROM `bigquery-public-data.usa_names.usa_1910_current` ORDER BY name ASC LIMIT 1000"""
, и вы получите следующую ошибку из части кода BigQuery Storage API:
Table 'myproject:mydataset.temptable' has a storage format that is not supported.
Это означает, что оператор ORDER BY в запросе добавил некоторую сложность, которая сделала временную таблицу нечитаемой для API хранилища.
Вопрос: 1) Любые мысли о том, как решить эту проблему, илидействительно ли это ограничение API хранилища при эта точка?2) Если ORDER BY создает проблему, какова полная степень запросов, которые создают нечитаемые временные таблицы для API хранилища?