Записать в таблицу Bigquery с разделением по дате, используя модуль beam.io.gcp.bigquery.WriteToBigQuery в apache beam - PullRequest
0 голосов
/ 09 июля 2019

Я пытаюсь написать задание потока данных, которое должно обрабатывать журналы, расположенные в хранилище, и записывать их в разные таблицы BigQuery. Какие выходные таблицы будут использоваться, зависит от записей в журналах. Поэтому я выполняю некоторую обработку журналов и выдаю их с ключом на основе значения в журнале. После чего я группирую логи по ключам. Мне нужно записать все журналы, сгруппированные по одному и тому же ключу, в таблицу.

Я пытаюсь использовать модуль beam.io.gcp.bigquery.WriteToBigQuery с вызываемым объектом в качестве аргумента таблицы, как описано в документации здесь

Я хотел бы использовать таблицу с разделением по датам, поскольку это легко позволит мне write_truncate на разных разделах.

Теперь я сталкиваюсь с 2 основными проблемами:

  • CREATE_IF_NEEDED выдает ошибку, поскольку он должен создать секционированную таблицу. Я могу обойти это, убедившись, что таблицы существуют на предыдущем шаге, и если нет, то создать их.
  • Если я загружаю старые данные, я получаю следующую ошибку:
The destination table's partition table_name_x$20190322 is outside the allowed bounds. You can only stream to partitions within 31 days in the past and 16 days in the future relative to the current date."

Это похоже на ограничение потоковых вставок, есть ли способ сделать пакетные вставки?

Может быть, я ошибаюсь и должен использовать другой метод. Любое руководство, как решить эти проблемы, приветствуется.

Я использую python 3.5 и apache-beam = 2.13.0

1 Ответ

2 голосов
/ 10 июля 2019

Это сообщение об ошибке может быть зарегистрировано, когда смешивается использование таблицы с разделением по времени и таблицы с разделением по столбцам (см. Аналогичную проблему ). Подводя итог по ссылке, невозможно использовать разбиение по столбцам (не разделение по времени приема ) и выполнять запись в таблицы с суффиксами разделов.

В вашем случае, поскольку вы хотите записывать в разные таблицы на основе значения в журнале и иметь разделы в каждой таблице, воздержитесь от использования декоратора разделов при выборе какой таблицы (используйте «[префикс] _YYYYMMDD») и тогда каждая отдельная таблица будет разделенной на столбцы .

...