Облако SQL: периодически экспортируйте данные в CSV, избегая дублирования - PullRequest
0 голосов
/ 13 марта 2020

Я хочу экспортировать данные из Cloud SQL (postgres) в файл CSV периодически (например, один раз в день), и каждый раз, когда экспортируются строки БД, их нельзя экспортировать в следующей задаче экспорта.

В настоящее время я использую запрос POST для выполнения задачи экспорта с использованием облачного планировщика. Проблема здесь (или, по крайней мере, пока я не знаю) заключается в том, что он не сможет экспортировать и удалять (или обновлять строки, чтобы пометить их как экспортированные) в одном запросе на экспорт http.

Есть ли какие-либо возможность удалять (или обновлять) строки, которые были автоматически экспортированы с любым параметром Cloud SQL в запросе на экспорт http?

Если нет, я предполагаю, что это должно быть сделано, это облачная функция, запускаемая пабом / sub (используя планировщик для отправки данных один раз в день в pub / sub), но существует ли какой-либо оптимальный способ получения всех идентификаторов строк, извлеченных из выбранного выбора (который будет использоваться в export ) удалить (или обновить) их позже?

Ответы [ 4 ]

1 голос
/ 19 марта 2020

Вы можете использовать настройки для достижения того, что вы ищете:

1.Создать облачную функцию для извлечения информации из базы данных, которая подписывается на Pub / Sub topi c. 2. Создайте Pub / Sub topi c, чтобы активировать эту функцию. 3. Создайте задание Cloud Scheduler, которое вызывает триггер Pub / Sub. 4. Запустите задание Cloud Scheduler. 5. Затем создайте триггер, который активирует другую облачную функцию для удаления всех необходимых данных из базы данных после создания CSV.

Здесь я оставляю вам некоторые документы, которые могут помочь вам, если вы решите пойти по этому пути. .

Использование Pub / Sub для запуска функции облака: https://cloud.google.com/scheduler/docs/tut-pub-sub

Подключение к облаку SQL из функций облака: https://cloud.google.com/sql/docs/mysql/connect-functionsCloud

Учебное пособие по хранению: https://cloud.google.com/functions/docs/tutorials/storage

1 голос
/ 03 апреля 2020

Другим методом, кроме @jjanes, будет раздел вашей базы данных по дате. Это позволит вам создать индекс по дате, что сделает экспорт или удаление записей по дням очень простым. В этой реализации вы также можете создать задание Cron, удаляющее все таблицы старше X дней go.

Представленная документация поможет вам настроить раздел Ranged

Таблица разбита на «диапазоны», определяемые ключевым столбцом или набором столбцов, без перекрытия между диапазоны значений, присвоенных различным разделам. Например, можно разделить по диапазонам дат или диапазонам идентификаторов для определенных бизнес-объектов.

1 голос
/ 13 марта 2020

Вы можете экспортировать и удалять (или обновлять) одновременно, используя RETURNING.

\copy (DELETE FROM pgbench_accounts WHERE aid<1000 RETURNING *) to foo.txt

Проблема будет в случае сбоев. Как вы можете узнать, что foo.txt записывал и сбрасывал на диск, прежде чем DELETE разрешено фиксировать? Или наоборот, foo.txt записан частично (или полностью), но cra sh предотвращает фиксацию DELETE.

Разве вы не можете сделать систему идемпотентной, чтобы экспортировать одну и ту же строку более одного раза? не создает проблем?

0 голосов
/ 09 апреля 2020

Спасибо за все ваши ответы. Есть несколько способов сделать это, поэтому я собираюсь объяснить, как я это сделал.

В базу данных я включил столбец, который содержит дату, когда данные были вставлены.

Я использовал облачный планировщик со следующим телом:

{"exportContext":{"fileType": "CSV", "csvExportOptions" :{"selectQuery" : "select \"column1\", \"column2\",... , \"column n\" from public.\"tablename\" where \"Insertion_Date\" = CURRENT_DATE - 1" },"uri": "gs://bucket/filename.csv","databases": ["postgres"]}}

Этот планировщик будет запускаться один раз в день и будет экспортировать только данные за предыдущий день

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

Наконец, облачный планировщик автоматически создаст файл csv в корзине

...