Запись в секционированную таблицу в большом запросе из задания Python Dataflow - PullRequest
0 голосов
/ 27 ноября 2018

Когда я пишу в многораздельную таблицу в большом запросе из потока данных, я получаю следующую ошибку - может ли кто-нибудь помочь мне с этим?

Неверный идентификатор таблицы \ "test $ 20181126 \".Идентификаторы таблицы должны быть буквенно-цифровыми (плюс подчеркивание) и должны содержать не более 1024 символов.Также нельзя использовать декораторы таблиц.

Это фрагмент кода Python, который я использую для написания

import apache_beam as beam


class bqwriter(beam.PTransform):
    def __init__(self, table, schema):
        super(BQWriter, self).__init__()
        self.table = table
        self.schema = schema

    def expand(self, pcoll):
        pcoll | beam.io.Write(beam.io.BigQuerySink(
            self.table,
            schema=self.schema,
            create_disposition=beam.io.BigQueryDisposition.CREATE_IF_NEEDED,
            write_disposition=beam.io.BigQueryDisposition.WRITE_TRUNCATE
        ))

Я создаю табе, как показано ниже

a | 'BQWrite' >> BQWriter("test-123:test.test$20181126", table_schema)

1 Ответ

0 голосов
/ 28 ноября 2018

У меня была такая же проблема.Мое решение было:

  • Либо добавьте столбец даты к данным, а затем установите таблицу BQ для разбиения на них

  • Или установитеразделение по умолчанию на _PARTITIONTIME в BQ.

Обе эти опции означают, что вы вставляете только в test-123: test.test

Относительно того, сможем ли мы сделатьто, что вы пытались сделать, кажется да. Beam JIRA утверждает, что они исправили это для Java, но я не смог найти состояние для python.

...