У меня есть служба, которая постоянно обновляет файлы в корзине GCS с форматом куста:
bucket
device_id=aaaa
month=01
part-0.parquet
month=02
part-0.parquet
....
device_id=bbbb
month=01
part-0.parquet
month=02
part-0.parquet
....
Если сегодня мы находимся в month=02
, и я выполнил следующее с BigQuery:
SELECT DISTINCT event_id
FROM `project_id.dataset.table`
WHERE month = '02';
Я получаю сообщение об ошибке: Not found: Files /bigstore/bucket_name/device_id=aaaa/month=02/part-0.parquet
Я проверил, и файл был там, когда запрос выполнялся.
Если я побегу
SELECT DISTINCT event_id
FROM `project_id.dataset.table`
WHERE month = '01';
Я получаю результаты без каких-либо ошибок. Я предполагаю, что ошибка связана с тем, что я изменяю данные при запросе. Но как я понял с GCS такого быть не должно, это из их документации.
Because uploads are strongly consistent, you will never receive a 404 Not Found response or stale data for a read-after-write or read-after-metadata-update operation.
Я видел несколько сообщений о том, что это может быть связано с моим ведром Multi-region
.
Любые другие идеи?
Да, я все еще тестирую способ обойти это, пока безуспешно
Возможно, по какой-то причине вы получаете эту ошибку.
В этом случае это может быть связано с согласованностью, потому что, когда вы обновляете файлы GCS, вы одновременно выполняете запрос, поэтому при выполнении запроса файл паркета был доступен для чтения, и вы не получили ошибку , но в следующий раз файл паркета был недоступен, потому что служба обновляла файл, и вы получили ошибку.
К сожалению, нет простого способа решить эту проблему, но вот несколько вариантов:
Вам помог мой ответ?