Как получить список плохих файлов при выполнении GCS в BigQuery Load с использованием подстановочного знака? - PullRequest
0 голосов
/ 21 января 2020

У меня есть GCS Bucket, в котором есть несколько разных типов файлов, все начинаются с другого префикса. Я хотел использовать BigQuery Data Transfer Service для перемещения данных, но 60-минутное ограничение файла недостаточно для моего случая. Поэтому я пишу облачную функцию, которая запускается через облачный планировщик каждые 10 минут. Моя облачная функция переходит в корзину GCS и добавляет «.ingesting» ко всем текущим файлам. Затем он запускает три разных задания с подстановочным знаком * для загрузки файлов каждого типа в разные таблицы BigQuery.

Проблема, с которой я сталкиваюсь, состоит в том, что, если один из файлов выходит из строя из-за какой-либо ошибки, он не выполняет всю работу. Я хочу обработать все хорошие файлы, затем удалить обработанный, переименовать и переместить плохие. Но по ошибке я не получаю список файлов, вызвавших проблему. У меня есть только GRI URI с подстановочным знаком?

Job ID  
test-3:US.54e5797d-bbc4-499d-bce7-
User    
test-3@appspot.gserviceaccount.com
Location    
United States (US)
Creation time   
Jan 21, 2020, 1:16:00 PM
Start time  
Jan 21, 2020, 1:16:00 PM
End time    
Jan 21, 2020, 1:16:03 PM
Duration    
2.2 sec
Destination table   
test-3:Data.alpha
Source URI(s)   
gs://ready-to-ingest-data/a_*.txt

Вот мой код

    const bqMetaData = {
        sourceFormat: 'CSV', 
        fieldDelimiter: '|'
    };

   ...

    const numericFileName = "n_*.txt";
    const numericTableId = "numeric";
    let n_job;

    bigquery
      .dataset(datasetId)
      .table(numericTableId)
      .load(storage.bucket(bucketName).file(numericFileName), bqMetaData)
      .then(results => {
        n_job = results[0];
        console.log(`Numeric Ingest Job ${n_job.id} started.`);

ОБНОВЛЕНИЕ: Коллекция ошибок содержит отдельные случаи.

...