Таким образом, существующая настройка, которую мы использовали для создания новой таблицы на каждый день, отлично работала с » WRITE_TRUNCATE «, однако, когда мы обновили наш код, чтобы использовать секционированную таблицу, несмотря на наше задание потока данных, оно не будет работать с write_truncate.
Он работает отлично, с настройкой записи, установленной как «WRITE_APPEND» (насколько я понял, из beam, возможно, он пытается удалить table, а затем воссоздать его), поскольку я предоставляю декоратор таблицы, он не может создать новую таблицу.
Пример фрагмента с использованием кода Python:
beam.io.Write('Write({})'.format(date), beam.io.BigQuerySink(output_table_name + '$' + date, create_disposition=beam.io.BigQueryDisposition.CREATE_NEVER, write_disposition=beam.io.BigQueryDisposition.WRITE_TRUNCATE)
что дает ошибку:
Идентификаторы таблиц должны быть буквенно-цифровыми.
поскольку он пытался воссоздать таблицу, и мы указываем декоратор раздела в аргументе.
Вот некоторые из вещей, которые я пробовал:
- Обновление write_disposition как WRITE_APPEND, хотя оно работает, не выполняет цели, поскольку повторное выполнение для той же даты приведет к дублированию данных.
- С использованием
bq --apilog /tmp/log.txt load --replace --source_format=NEWLINE_DELIMITED_JSON 'table.$20160101' sample_json.json
команда, чтобы увидеть, могу ли я наблюдать какие-либо журналы о том, как на самом деле работает усечение, на основе ссылка, которую я нашел.
- Пробовал некоторые другие ссылки, но это как хорошо использует WRITE_APPEND.
Есть ли способ записи в многораздельную таблицу из задания потока данных с использованием метода write_truncate?
Сообщите мне, если требуются какие-либо дополнительные сведения. Спасибо
Ошибка при создании таблицы с помощью декоратора раздела может быть ошибкой. Позвольте мне проверить и вернуться к вам. — person Sirius schedule 22.02.2017
Можете ли вы предоставить трассировку стека для ваших «идентификаторов таблиц должны быть буквенно-цифровыми»? — person Sirius schedule 22.02.2017
Я проконсультировался с разработчиком IO. Похоже, сейчас это не поддерживается. : / — person Sirius schedule 22.02.2017
Спасибо за ответ, Пабло :), я только надеялся, что он не удалит таблицу для TRUNCATE, а просто очистит все строки для этого раздела, но я полагаю, что это не работает таким образом луч. — person Sirius schedule 22.02.2017
Похоже, в настоящее время это не поддерживается. Благодарим @Pablo за информацию, полученную от разработчика IO.
Согласно документации по Beam на странице Github, их страница JIRA будет уместным запросить такую функцию. Я бы порекомендовал подать здесь запрос функции и разместить ссылку в комментарии здесь, чтобы другие участники сообщества могли продолжить и выразить свою поддержку.