Вставлять объемные данные в большой запрос, не сохраняя его в потоковом буфере - PullRequest
0 голосов
/ 02 января 2019

Мой мотив здесь следующий:

  1. Вставка массовых записей в большой запрос каждые полчаса
  2. Удаление записи, если существует

Эти записи являются транзакциями, которые изменяют свои статусы с: ожидающий, успешный, сбойный и истекающий.

BigQuery не позволяет мне удалять строки, вставленные всего полчаса назад, так как они все еще находятся в потоковом буфере.

Может кто-нибудь предложить мне какой-нибудь обходной путь, поскольку я получаю несколько дублирующих строк в своей таблице.

1 Ответ

0 голосов
/ 02 января 2019

Лучше было бы:

  • Периодические загрузки в промежуточную таблицу (загрузка - бесплатная операция)
  • После завершения загрузки выполните оператор MERGE .

Вы бы хотели что-то вроде этого:

MERGE dataset.TransactionTable dt
USING dataset.StagingTransactionTable st
ON dt.tx_id = st.tx_id
WHEN MATCHED THEN
UPDATE dt.status = st.status
WHEN NOT MATCHED THEN
INSERT (tx_id, status) VALUES (st.tx_id, st.status)
...