Π Π½Π°ΡΡΠΎΡΡΠ΅Π΅ Π²ΡΠ΅ΠΌΡ ΠΏΡΠ°ΠΊΡΠΈΡΠ΅ΡΠΊΠΈ ΠΊΠ°ΠΆΠ΄Π°Ρ ΠΊΠΎΠΌΠΏΠ°Π½ΠΈΡ Π² ΠΌΠΈΡΠ΅ ΡΠΎΠ±ΠΈΡΠ°Π΅Ρ ΡΡΠ°ΡΠΈΡΡΠΈΠΊΡ ΠΎ Π΄Π΅ΠΉΡΡΠ²ΠΈΡΡ
ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ Π½Π° web ΡΠ΅ΡΡΡΡΠ΅. ΠΠΎΡΠΈΠ²Π°ΡΠΈΡ ΠΏΠΎΠ½ΡΡΠ½Π° β ΠΊΠΎΠΌΠΏΠ°Π½ΠΈΠΈ Ρ
ΠΎΡΡΡ Π·Π½Π°ΡΡ ΠΊΠ°ΠΊ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ ΠΈΡ
ΠΏΡΠΎΠ΄ΡΠΊΡ/Π²Π΅Π± ΡΠ°ΠΉΡ ΠΈ Π»ΡΡΡΠ΅ ΠΏΠΎΠ½ΠΈΠΌΠ°ΡΡ ΡΠ²ΠΎΠΈΡ
ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Π΅ΠΉ. ΠΠΎΠ½Π΅ΡΠ½ΠΎ Π½Π° ΡΡΠ½ΠΊΠ΅ ΡΡΡΠ΅ΡΡΠ²ΡΠ΅Ρ Π±ΠΎΠ»ΡΡΠΎΠ΅ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΠΎΠ² Π΄Π»Ρ ΡΠ΅ΡΠ΅Π½ΠΈΡ Π΄Π°Π½Π½ΠΎΠΉ ΠΏΡΠΎΠ±Π»Π΅ΠΌΡ β ΠΎΡ ΡΠΈΡΡΠ΅ΠΌ Π°Π½Π°Π»ΠΈΡΠΈΠΊΠΈ, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Π»ΡΡΡ Π΄Π°Π½Π½ΡΠ΅ Π² Π²ΠΈΠ΄Π΅ Π΄Π°ΡΠ±ΠΎΡΠ΄ΠΎΠ² ΠΈ Π³ΡΠ°ΡΠΈΠΊΠΎΠ² (Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ
ΠΠΎ ΠΌΡ Π½Π°ΡΠ»ΠΈ ΠΏΡΠΎΠ±Π»Π΅ΠΌΡ, ΠΊΠΎΡΠΎΡΠ°Ρ Π΅ΡΠ΅ Π½Π΅ Π±ΡΠ»Π° ΡΠ΅ΡΠ΅Π½Π°. Π’Π°ΠΊ ΡΠΎΠ΄ΠΈΠ»ΡΡ
ΠΠ°ΡΠ΅ΠΌ Π½Π°ΠΌ ΡΠ°Π·ΡΠ°Π±Π°ΡΡΠ²Π°ΡΡ ΡΠΎΠ±ΡΡΠ²Π΅Π½Π½ΡΠΉ ΡΠ΅ΡΠ²ΠΈΡ?
ΠΡΠΎ Π±ΡΠ»ΠΈ Π΄Π΅Π²ΡΠ½ΠΎΡΡΡΠ΅, ΠΌΡ Π²ΡΠΆΠΈΠ²Π°Π»ΠΈ ΠΊΠ°ΠΊ ΠΌΠΎΠ³Π»ΠΈ. 2019 Π³ΠΎΠ΄, ΠΌΡ ΡΠ°Π·ΡΠ°Π±Π°ΡΡΠ²Π°Π»ΠΈ API First Customer Data Platform kSense, ΠΊΠΎΡΠΎΡΠ°Ρ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ»Π° Π°Π³ΡΠ΅Π³ΠΈΡΠΎΠ²Π°ΡΡ Π΄Π°Π½Π½ΡΠ΅ ΠΈΠ· ΡΠ°Π·Π½ΡΡ
ΠΈΡΡΠΎΡΠ½ΠΈΠΊΠΎΠ² (Facebook ads, Stripe, Salesforce, Google play, Google Analytics ΠΈ Π΄Ρ) Π΄Π»Ρ Π±ΠΎΠ»Π΅Π΅ ΡΠ΄ΠΎΠ±Π½ΠΎΠ³ΠΎ Π°Π½Π°Π»ΠΈΠ·Π° Π΄Π°Π½Π½ΡΡ
, Π²ΡΡΠ²Π»Π΅Π½ΠΈΡ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠ΅ΠΉ ΠΈ Ρ.Π΄. ΠΡ Π·Π°ΠΌΠ΅ΡΠΈΠ»ΠΈ, ΡΡΠΎ ΠΌΠ½ΠΎΠ³ΠΈΠ΅ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»ΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡ Π½Π°ΡΡ ΠΏΠ»Π°ΡΡΠΎΡΠΌΡ Π΄Π»Ρ Π°Π½Π°Π»ΠΈΠ·Π° Π΄Π°Π½Π½ΡΡ
ΠΈΠΌΠ΅Π½Π½ΠΎ Google Analytics (Π΄Π°Π»Π΅Π΅ GA). Π‘ Π½Π΅ΠΊΠΎΡΠΎΡΡΠΌΠΈ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»ΡΠΌΠΈ ΠΌΡ ΠΏΠΎΠ³ΠΎΠ²ΠΎΡΠΈΠ»ΠΈ ΠΈ Π²ΡΡΡΠ½ΠΈΠ»ΠΈ, ΡΡΠΎ ΠΈΠΌ Π½ΡΠΆΠ½Ρ Π΄Π°Π½Π½ΡΠ΅ Π°Π½Π°Π»ΠΈΡΠΈΠΊΠΈ ΠΈΡ
ΠΏΡΠΎΠ΄ΡΠΊΡΠ°, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΎΠ½ΠΈ ΠΏΠΎΠ»ΡΡΠ°ΡΡ Ρ ΠΏΠΎΠΌΠΎΡΡΡ GA, Π½ΠΎ
ΠΠ½ΠΈ ΡΡΡΠ°Π½Π°Π²Π»ΠΈΠ²Π°Π»ΠΈ Segment javascript ΠΏΠΈΠΊΡΠ΅Π»Ρ Π½Π° ΡΠ²ΠΎΠΉ web ΡΠ΅ΡΡΡΡ ΠΈ Π΄Π°Π½Π½ΡΠ΅ ΠΎ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠΈ ΠΈΡ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Π΅ΠΉ Π·Π°Π³ΡΡΠΆΠ°Π»ΠΈΡΡ Π² ΡΠΊΠ°Π·Π°Π½Π½ΡΡ Π±Π°Π·Ρ Π΄Π°Π½Π½ΡΡ (Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ Postgres). ΠΠΎ ΠΈ Ρ Segment Π΅ΡΡΡ ΡΠ²ΠΎΠΉ ΠΌΠΈΠ½ΡΡ β ΡΠ΅Π½Π°. Π ΠΏΡΠΈΠΌΠ΅ΡΡ, Π΅ΡΠ»ΠΈ Ρ Π²Π΅Π± ΡΠ΅ΡΡΡΡΠ° 90,000 MTU (monthly tracked users) ΡΠΎ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ ΠΎΠΏΠ»Π°ΡΠΈΡΡ Π² ΠΊΠ°ΡΡΡ ~1,000 $ Π² ΠΌΠ΅ΡΡΡ. Π’Π°ΠΊΠΆΠ΅ Π±ΡΠ»Π° ΠΈ ΡΡΠ΅ΡΡΡ ΠΏΡΠΎΠ±Π»Π΅ΠΌΠ° β Π½Π΅ΠΊΠΎΡΠΎΡΡΠ΅ ΡΠ°ΡΡΠΈΡΠ΅Π½ΠΈΡ Π΄Π»Ρ Π±ΡΠ°ΡΠ·Π΅ΡΠ° (ΡΠ°ΠΊΠΈΠ΅ ΠΊΠ°ΠΊ AdBlock) Π±Π»ΠΎΠΊΠΈΡΠΎΠ²Π°Π»ΠΈ ΡΠ±ΠΎΡ Π°Π½Π°Π»ΠΈΡΠΈΠΊΠΈ Ρ.ΠΊ. http Π·Π°ΠΏΡΠΎΡΡ ΠΈΠ· Π±ΡΠ°ΡΠ·Π΅ΡΠ° ΠΎΡΠΏΡΠ°Π²Π»ΡΠ»ΠΈΡΡ Π½Π° Π΄ΠΎΠΌΠ΅Π½Ρ GA ΠΈ Segment. ΠΡΡ ΠΎΠ΄Ρ ΠΈΠ· ΠΆΠ΅Π»Π°Π½ΠΈΡ Π½Π°ΡΠΈΡ ΠΊΠ»ΠΈΠ΅Π½ΡΠΎΠ², ΠΌΡ ΡΠ΄Π΅Π»Π°Π»ΠΈ ΡΠ΅ΡΠ²ΠΈΡ Π°Π½Π°Π»ΠΈΡΠΈΠΊΠΈ, ΠΊΠΎΡΠΎΡΡΠΉ ΡΠΎΠ±ΠΈΡΠ°Π΅Ρ ΠΏΠΎΠ»Π½ΡΠΉ Π½Π°Π±ΠΎΡ Π΄Π°Π½Π½ΡΡ (Π±Π΅Π· ΡΡΠΌΠΏΠ»ΠΈΠ½Π³Π°), Π±Π΅ΡΠΏΠ»Π°ΡΠ½ΡΠΉ ΠΈ ΠΌΠΎΠΆΠ΅Ρ ΡΠ°Π±ΠΎΡΠ°ΡΡ Π½Π° ΡΠΎΠ±ΡΡΠ²Π΅Π½Π½ΠΎΠΉ ΠΈΠ½ΡΡΠ°ΡΡΡΡΠΊΡΡΡΠ΅.
ΠΠ°ΠΊ ΡΡΡΡΠΎΠ΅Π½ ΡΠ΅ΡΠ²ΠΈΡ
Π‘Π΅ΡΠ²ΠΈΡ ΡΠΎΡΡΠΎΠΈΡ ΠΈΠ· ΡΡΠ΅Ρ ΡΠ°ΡΡΠ΅ΠΉ: javascript ΠΏΠΈΠΊΡΠ΅Π»Ρ (ΠΊΠΎΡΠΎΡΡΠΉ ΠΌΡ Π²ΠΏΠΎΡΠ»Π΅Π΄ΡΡΠ²ΠΈΠΈ ΠΏΠ΅ΡΠ΅ΠΏΠΈΡΠ°Π»ΠΈ Π½Π° typescript), ΡΠ΅ΡΠ²Π΅ΡΠ½Π°Ρ ΡΠ°ΡΡΡ ΡΠ΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Π° Π½Π° ΡΠ·ΡΠΊΠ΅ GO ΠΈ Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ in-house Π±Π°Π·Ρ Π΄Π°Π½Π½ΡΡ ΠΏΠ»Π°Π½ΠΈΡΠΎΠ²Π°Π»ΠΎΡΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Redshift ΠΈ BigQuery (ΠΏΠΎΠ·ΠΆΠ΅ Π΄ΠΎΠ±Π°Π²ΠΈΠ»ΠΈ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΊΡ Postgres, ClickHouse ΠΈ Snowflake).
Π‘ΡΡΡΠΊΡΡΡΡ ΡΠΎΠ±ΡΡΠΈΠΉ GA ΠΈ Segment ΡΠ΅ΡΠΈΠ»ΠΈ ΠΎΡΡΠ°Π²ΠΈΡΡ Π±Π΅Π· ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡ. ΠΡΠ΅, ΡΡΠΎ Π±ΡΠ»ΠΎ Π½ΡΠΆΠ½ΠΎ, ΡΡΠΎ Π΄ΡΠ±Π»ΠΈΡΠΎΠ²Π°ΡΡ Π²ΡΠ΅ ΡΠΎΠ±ΡΡΠΈΡ Ρ web ΡΠ΅ΡΡΡΡΠ°, Π³Π΄Π΅ ΡΡΡΠ°Π½ΠΎΠ²Π»Π΅Π½ ΠΏΠΈΠΊΡΠ΅Π»Ρ, Π² Π½Π°Ρ Π±Π΅ΠΊΠ΅Π½Π΄. ΠΠ°ΠΊ ΠΎΠΊΠ°Π·Π°Π»ΠΎΡΡ, ΡΡΠΎ ΡΠ΄Π΅Π»Π°ΡΡ Π½Π΅ΡΠ»ΠΎΠΆΠ½ΠΎ. Javascript ΠΏΠΈΠΊΡΠ΅Π»Ρ ΠΏΠ΅ΡΠ΅ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ» ΠΎΡΠΈΠ³ΠΈΠ½Π°Π»ΡΠ½ΡΠΉ ΠΌΠ΅ΡΠΎΠ΄ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ GA Π½Π° Π½ΠΎΠ²ΡΠΉ, ΠΊΠΎΡΠΎΡΡΠΉ Π΄ΡΠ±Π»ΠΈΡΠΎΠ²Π°Π» ΡΠΎΠ±ΡΡΠΈΠ΅ Π² Π½Π°ΡΡ ΡΠΈΡΡΠ΅ΠΌΡ.
//'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);
});
});
}
Π‘ ΠΏΠΈΠΊΡΠ΅Π»Π΅ΠΌ Segment Π²ΡΠ΅ ΠΏΡΠΎΡΠ΅, ΠΎΠ½ ΠΈΠΌΠ΅Π΅Ρ middleware ΠΌΠ΅ΡΠΎΠ΄Ρ, ΠΎΠ΄Π½ΠΈΠΌ ΠΈΠ· Π½ΠΈΡ ΠΌΡ ΠΈ Π²ΠΎΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π»ΠΈΡΡ.
//'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.');
}
ΠΠΎΠΌΠΈΠΌΠΎ ΠΊΠΎΠΏΠΈΡΠΎΠ²Π°Π½ΠΈΡ ΡΠΎΠ±ΡΡΠΈΠΉ ΠΌΡ Π΄ΠΎΠ±Π°Π²ΠΈΠ»ΠΈ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡ ΠΎΡΠΏΡΠ°Π²Π»ΡΡΡ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ»ΡΠ½ΡΠΉ json:
//ΠΡΠΏΡΠ°Π²ΠΊΠ° ΡΠΎΠ±ΡΡΠΈΠΉ Ρ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ»ΡΠ½ΡΠΌ 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'
});
ΠΠ°Π»Π΅Π΅ ΠΏΠΎΠ³ΠΎΠ²ΠΎΡΠΈΠΌ ΠΏΡΠΎ ΡΠ΅ΡΠ²Π΅ΡΠ½ΡΡ ΡΠ°ΡΡΡ. Backend Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΏΡΠΈΠ½ΠΈΠΌΠ°ΡΡ http Π·Π°ΠΏΡΠΎΡΡ, Π½Π°ΠΏΠΎΠ»Π½ΡΡΡ ΠΈΡ
Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½ΠΎΠΉ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΠ΅ΠΉ, ΠΊ ΠΏΡΠΈΠΌΠ΅ΡΡ, Π³Π΅ΠΎ Π΄Π°Π½Π½ΡΠΌΠΈ (ΡΠΏΠ°ΡΠΈΠ±ΠΎ
//Π²Ρ
ΠΎΠ΄ΡΡΠΈΠΉ 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"
}
ΠΠ΄Π½Π°ΠΊΠΎ ΠΌΠ°ΡΡΠΈΠ²Ρ Π½Π° Π΄Π°Π½Π½ΡΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ ΠΏΡΠΎΡΡΠΎ ΠΊΠΎΠ½Π²Π΅ΡΡΠΈΡΡΡΡΡΡ Π² ΡΡΡΠΎΠΊΡ Ρ.ΠΊ. Π½Π΅ Π²ΡΠ΅ ΡΠ΅Π»ΡΡΠΈΠΎΠ½Π½ΡΠ΅ Π±Π°Π·Ρ Π΄Π°Π½Π½ΡΡ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°ΡΡ ΠΏΠΎΠ²ΡΠΎΡΡΡΡΠΈΠ΅ΡΡ ΠΏΠΎΠ»Ρ (repeated fields). Π’Π°ΠΊΠΆΠ΅ Π΅ΡΡΡ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡ ΠΈΠ·ΠΌΠ΅Π½ΡΡΡ Π½Π°Π·Π²Π°Π½ΠΈΡ ΠΏΠΎΠ»Π΅ΠΉ ΠΈΠ»ΠΈ ΡΠ΄Π°Π»ΡΡΡ ΠΈΡ Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΠΎΠΏΡΠΈΠΎΠ½Π°Π»ΡΠ½ΡΡ ΠΏΡΠ°Π²ΠΈΠ» ΠΌΠ°ΠΏΠΏΠΈΠ½Π³Π°. ΠΠ½ΠΈ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡΡ ΠΌΠ΅Π½ΡΡΡ ΡΡ Π΅ΠΌΡ Π΄Π°Π½Π½ΡΡ , Π΅ΡΠ»ΠΈ ΡΡΠΎ ΠΏΠΎΡΡΠ΅Π±ΡΠ΅ΡΡΡ ΠΈΠ»ΠΈ ΠΏΡΠΈΠ²ΠΎΠ΄ΠΈΡΡ ΠΎΠ΄ΠΈΠ½ ΡΠΈΠΏ Π΄Π°Π½Π½ΡΡ ΠΊ Π΄ΡΡΠ³ΠΎΠΌΡ. Π ΠΏΡΠΈΠΌΠ΅ΡΡ, Π΅ΡΠ»ΠΈ Π² json ΠΏΠΎΠ»Π΅ Π½Π°Ρ ΠΎΠ΄ΠΈΡΡΡ ΡΡΡΠΎΠΊΠ° Ρ timestamp (field_3_sub_field_1_sub_sub_field_1 ΠΈΠ· ΠΏΡΠΈΠΌΠ΅ΡΠ° Π²ΡΡΠ΅) ΡΠΎ Π΄Π»Ρ ΡΠΎΠ³ΠΎ ΡΡΠΎΠ±Ρ ΡΠΎΠ·Π΄Π°ΡΡ ΠΏΠΎΠ»Π΅ Π² Π±Π°Π·Π΅ Π΄Π°Π½Π½ΡΡ Ρ ΡΠΈΠΏΠΎΠΌ timestamp, Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ Π½Π°ΠΏΠΈΡΠ°ΡΡ ΠΏΡΠ°Π²ΠΈΠ»ΠΎ ΠΌΠ°ΠΏΠΏΠΈΠ½Π³Π° Π² ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠΈ. ΠΡΡΠ³ΠΈΠΌΠΈ ΡΠ»ΠΎΠ²Π°ΠΌΠΈ, ΡΠΈΠΏ Π΄Π°Π½Π½ΡΡ ΠΏΠΎΠ»Ρ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ΅ΡΡΡ ΡΠ½Π°ΡΠ°Π»Π° ΠΏΠΎ json Π·Π½Π°ΡΠ΅Π½ΠΈΡ, Π° Π·Π°ΡΠ΅ΠΌ ΠΏΡΠΈΠΌΠ΅Π½ΡΠ΅ΡΡΡ ΠΏΡΠ°Π²ΠΈΠ»ΠΎ ΠΏΡΠΈΠ²Π΅Π΄Π΅Π½ΠΈΡ ΡΠΈΠΏΠΎΠ² (Π΅ΡΠ»ΠΈ ΠΎΠ½ΠΎ ΡΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠΈΡΠΎΠ²Π°Π½ΠΎ). ΠΡ Π²ΡΠ΄Π΅Π»ΠΈΠ»ΠΈ 4 ΠΎΡΠ½ΠΎΠ²Π½ΡΡ ΡΠΈΠΏΠ° Π΄Π°Π½Π½ΡΡ : STRING, FLOAT64, INT64 ΠΈ TIMESTAMP. ΠΡΠ°Π²ΠΈΠ»Π° ΠΌΠ°ΠΏΠΏΠΈΠ½Π³Π° ΠΈ ΠΏΡΠΈΠ²Π΅Π΄Π΅Π½ΠΈΡ ΡΠΈΠΏΠΎΠ² Π²ΡΠ³Π»ΡΠ΄ΡΡ ΡΠ»Π΅Π΄ΡΡΡΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ:
rules:
- "/field_1/subfield_1 -> " #ΠΏΡΠ°Π²ΠΈΠ»ΠΎ ΡΠ΄Π°Π»Π΅Π½ΠΈΡ ΠΏΠΎΠ»Ρ
- "/field_2/subfield_1 -> /field_10/subfield_1" #ΠΏΡΠ°Π²ΠΈΠ»ΠΎ ΠΏΠ΅ΡΠ΅Π½ΠΎΡΠ° ΠΏΠΎΠ»Ρ
- "/field_3/subfield_1/subsubfield_1 -> (timestamp) /field_20" #ΠΏΡΠ°Π²ΠΈΠ»ΠΎ ΠΏΠ΅ΡΠ΅Π½ΠΎΡΠ° ΠΏΠΎΠ»Ρ ΠΈ ΠΏΡΠΈΠ²Π΅Π΄Π΅Π½ΠΈΡ ΡΠΈΠΏΠ°
ΠΠ»Π³ΠΎΡΠΈΡΠΌ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΡ ΡΠΈΠΏΠ° Π΄Π°Π½Π½ΡΡ :
- ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΠΎΠ²Π°Π½ΠΈΠ΅ json ΡΡΡΡΠΊΡΡΡΡ Π² ΠΏΠ»ΠΎΡΠΊΡΡ ΡΡΡΡΠΊΡΡΡΡ
- ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ ΡΠΈΠΏΠ° Π΄Π°Π½Π½ΡΡ ΠΏΠΎΠ»Π΅ΠΉ ΠΏΠΎ Π·Π½Π°ΡΠ΅Π½ΠΈΡΠΌ
- ΠΏΡΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ ΠΏΡΠ°Π²ΠΈΠ» ΠΌΠ°ΠΏΠΏΠΈΠ½Π³Π° ΠΈ ΠΏΡΠΈΠ²Π΅Π΄Π΅Π½ΠΈΡ ΡΠΈΠΏΠΎΠ²
Π’ΠΎΠ³Π΄Π° ΠΈΠ· Π²Ρ ΠΎΠ΄ΡΡΠ΅ΠΉ json ΡΡΡΡΠΊΡΡΡΡ:
{
"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"
}
}
Π±ΡΠ΄Π΅Ρ ΠΏΠΎΠ»ΡΡΠ΅Π½Π° ΡΡ Π΅ΠΌΠ° Π΄Π°Π½Π½ΡΡ :
"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
Π’Π°ΠΊΠΆΠ΅ ΠΌΡ ΠΏΠΎΠ΄ΡΠΌΠ°Π»ΠΈ, ΡΡΠΎ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΈΠΌΠ΅ΡΡ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡ Π½Π°ΡΡΡΠΎΠΈΡΡ ΠΏΠ°ΡΡΠΈΡΠΈΠΎΠ½ΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ ΠΈΠ»ΠΈ ΡΠ°Π·Π΄Π΅Π»ΡΡΡ Π΄Π°Π½Π½ΡΠ΅ Π² ΠΠ ΠΏΠΎ Π΄ΡΡΠ³ΠΈΠΌ ΠΊΡΠΈΡΠ΅ΡΠΈΡΠΌ ΠΈ ΡΠ΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π»ΠΈ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡ Π·Π°Π΄Π°Π²Π°ΡΡ ΠΈΠΌΡ ΡΠ°Π±Π»ΠΈΡΡ ΠΊΠΎΠ½ΡΡΠ°Π½ΡΠΎΠΉ ΠΈΠ»ΠΈ
tableName: '{{.product_type}}_{{._timestamp.Format "2006_01"}}'
ΠΠ΄Π½Π°ΠΊΠΎ ΡΡΡΡΠΊΡΡΡΠ° Π²Ρ ΠΎΠ΄ΡΡΠΈΡ ΡΠΎΠ±ΡΡΠΈΠΉ ΠΌΠΎΠΆΠ΅Ρ ΠΈΠ·ΠΌΠ΅Π½ΡΡΡΡΡ Π² runtime. ΠΡ ΡΠ΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π»ΠΈ Π°Π»Π³ΠΎΡΠΈΡΠΌ ΠΏΡΠΎΠ²Π΅ΡΠΊΠΈ ΡΠ°Π·Π½ΠΈΡΡ ΠΌΠ΅ΠΆΠ΄Ρ ΡΡΡΡΠΊΡΡΡΠΎΠΉ ΡΡΡΠ΅ΡΡΠ²ΡΡΡΠ΅ΠΉ ΡΠ°Π±Π»ΠΈΡΡ ΠΈ ΡΡΡΡΠΊΡΡΡΠΎΠΉ Π²Ρ ΠΎΠ΄ΡΡΠ΅Π³ΠΎ ΡΠΎΠ±ΡΡΠΈΡ. ΠΡΠ»ΠΈ ΡΠ°Π·Π½ΠΈΡΠ° Π½Π°ΠΉΠ΄Π΅Π½Π° β ΡΠ°Π±Π»ΠΈΡΠ° Π±ΡΠ΄Π΅Ρ ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½Π° Π½ΠΎΠ²ΡΠΌΠΈ ΠΏΠΎΠ»ΡΠΌΠΈ. ΠΠ»Ρ ΡΡΠΎΠ³ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ patch SQL Π·Π°ΠΏΡΠΎΡ:
#ΠΡΠΈΠΌΠ΅Ρ Π΄Π»Ρ Postgres
ALTER TABLE "schema"."table" ADD COLUMN new_column character varying
ΠΡΡ ΠΈΡΠ΅ΠΊΡΡΡΠ°
ΠΠ°ΡΠ΅ΠΌ Π½ΡΠΆΠ½ΠΎ Π·Π°ΠΏΠΈΡΡΠ²Π°ΡΡ ΡΠΎΠ±ΡΡΠΈΡ Π½Π° ΡΠ°ΠΉΠ»ΠΎΠ²ΡΡ ΡΠΈΡΡΠ΅ΠΌΡ, Π° Π½Π΅ ΠΏΡΠΎΡΡΠΎ ΠΏΠΈΡΠ°ΡΡ ΠΈΡ
ΡΡΠ°Π·Ρ Π² ΠΠ? ΠΠ°Π·Ρ Π΄Π°Π½Π½ΡΡ
Π½Π΅ Π²ΡΠ΅Π³Π΄Π° Π΄Π΅ΠΌΠΎΠ½ΡΡΡΠΈΡΡΡΡ Π²ΡΡΠΎΠΊΡΡ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»ΡΠ½ΠΎΡΡΡ ΠΏΡΠΈ Π±ΠΎΠ»ΡΡΠΎΠΌ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²Π΅ Π²ΡΡΠ°Π²ΠΎΠΊ (
Open Source ΠΈ ΠΏΠ»Π°Π½Ρ Π½Π° Π±ΡΠ΄ΡΡΠ΅Π΅
Π ΠΊΠ°ΠΊΠΎΠΉ-ΡΠΎ ΠΌΠΎΠΌΠ΅Π½Ρ ΡΠ΅ΡΠ²ΠΈΡ ΡΡΠ°Π» ΠΏΠΎΡ ΠΎΠΆ Π½Π° ΠΏΠΎΠ»Π½ΠΎΡΠ΅Π½Π½ΡΠΉ ΠΏΡΠΎΠ΄ΡΠΊΡ ΠΈ ΠΌΡ ΡΠ΅ΡΠΈΠ»ΠΈ Π²ΡΠ»ΠΎΠΆΠΈΡΡ Π΅Π³ΠΎ Π² Open Source. ΠΠ° ΡΠ΅ΠΊΡΡΠΈΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ ΡΠ΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Ρ ΠΈΠ½ΡΠ΅Π³ΡΠ°ΡΠΈΠΈ Ρ Postgres, ClickHouse, BigQuery, Redshift, S3, Snowflake. ΠΡΠ΅ ΠΈΠ½ΡΠ΅Π³ΡΠ°ΡΠΈΠΈ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°ΡΡ ΠΊΠ°ΠΊ batch, ΡΠ°ΠΊ ΠΈ streaming ΡΠ΅ΠΆΠΈΠΌΡ Π·Π°Π³ΡΡΠ·ΠΊΠΈ Π΄Π°Π½Π½ΡΡ . ΠΠΎΠ±Π°Π²Π»Π΅Π½Π° ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΊΠ° Π·Π°ΠΏΡΠΎΡΠΎΠ² ΡΠ΅ΡΠ΅Π· API.
Π’Π΅ΠΊΡΡΠ°Ρ ΠΈΠ½ΡΠ΅Π³ΡΠ°ΡΠΈΠΎΠ½Π½Π°Ρ ΡΡ Π΅ΠΌΠ° Π²ΡΠ³Π»ΡΠ΄ΠΈΡ ΡΠ»Π΅Π΄ΡΡΡΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ:
ΠΠ΅ΡΠΌΠΎΡΡΡ Π½Π° ΡΠΎ ΡΡΠΎ ΡΠ΅ΡΠ²ΠΈΡ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΡΠ°ΠΌΠΎΡΡΠΎΡΡΠ΅Π»ΡΠ½ΠΎ (Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ Ρ ΠΏΠΎΠΌΠΎΡΡΡ Docker), Ρ Π½Π°Ρ ΡΠ°ΠΊΠΆΠ΅ Π΅ΡΡΡ
βΒ
βΒ
βΒ
ΠΡΠ΄Π΅ΠΌ ΡΠ°Π΄Ρ Π΅ΡΠ»ΠΈ EventNative ΠΏΠΎΠΌΠΎΠΆΠ΅Ρ ΡΠ΅ΡΠΈΡΡ Π²Π°ΡΠΈ Π·Π°Π΄Π°ΡΠΈ!
Π’ΠΎΠ»ΡΠΊΠΎ Π·Π°ΡΠ΅Π³ΠΈΡΡΡΠΈΡΠΎΠ²Π°Π½Π½ΡΠ΅ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»ΠΈ ΠΌΠΎΠ³ΡΡ ΡΡΠ°ΡΡΠ²ΠΎΠ²Π°ΡΡ Π² ΠΎΠΏΡΠΎΡΠ΅.
ΠΠ°ΠΊΠ°Ρ ΡΠΈΡΡΠ΅ΠΌΠ° ΡΠ±ΠΎΡΠ° ΡΡΠ°ΡΠΈΡΡΠΈΠΊΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ Π² Π²Π°ΡΠ΅ΠΉ ΠΊΠΎΠΌΠΏΠ°Π½ΠΈΠΈ
-
48,0%Google Analytics12
-
4,0%Segment1
-
16,0%ΠΡΡΠ³ΡΡ (Π½Π°ΠΏΠΈΡΠΈΡΠ΅ Π² ΠΊΠΎΠΌΠΌΠ΅Π½ΡΠ°ΡΠΈΡΡ )4
-
32,0%Π Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π»ΠΈ ΡΠ²ΠΎΠΉ ΡΠ΅ΡΠ²ΠΈΡ8
ΠΡΠΎΠ³ΠΎΠ»ΠΎΡΠΎΠ²Π°Π»ΠΈ 25 ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Π΅ΠΉ. ΠΠΎΠ·Π΄Π΅ΡΠΆΠ°Π»ΠΈΡΡ 6 ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Π΅ΠΉ.
ΠΡΡΠΎΡΠ½ΠΈΠΊ: habr.com