Eksport storan objek

Satu objek JSON bagi setiap matlamat tercapai, dalam bucket milik anda. Inilah laluan ke setiap gudang data selain BigQuery.

1. Jurang yang diisi

Sehingga kini, hanya ada satu laluan daripada MousePlayer ke gudang data, dan ia menuju ke Google. Jika anda menggunakan Snowflake, Redshift atau ClickHouse, tiada laluan - walaupun ketiga-tiganya membaca daripada storan objek tanpa masalah.

Jadi penghubung menulis ke storan objek, bukan setiap gudang data satu demi satu. Snowflake mengambil daripada S3, Redshift mengambil daripada S3, ClickHouse mengambil daripada S3, dan BigQuery mengambil daripada Google Cloud Storage. Satu eksport mencapai semuanya.

DestinasiCara dialamatkan
Amazon S3Signature Version 4, bucket dalam hos
Cloudflare R2Signature Version 4 terhadap titik akhir akaun anda
Google Cloud Storagemelalui API serasi S3, dengan kunci HMAC
MinIO, Wasabi, Backblaze B2 dan lain-lainSignature Version 4 terhadap titik akhir anda
Azure Blob Storagepautan SAS bekas - langsung tiada penandatanganan di pihak kami

2. Mengapa Azure berbeza, dan mengapa itu lebih baik

Azure Blob tidak menggunakan Signature Version 4; ia menandatangani dengan SharedKey. Kami boleh membina skim penandatanganan kedua. Sebaliknya penghubung menerima pautan SAS bekas - URL yang anda jana dalam akaun storan sendiri, dengan tandatangan sudah terkandung di dalamnya.

Ini mengurangkan kod di pihak kami dan kepercayaan yang diperlukan di pihak anda. Kami langsung tidak pernah melihat kunci akaun: anda memberikan kebenaran yang anda skopkan sendiri, kepada satu bekas, dengan tarikh luput pilihan anda, boleh dibatalkan pada bila-bila masa tanpa menyentuh perkara lain.

Pengehadan sama wajar digunakan untuk S3: berikan kunci akses kebenaran menulis ke satu awalan ini sahaja. Kunci yang hanya boleh menambah ke mouseplayer/goals/ tidak boleh membaca bucket anda yang lain walaupun bocor.

3. Satu objek setiap matlamat, dan kuncinya tarikh

Storan objek tidak menyokong penambahan di hujung. Fail harian perlu ditulis semula sepenuhnya setiap kali, dan dua matlamat yang tiba serentak akan menulis ganti satu sama lain. Jadi setiap matlamat tercapai menjadi objek tersendiri.

Imbalannya banyak objek kecil; susun atur kunci menjadikannya boleh digunakan:

prefix/YYYY/MM/DD/channel/session-goal.json

Gudang data membaca satu hari sebagai satu partisi, dan pengisian semula ialah imbasan awalan, bukan pertanyaan. Jika anda mahu mempartisi mengikut projek, bukan tarikh, masukkan ID saluran ke dalam awalan.

Setiap objek ialah satu baris JSON

Sengaja tanpa inden, supaya seluruh awalan boleh dibaca sebagai NDJSON tanpa membuka objek satu demi satu. Cap masa, projek, sesi, ID pelanggan, matlamat, nilai, mata wang dan pautan yang memainkan semula rakaman.

Nilai kosong ialah null, bukan sifar

Matlamat tanpa nilai wang menulis null. Dalam gudang data, sifar akan dijumlahkan ke dalam jumlah yang tidak pernah wujud - perbezaan antara “tiada amaun dipersetujui” dan “amaun sifar” kekal dalam eksport.

4. Jika membalas 403, baca ini dahulu

Permintaan S3 yang ditolak hampir tidak memberitahu apa-apa, dan ada sebab mesej ralat dalam log kami menyatakan lebih banyak daripada S3: wilayah dimasukkan dalam tandatangan. Wilayah salah dan kunci salah menghasilkan 403 yang sama, jadi sangkaan jelas - kunci - hanya betul separuh masa.

Tiga perkara untuk diperiksa, mengikut susunan ini:

  • Wilayah, tepat seperti dilaporkan bucket. R2 dan Google Cloud Storage menerima auto dan tidak menyemaknya; yang lain menyemaknya.
  • Kebenaran awalan. Kunci yang diskopkan kepada mouseplayer/ tidak boleh menulis ke mouseplayer-goals/ - garis condong di hujung penting dalam ARN sumber.
  • Titik akhir, untuk R2 dan storan serasi S3. Tampal hos tanpa https://; kami membuangnya dalam kedua-dua keadaan, tetapi laluan yang ditambahkan padanya ialah bucket berbeza.

ID kunci akses sengaja disimpan sebagai teks jelas. Ia dihantar dalam setiap permintaan bertandatangan secara reka bentuk, jadi menyulitkannya ialah usaha tanpa perlindungan. Rahsia disulitkan, tidak pernah ditunjukkan semula dan tidak pernah memasuki barisan dalaman yang membawa tugas.

Semua tanda dagangan yang disebut di sini milik pemilik masing-masing. MousePlayer tidak mempunyai hubungan perniagaan dengan penyedia ini.