経由してデータフローをクラウドストレージ上のネスト解除JSONファイルを読み込むことが可能である:私はちょうど私が行うことができますBigQueryのに最小限のフィルタリングで、これらのログを書きたい場合は読書は、Googleのデータフロー/でJSONをネストされたApacheのビーム
p.apply("read logfiles", TextIO.Read.from("gs://bucket/*").withCoder(TableRowJsonCoder.of()));
private static class Formatter extends DoFn<TableRow,TableRow> {
@Override
public void processElement(ProcessContext c) throws Exception {
// .clone() since input is immutable
TableRow output = c.element().clone();
// remove misleading timestamp field
output.remove("@timestamp");
// set timestamp field by using the element's timestamp
output.set("timestamp", c.timestamp().toString());
c.output(output);
}
}
}
しかし、このようにJSONファイルのネストされたフィールドにアクセスする方法はわかりません。
- のTableRowは
r
という名前RECORD
が含まれている場合、それはさらにシリアライズ/デシリアライゼーションのせずにそのキー/値にアクセスすることは可能でしょうか? - 私は
Jackson
ライブラリと自分自身をデシリアライズ/シリアライズする必要がある場合は、それが戻って、私はこの方法を失うことを、パフォーマンスの一部を得るために、TextIO.Read
代わりのTableRowJsonCoder
の標準Coder
を使用する方が理にかなっていますか?
EDIT
ファイルは改行で区切られており、このような何かを見て:
{"@timestamp":"2015-x", "message":"bla", "r":{"analyzed":"blub", "query": {"where":"9999"}}}
{"@timestamp":"2015-x", "message":"blub", "r":{"analyzed":"bla", "query": {"where":"1111"}}}
ファイルはどのようにフォーマットされていますか?改行が区切られているのでしょうか、あるいは入れ子にされたレコードの1つの中に改行が潜在的に現れるでしょうか? –
ファイルは改行で区切られており、入れ子になったレコードのいずれかに改行がないと思います。私は例を含めるために私の質問を編集しました。 – Tobi