Как сохранить поле hyperLogLog в BigQuery из ApacheBeam с помощью бегуна потока данных - PullRequest
0 голосов
/ 04 апреля 2019

Мне нужно сохранить эскизы HLL в BigQuery из ApacheBeam.

Я нашел расширение библиотека для Apache-Beam, которое делает это:

Но я не могу найти способ сохранить сам эскиз в BigQuery. чтобы потом можно было использовать его с функцией слияния и другими функциями путем скольжения по времени: см. ссылку

мой код:

 .apply("hll-count",  Combine.perKey(ApproximateDistinct.ApproximateDistinctFn
                            .create(StringUtf8Coder.of())))
.apply("reify-windows", Reify.windows())
                    .apply("to-table-row", ParDo.of(new DoFn< ValueInSingleWindow<KV<GroupByData,HyperLogLogPlus>>, TableRow>() {
                        @ProcessElement
                        public void processElement(ProcessContext processContext) {
                            ValueInSingleWindow<KV<GroupByData,HyperLogLogPlus>> windowed = processContext.element();
                            KV<GroupByData, HyperLogLogPlus> keyData = windowed.getValue();
                            GroupByData key = keyData.getKey();

                            HyperLogLogPlus hyperLogLogPlus = keyData.getValue();
                            if (key != null) {

                                TableRow tableRow = new TableRow();
                                tableRow.set("country_code",key.countryCode);
                                tableRow.set("event", key.event);
                                tableRow.set("profile", key.profile);

                                 tableRow.set("occurrences", hyperLogLogPlus.cardinality());

Я только что нашел, как это сделать hyperLogLogPlus.cardinality(), но как можно записать сам буфер, чтобы я мог запустить его позже, функцию слияния в BiGQuery.

Использование hyperLogLogPlus.getBytes также не работает для слияния.

1 Ответ

2 голосов
/ 04 апреля 2019

В настоящее время эта функциональность не поддерживается Apache Beam, но над ней работают люди.

Конкретно: библиотека расширений в Apache Beam, которую вы упомянули, зависит от это реализация HyperLogLog.Эскизы, созданные этой библиотекой, не соответствуют наброскам , вычисленным Google Cloud BigQuery.Поэтому не имеет смысла объединять эскизы в BigQuery.

...