У меня есть следующая функция DoFN, но это не документация вопросов, которые я мог бы найти об этом.Как преобразовать объект Datastore в объект BigQuery TableRow в Java?
- Проблема № 1 - как я могу автоматически переводить ключи, чтобы они были построены в BigQuery так же, как это делает BigQuery при импорте файла резервной копии Datastore?
- Проблема № 2 - как обрабатывать временные метки? Приведенный ниже код разбивает трубопровод следующим сообщением:
JSON объект установленное для поля записи: метка времени
Вот код, я написал:
public class SensorObservationEntityToRowFn extends DoFn<Entity, TableRow> {
/**
* In this example, put the whole string into single BigQuery field.
*/
@Override
public void processElement(ProcessContext c) {
Map<String, Value> props = getPropertyMap(c.element());
TableRow row = new TableRow();
row.set("id", c.element().getKey().getPathElement(c.element().getKey().getPathElementCount()-1).getId());
if (
props.get("property1") != null &&
props.get("property2") != null
) {
// Map data from the source Entity to the destination TableRow
row.set("property1", props.get("property1").getStringValue());
row.set("property2", props.get("property2").getStringValue());
}
row.set("source_type", props.get("source_type").getStringValue());
DateTime dateTime = new DateTime(props.get("timestamp").getTimestampMicrosecondsValue()/1000L);
row.set("timestamp", dateTime);
// Output new TableRow only if all data is present in the source
c.output(row);
}
}
Я только что нашел решение проблемы временной метки: 'DateTime DateTime = новый DateTime; (props.get ("метки времени") getTimestampMicrosecondsValue()/1000L.) row.set («timestamp», ISODateTimeFormat.dateTime(). Print (dateTime)); ' Не знаю, как создать временную метку, чтобы избежать использования неизвестных библиотек. –
Если это решит вашу проблему, не могли бы вы разместить ее в качестве ответа, пожалуйста? –