Используется DLP Dataflow для чтения из GCS и записи в BigQuery - только 50% данных записывается в BigQuery.

Недавно я запустил задание Dataflow, чтобы загрузить данные из GCS, пропустить их через шаблон идентификации DLP и записать замаскированные данные в BigQuery. Мне не удалось найти предоставленный Google шаблон для пакетной обработки, поэтому я использовал потоковый (ref: ссылка). Я вижу, что в целевую таблицу BigQuery записано только 50% строк. В конвейере нет активности в течение дня, даже если он находится в рабочем состоянии.


comment
Не могли бы вы поделиться версией Dataflow? Спасибо!   -  person Ines    schedule 24.08.2020
comment
Я использовал пользовательский интерфейс Dataflow и выбрал шаблон, предоставленный Google. Ниже приведены сведения из информации о задании: goog-dataflow-provided-template-name: stream_dlp_gcs_text_to_bigquery; goog-dataflow-provided-template-version: 2020-08-10-01_rc00; userAgent: Apache_Beam_SDK_for_Java / 2.20.0 (JDK_11_environment)   -  person Snehal Thorat    schedule 24.08.2020


Ответы (1)


да Шаблон DLP Dataflow - это конвейер потоковой передачи, но с некоторыми простыми изменениями вы также можете использовать его в пакетном режиме. Вот шаблон исходный код. Как вы можете видеть, он использует Преобразование ввода-вывода файла и опрос / наблюдение за любым новым файлом каждые 30 секунд. если вы уберете оконное преобразование и синтаксис непрерывного опроса, вы сможете выполнить его как пакет.

Что касается конвейера, который не обрабатывает все данные, можете ли вы подтвердить, что вы запускаете большой файл с настройками по умолчанию? например workerMachineType, numWorkers, maxNumWorkers? Текущий код конвейера использует линейное смещение, что требует типа машины highmem с большим количеством рабочих, если входной файл большой. например, для 10 ГБ, 80M линий вам может понадобиться 5 работников highmem.

Одна вещь, которую вы можете попытаться увидеть, помогает ли это запустить конвейер с большим количеством ресурсов, например: --workerMachineType = n1-highmem-8, numWorkers = 10, maxNumWorkers = 10, и посмотреть, лучше ли это.

В качестве альтернативы существует решение V2, в котором используется смещение на основе байтов с использованием API состояния и таймера для оптимизации пакетной обработки и использования ресурсов, который вы можете попробовать.

person Masud Hasan    schedule 27.08.2020