Объект сактагычына экспорт

Ар бир аткарылган максат үчүн өзүңүзгө таандык бакетте бир JSON объекти. Бул — BigQueryден башка бардык маалымат кампаларына жол.

1. Бул кайсы боштукту толтурат

Буга чейин MousePlayerден маалымат кампасына так бир жол болгон жана ал Googleга алып барган. Snowflake, Redshift же ClickHouse колдонсоңуз, үчөө тең объект сактагычынан эркин окуса да, жол жок болчу.

Ошондуктан көпүрө ар бир кампага кезек менен эмес, объект сактагычына жазат. Snowflake S3төн, Redshift S3төн, ClickHouse S3төн, BigQuery Google Cloud Storageден алат. Бир экспорт баарына жетет.

КайдаКайрылуу ыкмасы
Amazon S3Signature Version 4, бакет хостто
Cloudflare R2Аккаунтуңуздун чекитине Signature Version 4 менен
Google Cloud StorageS3 менен шайкеш 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 бул провайдерлер менен ишкердик байланышта эмес.