我正在尝试使用现有的Google示例代码{X = 0, Y = 0}
来解析(PubSubToBigQuery.java)
日志消息并将其推送到StackDriver
。
问题是SD日志字段的名称之一为BigQuery
,BigQuery不接受。因此,我在"@type"
中使用不同的字段名称(mytest)创建了该表。
现在,当我运行BigQuery
时,显然会收到错误消息
找不到“ @ type”字段。
如何在Beam代码中将列名从PubSubToBigQuery.java
重命名为"@type"
?
答案 0 :(得分:0)
如果您只想将Stackdriver日志未更改地放入BigQuery中,则可以使用Stackdriver的内置导出功能并创建一个BigQuery接收器:https://cloud.google.com/logging/docs/export/
如果某种导出对您不可行,则可以在Beam中修改转换逻辑。
在这种情况下,PubSubToBigQuery.java,BigQueryIO使用TableRow PCollection作为输入来将消息写入BigQuery。 PubsubMessageToTableRow PTransform通过一些错误处理将PubpubMessage转换为TableRow。 您可以添加具有自定义DoFn的ParDo,以更改创建的TableRow中的列名。过程元素方法可能看起来像这样:
@ProcessElement
public void processElement(@Element TableRow row, OutputReceiver<TableRow> outputReceiver) {
TableRow clone = row.clone();
Object value = clone.get("@type");
clone.remove("@type");
clone.set("mytype", value);
outputReceiver.output(clone);
}
如果您使用未链接的PubSubToBigQuery.java,则可以在代码中第323行附近的jsonToTableRowOut.get(TRANSFORM_OUT)
PCollection上应用此ParDo。