很惭愧,Flink看的一知半解的,还没有进行真正生产上的实践就跑到GCP去玩耍了,回头一定要把Flink搞明白(专业立flag二十年)
关于BigQuery,定位应该和阿里的ODPS差不多,但是国内好像很少有人使用,刚刚写了个复杂的SQL,所以写篇文章记录一下,顺便完成简书的日更挑战。
BigQuery和Firebase连通后,Firebase的所有数据会同步到BigQuery中,###events_开头的表是历史表(每天的都有),###event_intraday_开头的表是实时表(只有当天的),但是由于数据量太大,运营人员一天查看数据的次数较多,所以花钱太多了,公司没钱了,只好求我把数据统计到小表中,这样即便经常查询,也不会产生大量的费用,哇咔咔。
事件表的表结构大致是这样的:

其他字段都正常查询就行,就是这个傻呵呵的event_params,是个RECORD类型,我也不知道这是个什么类型,反正使用标准SQL不太好查询,翻阅其官方文档,一顿瞎搞,终于,终于,终于搞定了,我都要绝望了啊,果不其然,坚持就是胜利啊,幸亏老子摩羯座,隐忍而伟大,牛逼
insert `dataset_name.test` (product_name,event_name,event_date,event_params,event_number,event_user_number)
WITH
events AS (
SELECT *
FROM `dataset_name.analytics_184463080.events_*`
WHERE _table_suffix BETWEEN FORMAT_DATE('%Y%m%d',DATE_ADD(CURRENT_DATE(),INTERVAL -3 DAY))
AND FORMAT_DATE('%Y%m%d',DATE_ADD(CURRENT_DATE(),INTERVAL -1 DAY)))
select tempA.product_name as product_name,
tempA.event_name as event_name,
tempA.event_date as event_date,
ARRAY<STRUCT<key STRING, value STRUCT<string_value STRING, int_value INT64, float_value FLOAT64, double_value FLOAT64>>>[
STRUCT(tempA.key,STRUCT(tempA.stringValue,tempA.intValue,tempA.floatValue,tempA.doubleValue))
] as event_params,
tempA.event_number as event_number,
tempA.event_user_number as event_user_number
from (
SELECT
'filescanner' AS product_name,
event_name,
event_date,
event_params.key as key,
event_params.value.string_value as stringValue,
event_params.value.int_value as intValue,
event_params.value.float_value as floatValue,
event_params.value.double_value as doubleValue,
COUNT(event_name) AS event_number,
COUNT(DISTINCT user_pseudo_id) AS event_user_number
FROM
events,events.event_params
GROUP BY product_name,event_name,event_date,key,stringValue,intValue,floatValue,doubleValue
) as tempA
应该够100字了,这GCP国内外资料太少了,不会点英文官方文档都看不了,幸好老子电脑有Google翻译,哇咔咔
网友评论