Чтение данных гаечного ключа из таблицы, которая одновременно записывается - PullRequest
0 голосов
/ 17 декабря 2018

Я копирую данные Spanner в BigQuery через задание Dataflow.Задание планируется запускать каждые 15 минут.Проблема в том, что если данные читаются из таблицы Spanner, которая также записывается одновременно, некоторые записи пропускаются при копировании в BigQuery.

Я использую readOnlyTransaction () при чтении данных Spanner.Есть ли какие-либо другие меры предосторожности, которые я должен предпринять при выполнении этого упражнения?

Ответы [ 2 ]

0 голосов
/ 21 декабря 2018

если данные читаются из таблицы Spanner, которая также записывается одновременно, некоторые записи пропускаются при копировании в BigQuery

Так работают транзакции.Они представляют «представление моментального снимка» базы данных во время создания транзакции, поэтому любые строки, записанные после , когда будет сделан этот снимок, не будут включены.

Как упомянуто @ rose-liu , использование отметок времени фиксации в ваших строках и отслеживание отметки времени при последнем экспорте (доступно из объекта ReadOnlyTransaction) будетпозволяют точно выбирать «новые / обновленные строки с момента последнего экспорта»

0 голосов
/ 18 декабря 2018

Рекомендуется использовать временные метки фиксации Cloud Spanner для заполнения столбцов, таких как update_date.Фиксация временных отметок позволяет приложениям определять точный порядок мутаций.

Используя отметки времени фиксации для update_date и указав точное чтение отметки времени, задание потока данных сможет найти все существующие записи, записанные / зафиксированные с момента предыдущего запуска.

https://cloud.google.com/spanner/docs/commit-timestamp

https://cloud.google.com/spanner/docs/timestamp-bounds

...