Google cloud platform 如何将带有数据流的像素跟踪参数摄取到BigQuery表中?

Google cloud platform 如何将带有数据流的像素跟踪参数摄取到BigQuery表中?,google-cloud-platform,google-bigquery,google-cloud-dataflow,Google Cloud Platform,Google Bigquery,Google Cloud Dataflow,我是GCP的初学者,正在尝试定制这个 来自GCP教程 目标 除了应用程序引擎和计算引擎之外,所有的东西都应该是一样的。我的例子中不需要它们 我的目标是保存后的像素跟踪参数 my.tracking pixel.com/error?[参数] 在PubSub上使用专用的错误主题导入BigQuery表 现状 日志记录之前的无服务器像素跟踪管道已启动并正在运行。之后,我创建了一个导出接收器,将像素跟踪中的数据发布到错误主题中 然后,我按照教程指南创建了一个数据流实体来订阅我的错误主题,并将该主题中的消息摄

我是GCP的初学者,正在尝试定制这个 来自GCP教程

目标 除了应用程序引擎和计算引擎之外,所有的东西都应该是一样的。我的例子中不需要它们

我的目标是保存后的像素跟踪参数

my.tracking pixel.com/error?[参数]

在PubSub上使用专用的错误主题导入BigQuery表

现状 日志记录之前的无服务器像素跟踪管道已启动并正在运行。之后,我创建了一个导出接收器,将像素跟踪中的数据发布到错误主题中

然后,我按照教程指南创建了一个数据流实体来订阅我的错误主题,并将该主题中的消息摄取到我的BigQuery表中

我的示例表方案如下所示。它只接受字符串类型的消息

Field name   Type   Mode
msg          STRING NULLABLE
现在,使用JSON格式发布消息非常容易

{
"msg":"hello world"
}
或者通过使用属性字段的谷歌控制台发布消息页面。然后我的表被正确更新

吞食尝试 现在,我想将跟踪中的参数传递给我的表,并将它们接收到我的表中

我尝试了以下语法,但没有成功

使用键值映射

my.tracking-pixel.com/error?msg=hello
使用JSON格式

my.tracking-pixel.com/error?{"msg":"hello"}
调试 在数据流中,我看到在检查 输入和输出集合:

  • ConvertMessageToTableRow/JsonToTableRow/JsonToTableRow.out0
  • 写入成功记录/streaminginsert/StreamingWriteTables/StreamingWrite.out1
此外,我还发现BigQuery正在创建一个错误双表,在其中记录错误代码

这是我的有效载荷字符串

{httpRequest={cacheLookup=true, remoteIp=X, requestMethod=GET, requestSize=42, requestUrl=https://my.tracking-pixel.com/error?insertId=4&msg=new1234, responseSize=789, status=200, userAgent=Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/76.0.3809.100 Safari/537.36},
insertId=17ktmayg1nsocji, jsonPayload={@type=type.googleapis.com/google.cloud.loadbalancing.type.LoadBalancerLogEntry, statusDetails=response_sent_by_backend},

logName=projects/tracking/logs/requests, 
receiveTimestamp=2019-08-20T08:39:25.712461786Z, 
resource={labels={backend_service_name=, forwarding_rule_name=lbl-collect-pixel-forwarding-rule, project_id=tracking, target_proxy_name=lbl-collect-pixel-target-proxy, url_map_name=lbl-collect-pixel, zone=global},
type=http_load_balancer}, 
severity=INFO, 
spanId=fa0cc3cdcb7e2592, 
timestamp=2019-08-20T08:39:24.922424036Z,
trace=projects/tracking/traces/b335b1acfa78ad5447500cdcda747aa1}
这是我的错误信息

{
  "errors" : [ {
    "debugInfo" : "",
    "location" : "logName",
    "message" : "no such field.",
    "reason" : "invalid"
  } ],
  "index" : 0
}
DataFlow正在尝试在我的表中添加logName属性,该表只有一个msg属性

现在,如何更改跟踪参数的摄取尝试,以使数据流正确地将其解析为所需的消息格式并将其插入表中

提前谢谢你的帮助

干杯,
wiroot

提供给数据流的日志似乎有额外的字段。要确认这一点,请检查来自实际订阅的消息,并确保它没有任何附加字段。如果它有其他字段,那么您可以通过使用Beam编写自定义管道来过滤这些字段。此外,Stackdriver向实际日志添加了一些元数据,如logName等,这可能是这些额外字段的来源。我共享的有效负载字符串是通过发布/订阅主题发布的数据。谢谢你,安克尔,你指着光束。从解析到摄取,这似乎是创建我自己的定制管道的正确方法。我现在正在quicklabs.com上跟踪我的第一次管道尝试的示例。似乎提供给dataflow的日志有额外的字段。要确认这一点,请检查来自实际订阅的消息,并确保它没有任何附加字段。如果它有其他字段,那么您可以通过使用Beam编写自定义管道来过滤这些字段。此外,Stackdriver向实际日志添加了一些元数据,如logName等,这可能是这些额外字段的来源。我共享的有效负载字符串是通过发布/订阅主题发布的数据。谢谢你,安克尔,你指着光束。从解析到摄取,这似乎是创建我自己的定制管道的正确方法。我现在正在quicklabs.com上跟踪我的第一次管道尝试的样本。