Pag-export sa Imbakan ng Object
Isang JSON object sa bawat natupad na goal, sa bucket na pag-aari ninyo. Ito ang daan sa lahat ng warehouse na hindi BigQuery.
1. Ang Puwang na Pinupunan Nito
Dati, iisa lamang ang daan mula sa MousePlayer patungo sa data warehouse, at sa Google iyon. Kung Snowflake, Redshift o ClickHouse ang gamit ninyo, wala - kahit maayos na bumabasa ang tatlo mula sa object storage.
Kaya sa object storage sumusulat ang bridge sa halip na sa bawat warehouse. Kumukuha mula sa S3 ang Snowflake, Redshift at ClickHouse, at mula sa Google Cloud Storage ang BigQuery. Naaabot ng iisang export ang lahat.
| Saan | Paano Ina-address |
|---|---|
| Amazon S3 | Signature Version 4, nasa host ang bucket |
| Cloudflare R2 | Signature Version 4 sa endpoint ng inyong account |
| Google Cloud Storage | sa S3-compatible API nito, gamit ang HMAC key |
| MinIO, Wasabi, Backblaze B2 at iba pa | Signature Version 4 sa inyong endpoint |
| Azure Blob Storage | container SAS link - walang pagpirma sa aming panig |
2. Bakit Naiiba ang Azure at Bakit Mas Mainam Iyon
Hindi gumagamit ng Signature Version 4 ang Azure Blob; SharedKey ang pangpirma nito. Maaari sana kaming gumawa ng ikalawang paraan ng pagpirma. Sa halip, tumatanggap ang bridge ng container SAS link - URL na binubuo ninyo sa sarili ninyong storage account, na may pirma na sa loob.
Mas kaunting code sa amin at mas kaunting tiwalang kailangan sa inyo. Hindi namin nakikita ang account key: pahintulot ang ibinibigay ninyo na kayo ang nagtakda ng saklaw, para sa iisang container, may expiry na pinili ninyo, at mababawi anumang oras nang walang ibang binabago.
Mainam ding limitahan ang S3: bigyan lamang ang access key ng pahintulot na sumulat sa iisang prefix na ito. Ang key na maaari lamang magdagdag sa mouseplayer/goals/ ay hindi makababasa ng iba ninyong bucket kahit tumagas.
3. Isang Object sa Bawat Goal, at Petsa ang Key
Walang append ang object storage. Kailangang isulat muli nang buo ang pang-araw-araw na file sa bawat pagkakataon, at magpapatungan ang dalawang goal na sabay dumating. Kaya may sariling object ang bawat natupad na goal.
Kapalit nito ang maraming maliliit na object; ang ayos ng key ang dahilan kung bakit nagagamit ito:
prefix/YYYY/MM/DD/channel/session-goal.json
Binabasa ng warehouse ang isang araw bilang isang partition, at prefix scan ang backfill sa halip na query. Kung ayon sa project sa halip na petsa ang nais ninyong partition, ilagay ang channel ID sa prefix.
Isang linya ng JSON ang bawat object
Sadyang walang indentation, upang mabasa ang buong prefix bilang NDJSON nang hindi binubuksan ang mga object nang paisa-isa. Timestamp, project, session, customer ID, goal, halaga, currency at link para panoorin ang recording.
Null ang Walang Halaga, Hindi Zero
Nagsusulat ng null ang goal na walang halagang pera. Sa warehouse, masasama ang zero sa kabuuang hindi naman umiiral - nananatili sa export ang pagkakaiba ng “walang napagkasunduang halaga” at “halagang zero”.
4. Kung 403 ang Sagot, Basahin Muna Ito
Halos walang sinasabi ang tinanggihang S3 request, at may dahilan kung bakit mas malinaw ang error sa aming log kaysa sa S3: kasama sa pirma ang rehiyon. Parehong 403 ang maling rehiyon at maling key, kaya kalahati lamang ng pagkakataon tama ang unang hinala - ang key.
Suriin ang tatlong bagay sa ganitong ayos:
- Ang rehiyon, eksakto gaya ng iniulat ng bucket. Tumatanggap ang R2 at Google Cloud Storage ng
autoat hindi ito sinusuri; sinusuri ito ng lahat ng iba. - Ang pahintulot sa prefix. Hindi makasusulat ang key na may saklaw na
mouseplayer/samouseplayer-goals/- mahalaga ang hulihang slash sa resource ARN. - Ang endpoint, para sa R2 at mga S3-compatible na storage. Idikit ang host nang walang
https://; inaalis namin iyon sa alinmang paraan, ngunit ibang bucket ang path na idinugtong dito.
Sadyang malinaw na iniimbak ang access key ID. Kasama talaga ito sa bawat pinirmahang request, kaya walang dagdag na proteksiyon ang pag-encrypt dito. Naka-encrypt ang secret, hindi na ipinapakita, at hindi kailanman pumapasok sa internal na queue ng gawain.
Ang lahat ng trademark dito ay pag-aari ng kani-kanilang may-ari. Walang ugnayang pangnegosyo ang MousePlayer sa mga provider na ito.