Объект сактагычына экспорт
Ар бир аткарылган максат үчүн өзүңүзгө таандык бакетте бир JSON объекти. Бул — BigQueryден башка бардык маалымат кампаларына жол.
1. Бул кайсы боштукту толтурат
Буга чейин MousePlayerден маалымат кампасына так бир жол болгон жана ал Googleга алып барган. Snowflake, Redshift же ClickHouse колдонсоңуз, үчөө тең объект сактагычынан эркин окуса да, жол жок болчу.
Ошондуктан көпүрө ар бир кампага кезек менен эмес, объект сактагычына жазат. Snowflake S3төн, Redshift S3төн, ClickHouse S3төн, BigQuery Google Cloud Storageден алат. Бир экспорт баарына жетет.
| Кайда | Кайрылуу ыкмасы |
|---|---|
| Amazon S3 | Signature Version 4, бакет хостто |
| Cloudflare R2 | Аккаунтуңуздун чекитине Signature Version 4 менен |
| Google Cloud Storage | S3 менен шайкеш APIсы аркылуу, HMAC ачкычы менен |
| MinIO, Wasabi, Backblaze B2 жана башкалар | Чекитиңизге Signature Version 4 менен |
| Azure Blob Storage | контейнердин SAS шилтемеси — биз тарапта кол коюу жок |
2. Эмне үчүн Azure башкача жана бул эмнеси менен жакшы
Azure Blob Signature Version 4 колдонбойт, SharedKey менен кол коёт. Экинчи кол коюу схемасын түзө алмакпыз. Анын ордуна көпүрө контейнердин SAS шилтемесин алат — бул өз сактагыч аккаунтуңузда түзүлгөн, ичинде даяр кол тамгасы бар URL дареги.
Биз тарапта азыраак код, сиз тарапта азыраак ишеним талап кылынат. Аккаунт ачкычын такыр көрбөйбүз: сиз бир контейнерге өзүңүз чектеген, өзүңүз тандаган бүтүү мөөнөтү бар, башка нерсеге тийбей каалаган убакта жокко чыгарылуучу уруксатты бересиз.
S3 тарабында да ушундай чектөө пайдалуу: кирүү ачкычына ушул жалгыз префикске гана жазуу укугун бериңиз. Жалгыз mouseplayer/goals/ ичине кошо алган ачкыч сыртка чыгып кетсе да башка бакеттериңизди окуй албайт.
3. Ар бир максатка бир объект, ачкыч — дата
Объект сактагычында аягына кошуу жок. Күндүк файл ар жолу толугу менен кайра жазылмак жана бир убакта келген эки максат бири-бирин басмак. Ошондуктан ар бир аткарылган максат өзүнчө объект болот.
Баасы — көп майда объект; аны иштетүүгө ыңгайлуу кылган нерсе ачкычтын түзүлүшү:
prefix/YYYY/MM/DD/channel/session-goal.json
Кампа бир күндү бир бөлүк катары окуйт, ал эми артка толуктоо сурам эмес, префиксти сканерлөө болот. Дата эмес, долбоор боюнча бөлгүңүз келсе, префикске канал IDсин кошуңуз.
Ар бир объект — JSONдун бир сабы
Атайылап чегинтилген эмес: бүт префикс объекттерди бирден ачпастан NDJSON катары окулат. Убакыт белгиси, долбоор, сеанс, кардар IDси, максат, маани, валюта жана жаздырууну ачкан шилтеме.
Бош маани нөл эмес, null болот
Акчалай мааниси жок максат null жазат. Кампада нөл чындыгында болбогон жыйынтыкка кошулмак — «сумма макулдашылган эмес» менен «нөл сумма» ортосундагы айырма экспортто сакталат.
4. Жооп 403 болсо, адегенде муну окуңуз
Четке кагылган S3 сурамы дээрлик эч нерсе айтпайт. Журналыбыздагы ката билдирүүсү S3төн көбүрөөк айтышынын себеби бар: аймак кол тамгага кирет. Туура эмес аймак да, туура эмес ачкыч да бирдей 403 берет. Демек, биринчи шек — ачкыч — учурлардын жарымында гана туура.
Үч нерсени ушул тартипте текшериңиз:
- Аймак, бакет көрсөткөндөй так. R2 жана Google Cloud Storage
autoкабыл алып, аны текшербейт; калгандары текшерет. - Префикске уруксат.
mouseplayer/менен чектелген ачкычmouseplayer-goals/ичине жаза албайт — resource ARN ичиндеги акыркы кыйгач сызык маанилүү. - Чекит, R2 жана S3 менен шайкеш сактагычтар үчүн. Хостту
https://жок киргизиңиз; биз аны баары бир алып салабыз, бирок кошулган жол башка бакетти билдирет.
Кирүү ачкычынын IDси атайылап ачык сакталат. Ал ар бир кол коюлган сурамда өтөт, ошондуктан аны шифрлөө коргоосуз эле эмгек болмок. Сыр шифрленет, кайра көрсөтүлбөйт жана тапшырма жүргөн ички кезекке эч качан кирбейт.
Бул жерде аталган бардык соода белгилери тиешелүү ээлерине таандык. MousePlayer бул провайдерлер менен ишкердик байланышта эмес.