Мне нужно сохранить эскизы 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
также не работает для слияния.