BigQuery SQL 用户代理检测

问题描述

如何提取有关信息 设备类型 浏览器, 操作系统等。 从用户代理字符串为:

Mozilla/5.0 (Linux; Android 10; SM-A307G Build/QP1A.190711.020; wv) AppleWebKit/537.36 (KHTML,like Gecko) Version/4.0 Chrome/87.0.4280.141 Mobile Safari/537.36 Instagram 170.2.0.30.474 Android (29/10; 280dpi; 720x1423; samsung; SM-A307G; a30s; exynos7904; es_US; 267925733)

谢谢

解决方法

您可以使用此处概述的方法 - https://titanwolf.org/Network/Articles/Article?AID=2af15c50-e1cb-4ce1-b641-f7263e66ac8a#gsc.tab=0 - 将 JavaScript 用户代理解析库上传到 Google Cloud Storage。然后在 Google Cloud BigQuery 用户定义函数中引用它。

基于此,您可以 - 1. 将函数定义保存在 BigQuery 本身中,2. 使用它来解析更新的数据,使用视图,例如 SELECT [my-project.[my-dataset].[parse_user_agent]([user_agent_field]) FROM [my-project].[my-dataset].[my-table]。之后就可以从View中读取解析后的信息了。

我已经测试了这种方法并且它有效。

将 woothee.js 文件上传到 Google Cloud Storage 中的存储桶后,我在 Google Cloud BigQuery 中创建了该函数

CREATE OR REPLACE FUNCTION `[my-project].[my-dataset].user_agent_parse`(ua STRING)
 RETURNS STRUCT<category STRING,name STRING,version STRING,os STRING,vendor STRING,os_version STRING>
 LANGUAGE js AS """  return {category:woothee.parse(ua).category,name:woothee.parse(ua).name,version:woothee.parse(ua).version,os:woothee.parse(ua).os,vendor:woothee.parse(ua).vendor,os_version:woothee.parse(ua).os_version};
"""OPTIONS(library="gs://[my-bucket]/woothee.js");

唯一的担忧是,根据您的数量,每当您从视图中读取时,基本上重新解析所有用户代理可能会花费您很多。因此,您可能需要考虑按计划将解析后的数据存储在表中。