2016-06-11 2 views
0

В моем конвейере потока данных у меня будет два PCollections<TableRow>, которые были прочитаны из таблиц BigQuery. Я планирую объединить эти два ПК в один PCollection с flatten.Фильтрация ограниченных данных в потоке данных на основе временной отметки

Поскольку BigQuery добавляется только, цель состоит в том, чтобы написать усечение второй таблицы в BigQuery с помощью нового PCollection.

Я прочитал документацию, и это средние шаги, которые я смутил. С моим новым PCollection планируется использовать Comparator DoFn, чтобы посмотреть последнюю дату обновления и вернуть заданную строку. Я не уверен, должен ли я использовать преобразование фильтра или если я должен делать группу по ключу, а затем использовать фильтр?

Все PCollection<TableRow> s будет содержать те же значения: IE: string, integer и timestamp. Когда речь идет о парах значений ключей, большая часть документации по облачному потоку данных включает в себя только простые строки. Возможно ли иметь пару значений ключа, которая представляет собой всю строку PCollection<TableRow>?

Ряды будет выглядеть так:

customerID, customerName, lastUpdateDate 
0001, customerOne, 2016-06-01 00:00:00 
0001, customerOne, 2016-06-11 00:00:00 

В приведенном выше примере, я хотел бы, чтобы отфильтровать PCollection только вернуть вторую строку в PCollection, которые будут записаны в BigQuery. Кроме того, можно ли применить эти Pardo на третьем PCollection без создания четвертого?

ответ

1

Вы задали несколько вопросов. Я пытался ответить на них изолированно, но я, возможно, неправильно понял весь сценарий. Если вы предоставили некоторый пример кода, это может помочь прояснить.

С моим новым PCollection план состоит в использовании компаратора DoFn для просмотра последней даты обновления и возврата данной строки. Я не уверен, должен ли я использовать преобразование фильтра или если я должен делать группу по ключу, а затем использовать фильтр?

На основании вашего описания, кажется, что вы хотите взять PCollection элементов и для каждого customerID (ключ) найти самые последние обновления для записи этого клиента. Вы можете использовать предоставленные преобразования, чтобы выполнить это через Top.largestPerKey(1, timestampComparator), где вы установили timestampComparator, чтобы посмотреть только на метку времени.

Возможно ли иметь пару ключевых значений, являющуюся целым рядом PCollection?

A KV<K, V> может иметь любой тип для ключа (K) и значения (V). Если вы хотите группировать ключ, тогда кодер для ключей должен быть детерминированным. TableRowJsonCoder не является детерминированным, поскольку он может содержать произвольные объекты. Но похоже, что вы хотите иметь customerID для ключа и всего TableRow для значения.

Можно ли применить эти Пардо на третьем ПК-карте без создания четвертого?

При применении PTransform к PCollection, это приводит к новому PCollection. Это не так, и вам не нужно пытаться свести к минимуму число PCollections в вашем конвейере.

A PCollection - это концептуальный объект; он не имеет внутренней стоимости. Ваш трубопровод будет сильно оптимизирован, так что многие промежуточные PCollections - особенно в последовательности ParDo превращаются - никогда не будут реализованы.

Смежные вопросы