Lọwọlọwọ, o fẹrẹ jẹ pe gbogbo ile-iṣẹ ni agbaye n gba awọn iṣiro nipa awọn iṣe olumulo lori orisun wẹẹbu kan. Iwuri naa jẹ kedere - awọn ile-iṣẹ fẹ lati mọ bii ọja / oju opo wẹẹbu wọn ṣe lo ati loye awọn olumulo wọn dara julọ. Nitoribẹẹ, ọpọlọpọ awọn irinṣẹ wa lori ọja lati yanju iṣoro yii - lati awọn eto itupalẹ ti o pese data ni irisi dashboards ati awọn aworan (fun apẹẹrẹ.
Ṣugbọn a rii iṣoro kan ti a ko ti yanju sibẹsibẹ. Bayi ni a bi
Kí nìdí tó fi yẹ ká máa ṣe iṣẹ́ ìsìn wa?
O je nineties, a si ye bi ti o dara ju a le. Ọdun 2019, a ṣe agbekalẹ Platform Data Onibara Akọkọ API kSense, eyiti o jẹ ki o ṣee ṣe lati ṣajọpọ data lati awọn orisun oriṣiriṣi (awọn ipolowo Facebook, Stripe, Salesforce, Google play, Awọn atupale Google, ati bẹbẹ lọ) fun itupalẹ data irọrun diẹ sii, idamọ awọn igbẹkẹle, ati bẹbẹ lọ. A ti ṣe akiyesi pe ọpọlọpọ awọn olumulo lo pẹpẹ wa fun itupalẹ data ni pataki Awọn atupale Google (lẹhin GA). A sọrọ si diẹ ninu awọn olumulo ati rii pe wọn nilo data atupale fun ọja wọn ti wọn gba ni lilo GA, ṣugbọn
Wọn fi piksẹli JavaScript Apa kan sori orisun wẹẹbu wọn ati data nipa ihuwasi ti awọn olumulo wọn ni a kojọpọ sinu ibi ipamọ data ti a sọ pato (fun apẹẹrẹ Postgres). Ṣugbọn Apa tun ni isalẹ rẹ - idiyele naa. Fun apẹẹrẹ, ti orisun wẹẹbu ba ni 90,000 MTU (awọn olumulo tọpinpin oṣooṣu), lẹhinna o nilo lati san ~ 1,000 $ fun oṣu kan si oluṣowo naa. Iṣoro kẹta tun wa - diẹ ninu awọn amugbooro ẹrọ aṣawakiri (bii AdBlock) dina ikojọpọ awọn atupale nitori… Awọn ibeere http lati ẹrọ aṣawakiri ni a fi ranṣẹ si GA ati awọn ibugbe Abala. Da lori awọn ifẹ ti awọn alabara wa, a ti ṣẹda iṣẹ atupale kan ti o gba eto pipe ti data (laisi iṣapẹẹrẹ), jẹ ọfẹ ati pe o le ṣiṣẹ lori awọn amayederun tiwa.
Bawo ni iṣẹ naa ṣe n ṣiṣẹ
Iṣẹ naa ni awọn ẹya mẹta: piksẹli javascript (eyiti a tun tun kọwe nigbamii ni iruwewewe), apakan olupin ti wa ni imuse ni ede GO, ati pe o ti gbero lati lo Redshift ati BigQuery gẹgẹbi ibi ipamọ data inu ile (lẹhinna wọn ṣafikun atilẹyin fun Postgres, ClickHouse ati Snowflake).
O pinnu lati lọ kuro ni eto ti GA ati awọn iṣẹlẹ Abala ko yipada. Gbogbo ohun ti o nilo ni lati dapọ gbogbo awọn iṣẹlẹ lati orisun wẹẹbu nibiti a ti fi piksẹli sori ẹhin wa. Bi o ti wa ni jade, eyi ko nira lati ṣe. Piksẹli Javascript bori ọna ikawe GA atilẹba pẹlu ọkan tuntun, eyiti o ṣe ẹda iṣẹlẹ naa sinu eto wa.
//'ga' - стандартное название переменной Google Analytics
if (window.ga) {
ga(tracker => {
var originalSendHitTask = tracker.get('sendHitTask');
tracker.set('sendHitTask', (model) => {
var payLoad = model.get('hitPayload');
//отправка оригинального события в GA
originalSendHitTask(model);
let jsonPayload = this.parseQuery(payLoad);
//отправка события в наш сервис
this.send3p('ga', jsonPayload);
});
});
}
Pẹlu piksẹli Apa ohun gbogbo jẹ rọrun; o ni awọn ọna agbedemeji, ọkan ninu eyiti a lo.
//'analytics' - стандартное название переменной Segment
if (window.analytics) {
if (window.analytics.addSourceMiddleware) {
window.analytics.addSourceMiddleware(chain => {
try {
//дублирование события в наш сервис
this.send3p('ajs', chain.payload);
} catch (e) {
LOG.warn('Failed to send an event', e)
}
//отправка оригинального события в Segment
chain.next(chain.payload);
});
} else {
LOG.warn("Invalid interceptor state. Analytics js initialized, but not completely");
}
} else {
LOG.warn('Analytics.js listener is not set.');
}
Ni afikun si didakọ awọn iṣẹlẹ, a ti ṣafikun agbara lati firanṣẹ json lainidii:
//Отправка событий с произвольным json объектом
eventN.track('product_page_view', {
product_id: '1e48fb70-ef12-4ea9-ab10-fd0b910c49ce',
product_price: 399.99,
price_currency: 'USD'
product_release_start: '2020-09-25T12:38:27.763000Z'
});
Nigbamii, jẹ ki a sọrọ nipa apakan olupin naa. Afẹyinti yẹ ki o gba awọn ibeere http, fọwọsi wọn pẹlu alaye afikun, fun apẹẹrẹ, data geo (o ṣeun
//входящий json
{
"field_1": {
"sub_field_1": "text1",
"sub_field_2": 100
},
"field_2": "text2",
"field_3": {
"sub_field_1": {
"sub_sub_field_1": "2020-09-25T12:38:27.763000Z"
}
}
}
//результат
{
"field_1_sub_field_1": "text1",
"field_1_sub_field_2": 100,
"field_2": "text2",
"field_3_sub_field_1_sub_sub_field_1": "2020-09-25T12:38:27.763000Z"
}
Sibẹsibẹ, awọn akojọpọ ti wa ni larọwọto ni iyipada si awọn gbolohun ọrọ nitori Kii ṣe gbogbo awọn apoti isura infomesonu ti o ni ibatan ṣe atilẹyin awọn aaye atunwi. O tun ṣee ṣe lati yi awọn orukọ aaye pada tabi paarẹ wọn nipa lilo awọn ofin iyaworan yiyan. Wọn gba ọ laaye lati yi eto data pada ti o ba jẹ dandan tabi yi iru data kan pada si omiiran. Fun apẹẹrẹ, ti aaye json kan ba ni okun kan pẹlu timestamp (aaye_3_sub_field_1_sub_sub_field_1 lati apẹẹrẹ ti o wa loke), lẹhinna lati ṣẹda aaye kan ninu aaye data pẹlu oriṣi timestamp, o nilo lati kọ ofin maapu kan ninu iṣeto. Ni awọn ọrọ miiran, iru data ti aaye jẹ ipinnu akọkọ nipasẹ iye json, ati lẹhinna iru ofin simẹnti (ti o ba tunto) ti lo. A ti ṣe idanimọ awọn oriṣi data akọkọ mẹrin: STRING, FLOAT4, INT64 ati TIMESTAMP. Awọn aworan agbaye ati iru awọn ofin simẹnti dabi eyi:
rules:
- "/field_1/subfield_1 -> " #правило удаления поля
- "/field_2/subfield_1 -> /field_10/subfield_1" #правило переноса поля
- "/field_3/subfield_1/subsubfield_1 -> (timestamp) /field_20" #правило переноса поля и приведения типа
Algorithm fun ipinnu iru data:
- iyipada json si ọna alapin
- npinnu iru data ti awọn aaye nipasẹ awọn iye
- fifi maapu ati iru awọn ofin simẹnti
Lẹhinna lati ọna json ti nwọle:
{
"product_id": "1e48fb70-ef12-4ea9-ab10-fd0b910c49ce",
"product_price": 399.99,
"price_currency": "USD",
"product_type": "supplies",
"product_release_start": "2020-09-25T12:38:27.763000Z",
"images": {
"main": "picture1",
"sub": "picture2"
}
}
Eto data yoo gba:
"product_id" character varying,
"product_price" numeric (38,18),
"price_currency" character varying,
"product_type" character varying,
"product_release_start" timestamp,
"images_main" character varying,
"images_sub" character varying
A tun ro pe olumulo yẹ ki o ni anfani lati tunto ipin tabi pin data ninu aaye data ni ibamu si awọn ibeere miiran ati imuse agbara lati ṣeto orukọ tabili pẹlu igbagbogbo tabi
tableName: '{{.product_type}}_{{._timestamp.Format "2006_01"}}'
Sibẹsibẹ, eto ti awọn iṣẹlẹ ti nwọle le yipada ni akoko asiko. A ti ṣe imuse algorithm kan lati ṣayẹwo iyatọ laarin eto ti tabili ti o wa ati eto iṣẹlẹ ti nwọle. Ti a ba rii iyatọ, tabili yoo ni imudojuiwọn pẹlu awọn aaye tuntun. Lati ṣe eyi, lo ibeere patch SQL:
#Пример для Postgres
ALTER TABLE "schema"."table" ADD COLUMN new_column character varying
faaji
Kini idi ti o nilo lati kọ awọn iṣẹlẹ si eto faili, kii ṣe kọ wọn taara si ibi ipamọ data? Awọn apoti isura infomesonu ko nigbagbogbo ṣiṣẹ daradara nigbati o ba n ba awọn nọmba nla ti awọn ifibọ sii (
Ṣii Orisun ati awọn ero fun ọjọ iwaju
Ni aaye kan, iṣẹ naa bẹrẹ si dabi ọja ti o ni kikun ati pe a pinnu lati tu silẹ si Orisun Ṣii. Lọwọlọwọ, awọn iṣọpọ pẹlu Postgres, ClickHouse, BigQuery, Redshift, S3, Snowflake ti ni imuse. Gbogbo awọn iṣọpọ ṣe atilẹyin ipele mejeeji ati awọn ipo ṣiṣanwọle ti ikojọpọ data. Atilẹyin ti a ṣafikun fun awọn ibeere nipasẹ API.
Eto isọpọ lọwọlọwọ dabi eyi:
Botilẹjẹpe iṣẹ naa le ṣee lo ni ominira (fun apẹẹrẹ lilo Docker), a tun ni
→
→
→
A yoo ni idunnu ti EventNative ba ṣe iranlọwọ lati yanju awọn iṣoro rẹ!
Awọn olumulo ti o forukọsilẹ nikan le kopa ninu iwadi naa.
Eto ikojọpọ awọn iṣiro wo lo ni ile-iṣẹ rẹ?
-
48,0%Google Analytics12
-
4,0%Apa 1
-
16,0%Omiiran (kọ ninu awọn asọye)4
-
32,0%Ṣiṣẹ iṣẹ rẹ8
25 olumulo dibo. 6 olumulo abstained.
orisun: www.habr.com