> ## Documentation Index
> Fetch the complete documentation index at: https://documentation.onesignal.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Snowflake

> Kullanıcı davranışına dayalı otomatik Journey'leri ve kişiselleştirilmiş mesajlaşma kampanyalarını tetiklemek için Snowflake'ten OneSignal'e özel etkinlikleri senkronize edin.

export const PLATFORM_0 = "Snowflake"

export const DATA_TYPE_0 = "etkinlik verileri"

export const COLUMN_HEADER_0 = "Snowflake Sütunu"

export const PROPERTIES_DESCRIPTION_0 = "VARIANT/JSON olarak etkinlik meta verileri"

<Note>
  OneSignal'in eski entegrasyonu ile Snowflake kullanıyorsanız, lütfen [Snowflake Eski Entegrasyon](./snowflake-legacy) kılavuzuna bakın. Geçiş adımları için [Eski sürümden geçiş](#eski-sürümden-geçiş) bölümüne bakın.
</Note>

***

## Genel Bakış

OneSignal + Snowflake entegrasyonu iki güçlü veri işlem hattını destekler:

* **Çıkış**: Analiz ve raporlama için OneSignal'den Snowflake'e mesajlaşma etkinliği verilerini (push, e-posta, SMS, uygulama içi) otomatik olarak gönderin.
* **Giriş**: Otomatik Journey'leri ve kişiselleştirilmiş mesajlaşmayı tetiklemek için Snowflake veri kümelerinizden OneSignal'e özel kullanıcı etkinliklerini senkronize edin.

Bu entegrasyonlar birlikte, kullanıcı etkileşim verileri üzerinde tam kontrol sağlar—gelişmiş analitik ve gerçek zamanlı davranış odaklı mesajlaşmayı güçlendirir.

***

## Çıkış kurulumu

<Note>
  Bu şu anda erken erişim aşamasındadır.
  Erişim talep etmek için aşağıdaki bilgilerle `support@onesignal.com`'a başvurun:

  * Şirket adınız
  * OneSignal organizasyon ID'niz
  * Etkinleştirmek istediğiniz uygulama ID'leri
</Note>

Aşağıdakiler için mesajlaşma performansı ve etkileşim etkinliklerini (örneğin, gönderimler, açılmalar, tıklamalar) Snowflake'e gönderin:

* Özel panolar ve raporlar oluşturma
* Kanallar arasında teslimat ve etkileşim eğilimlerini takip etme
* Analiz için OneSignal verilerini diğer iş verileriyle birleştirme

**Gereksinimler**

* OneSignal **Professional Planı** (ücretsiz uygulamalarda mevcut değildir)
* [Snowflake hesabı](https://docs.snowflake.com/en/user-guide/getting-started-tutorial)
* Snowflake'te SECURITYADMIN veya ACCOUNTADMIN rolü (kurulum için)

**Kurulum Adımları**

### 1. Snowflake hesap bilgilerinizi toplayın

Entegrasyonu yapılandırmadan önce, Snowflake hesabınızdan aşağıdaki bilgileri toplayın:

* **Snowflake Host**: `<account_identifier>.snowflakecomputing.com` formatındaki hesap URL'niz
* **Veritabanı adı**: OneSignal'in etkinlik verilerini yazacağı veritabanı
* **Şema adı**: OneSignal tabloları için veritabanı içindeki şema (bu OneSignal tarafından otomatik olarak oluşturulacaktır)
* **Warehouse adı**: Veri yükleme işlemleri için kullanılacak warehouse

<Frame caption="Snowflake hesap tanımlayıcı konumu">
  <img src="https://mintcdn.com/onesignal/4HyuQPBpu-4xjmQC/images/docs/cf472c3-Screen_Shot_2023-06-27_at_4.08.19_PM.png?fit=max&auto=format&n=4HyuQPBpu-4xjmQC&q=85&s=ad89f70c336cfa9fc66849021cdab551" width="1554" height="620" data-path="images/docs/cf472c3-Screen_Shot_2023-06-27_at_4.08.19_PM.png" />
</Frame>

### 2. Snowflake'te kurulum betiğini çalıştırın

OneSignal için gerekli rolü, kullanıcıyı, warehouse'u ve veritabanını oluşturmak için Snowflake warehouse'unuzda aşağıdaki SQL betiğini çalıştırın:

```sql theme={null}
begin;

   -- create variables for user / role / warehouse / database (needs to be uppercase for objects)
   set role_name = 'ONESIGNAL_ROLE';
   set user_name = 'ONESIGNAL_USER';
   set warehouse_name = 'ONESIGNAL_WAREHOUSE';
   set database_name = 'ONESIGNAL';

   -- change role to securityadmin for user / role steps
   use role securityadmin;

   -- create role for onesignal
   create role if not exists identifier($role_name);
   grant role identifier($role_name) to role SYSADMIN;

   -- create a user for onesignal
   create user if not exists identifier($user_name)
   default_role = $role_name
   default_warehouse = $warehouse_name;

   grant role identifier($role_name) to user identifier($user_name);

   -- set binary_input_format to BASE64
   ALTER USER identifier($user_name) SET BINARY_INPUT_FORMAT = 'BASE64';

   -- set timestamp_input_format to AUTO for the user
   ALTER USER identifier($user_name) SET TIMESTAMP_INPUT_FORMAT = 'AUTO';

   -- change role to sysadmin for warehouse / database steps
   use role sysadmin;

   -- create a warehouse for onesignal
   create warehouse if not exists identifier($warehouse_name)
   warehouse_size = xsmall
   warehouse_type = standard
   auto_suspend = 60
   auto_resume = true
   initially_suspended = true;

   -- create database for onesignal
   create database if not exists identifier($database_name);

   -- grant onesignal role access to warehouse
   grant USAGE
   on warehouse identifier($warehouse_name)
   to role identifier($role_name);

   -- grant onesignal access to database
   grant CREATE SCHEMA, MONITOR, USAGE
   on database identifier($database_name)
   to role identifier($role_name);

 commit;
```

<Note>
  Adlandırma kurallarınıza uyacak şekilde betiğin üstündeki değişken değerlerini özelleştirebilirsiniz. Mevcut bir warehouse veya veritabanı kullanıyorsanız, betiği buna göre değiştirin.
</Note>

### 3. Kimlik doğrulama için anahtar çifti oluşturun

OneSignal, Snowflake hesabınıza güvenli erişim için anahtar çifti kimlik doğrulaması gerektirir. Anahtarları oluşturmak ve yapılandırmak için şu adımları izleyin:

<Steps>
  <Step title="Özel anahtar oluşturun">
    Özel anahtar oluşturmak için aşağıdaki komutlardan birini çalıştırın:

    **Şifrelenmemiş özel anahtar** (daha basit ancak daha az güvenli):

    ```bash theme={null}
    openssl genrsa 2048 | openssl pkcs8 -topk8 -inform PEM -out rsa_key.p8 -nocrypt
    ```

    **Şifrelenmiş özel anahtar** (üretim için önerilir):

    ```bash theme={null}
    openssl genrsa 2048 | openssl pkcs8 -topk8 -v2 aes256 -inform PEM -out rsa_key.p8
    ```

    Şifrelenmiş anahtar kullanıyorsanız, bir parola oluşturmanız istenecektir. Bu parolayı güvenli bir şekilde saklayın—OneSignal'i yapılandırırken ihtiyacınız olacak.
  </Step>

  <Step title="Genel anahtarı oluşturun">
    Özel anahtarınızdan genel anahtarı oluşturun:

    ```bash theme={null}
    openssl rsa -in rsa_key.p8 -pubout -out rsa_key.pub
    ```
  </Step>

  <Step title="Genel anahtarı Snowflake kullanıcınıza atayın">
    Genel anahtar dosyasının içeriğini kopyalayın (başlık ve alt bilgi satırlarını hariç tutarak), ardından Snowflake'te şu SQL komutunu çalıştırın:

    ```sql theme={null}
    ALTER USER ONESIGNAL_USER SET RSA_PUBLIC_KEY='<YOUR_PUBLIC_KEY_CONTENT>';
    ```

    `<YOUR_PUBLIC_KEY_CONTENT>` yerine anahtar içeriğini yazın (`-----BEGIN PUBLIC KEY-----` ve `-----END PUBLIC KEY-----` satırları olmadan).
  </Step>
</Steps>

<Warning>
  Özel anahtar dosyanızı güvenli bir şekilde saklayın. Bir sonraki adımda OneSignal'e sağlamanız gerekecek. Özel anahtarınızı asla herkese açık olarak paylaşmayın veya sürüm kontrolüne göndermyin.
</Warning>

### 4. OneSignal'i bağlayın

<Steps>
  <Step title="Entegrasyonu etkinleştirin">
    OneSignal'de **Data > Integrations > Snowflake** bölümüne gidin.
  </Step>

  <Step title="Detayları girin">
    * Host: `<your_account>.snowflakecomputing.com`
    * Port: İsteğe bağlı, varsayılan olarak `443`
    * Database: örneğin, `ONESIGNAL`
    * Role: İsteğe bağlı, belirtilmezse kullanıcının varsayılan rolü kullanılır
    * User: örneğin, `ONESIGNAL_USER`
    * Private Key: Özel anahtar dosyanızın içeriğini yapıştırın (`rsa_key.p8`)
    * Private Key Passphrase: İsteğe bağlı, yalnızca özel anahtarınız şifrelenmiş ise
    * Data processing location: Snowflake'e göndermeden önce verilerin işlendiği konum
  </Step>

  <Step title="Entegrasyonu yapılandırın">
    * **Sync Frequency:** her 15 dakikada bir kadar sık
    * **Schema/Table Names:** `onesignal_events_<app-id>` ve `message_events` olarak önceden ayarlanmış (düzenlenebilir)
    * **Event Types:** hangi etkinlikleri senkronize edeceğinizi seçin—tümünü veya yalnızca ihtiyacınız olanları seçin
  </Step>

  <Step title="Etkinlikleri seçin">
    Snowflake warehouse'unuzda almak istediğiniz etkinlikleri seçin.
  </Step>

  <Step title="Kurulumu tamamlayın">
    **Save** düğmesine tıklayın ve başarı onayını bekleyin
  </Step>
</Steps>

<Note>
  İlk veri senkronizasyonunun Snowflake'te görünmesi 15-30 dakika sürebilir.

  Beklerken, seçilen etkinlikleri tetiklemek için push, e-posta, uygulama içi veya SMS yoluyla mesajlar gönderin.
</Note>

### 5. Snowflake'te verileri görüntüleyin

İlk senkronizasyon tamamlandıktan sonra, OneSignal etkinlik verilerinizi sorgulayın:

```sql theme={null}
-- View recent message events
SELECT *
FROM <your-database>.<your-schema>.message_events
ORDER BY _CREATED DESC
LIMIT 100;
```

<Info>
  Eksik şemalar, izin hataları veya hatalı biçimlendirilmiş etkinlikler gibi sorunlarla karşılaşırsanız, `support@onesignal.com` ile iletişime geçin.
</Info>

## Mesaj etkinlikleri ve özellikleri

### Mesaj etkinlik türleri

**Özellik:** `event_kind`
**Tür:** `String`

Mesaj ve etkinlik türü (örneğin `message.push.received`, `message.push.sent`).

|   Mesaj Etkinliği (OneSignal)   |           `event_kind`           | Açıklama                                                                                      |
| :-----------------------------: | :------------------------------: | --------------------------------------------------------------------------------------------- |
|         Push Gönderildi         |        `message.push.sent`       | Push bildirimi başarıyla gönderildi.                                                          |
|           Push Alındı           |      `message.push.received`     | Teslim edilmiş push (bkz. [Onaylanmış Teslimat](/docs/en/confirmed-delivery)).                |
|          Push Tıklandı          |      `message.push.clicked`      | Kullanıcı push'u tıkladı.                                                                     |
|          Push Başarısız         |       `message.push.failed`      | Teslimat hatası. Mesaj raporlarına bakın.                                                     |
|    Push Abonelik İptal Edildi   |    `message.push.unsubscribed`   | Kullanıcı push aboneliğini iptal etti.                                                        |
|      Uygulama İçi Gösterim      |     `message.iam.impression`     | Uygulama içi mesaj gösterildi.                                                                |
|      Uygulama İçi Tıklandı      |       `message.iam.clicked`      | Uygulama içi mesaj tıklandı.                                                                  |
| Uygulama İçi Sayfa Görüntülendi |   `message.iam.page_displayed`   | Uygulama içi sayfa gösterildi.                                                                |
|        E-posta Gönderildi       |       `message.email.sent`       | E-posta teslim edildi.                                                                        |
|          E-posta Alındı         |     `message.email.received`     | E-posta alıcının posta sunucusu tarafından kabul edildi.                                      |
|          E-posta Açıldı         |      `message.email.opened`      | E-posta açıldı. Bkz. [E-posta Raporları](/docs/en/email-message-reports).                     |
|   E-posta Bağlantısı Tıklandı   |      `message.email.clicked`     | E-postadaki bağlantı tıklandı.                                                                |
|  E-posta Abonelik İptal Edildi  |   `message.email.unsubscribed`   | Alıcı aboneliğini iptal etti.                                                                 |
|  E-posta Spam Olarak Raporlandı | `message.email.reported_as_spam` | Spam olarak işaretlendi. Bkz. [E-posta Teslim Edilebilirliği](/docs/en/email-deliverability). |
|        E-posta Geri Döndü       |      `message.email.bounced`     | Kalıcı teslimat hatası nedeniyle geri döndü.                                                  |
|        E-posta Başarısız        |      `message.email.failed`      | Teslimat başarısız oldu.                                                                      |
|        E-posta Bastırıldı       |    `message.email.suppressed`    | Bastırma listesi nedeniyle bastırıldı.                                                        |
|          SMS Gönderildi         |        `message.sms.sent`        | SMS gönderildi.                                                                               |
|        SMS Teslim Edildi        |      `message.sms.delivered`     | SMS başarıyla teslim edildi.                                                                  |
|          SMS Başarısız          |       `message.sms.failed`       | SMS teslim edilemedi.                                                                         |
|       SMS Teslim Edilemedi      |     `message.sms.undelivered`    | SMS reddedildi veya ulaşılamıyor.                                                             |

### Etkinlik veri şeması

Bir kullanıcı tarafından oluşturulan her mesaj etkinliği için, aşağıdaki meta veriler kayda eklenecektir.

|                    Sütun Adı                    |        Tür        | Açıklama                                                                    |
| :---------------------------------------------: | :---------------: | --------------------------------------------------------------------------- |
|                    `event_id`                   |        UUID       | Etkinlik için benzersiz tanımlayıcı                                         |
|                `event_timestamp`                |     Timestamp     | Etkinlik gerçekleşme zamanı                                                 |
|                   `event_kind`                  |       String      | [Etkinlik Türü](#message-event-kinds)                                       |
|            `subscription_device_type`           |       String      | Cihaz türü (örneğin, iOS, Android, Web, E-posta, SMS)                       |
|                    `language`                   |       String      | Abonelik dil kodu                                                           |
|                    `version`                    |       String      | Entegrasyon sürümü                                                          |
|                   `device_os`                   |       String      | Cihaz işletim sistemi sürümü                                                |
|                  `device_type`                  |       Number      | Sayısal cihaz türü                                                          |
|                     `token`                     |       String      | Push token, telefon numarası veya e-posta                                   |
|                `subscription_id`                |        UUID       | Abonelik ID'si                                                              |
|                   `subscribed`                  |      Boolean      | Abonelik durumu                                                             |
|                  `onesignal_id`                 |        UUID       | OneSignal kullanıcı ID'si                                                   |
|                  `last_active`                  |       String      | Son aktif zaman damgası                                                     |
|                      `sdk`                      |       String      | OneSignal SDK sürümü                                                        |
|                  `external_id`                  |       String      | Entegrasyon kullanıcı ID'si ile eşleşmesi gereken harici kullanıcı ID'si    |
|                     `app_id`                    |        UUID       | OneSignal'dan uygulama ID'si                                                |
|                  `template_id`                  |        UUID       | Şablon ID'si (varsa)                                                        |
|                   `message_id`                  |        UUID       | Mesaj grubu/istek ID'si                                                     |
|                  `message_name`                 |       String      | Mesajın adı                                                                 |
|                 `message_title`                 |       String      | Mesaj başlığı (yalnızca İngilizce)                                          |
|                `message_contents`               |       String      | Kısaltılmış mesaj gövdesi (yalnızca İngilizce)                              |
|                 `failure_reason`                |       String      | Başarısızlık nedeni (push başarısızlık ve email başarısızlık olayları için) |
| `_created`, `_id`, `_index`, `_fivetran_synced` | *Dahili kullanım* | Fivetran senkronizasyon meta verileri                                       |

### Notlar

* Kaydetme/etkinleştirme sonrası senkronizasyonlar tamamlanması için ek 15-30 dakika alabilir.
* Devre dışı bırakma, devre dışı bırakıldıktan sonra hala bir son senkronizasyonla sonuçlanabilir.
* Verimli veri senkronizasyonunu sağlamak için sistemimiz otomatik olarak hazırlama veri kümelerini oluşturur ve yönetir. `fivetran_{iki rastgele kelime}_staging` gibi bir desenle adlandırılan bu veri kümeleri, ana şemanıza entegre edilmeden önce işleme sırasında geçici olarak veri depolar. Bu hazırlama veri kümeleri akıcı bir iş akışını sürdürmek için gereklidir ve otomatik olarak yeniden oluşturulacakları için silinmemelidir.

***

## Eski sürümden geçiş

Şu anda [eski Snowflake entegrasyonunu](./snowflake-legacy) kullanıyorsanız, bu bölüm temel farklılıkları ve sorgularınızı nasıl geçireceğinizi kapsar.

### Temel farklılıklar

| Özellik                    | Eski                                   | Yeni                                  |
| -------------------------- | -------------------------------------- | ------------------------------------- |
| **Senkronizasyon sıklığı** | 24 saat                                | 15 dakikada bir kadar sık             |
| **Veri sahipliği**         | Paylaşılan verilere salt okunur erişim | Doğrudan Snowflake hesabınıza yazılır |
| **Veri tutma**             | 30 gün                                 | Tutmayı siz kontrol edersiniz         |
| **Etkinlik seçimi**        | Tüm etkinlikler                        | Belirli etkinlik türlerini seçin      |

### Şema değişiklikleri

Yeni entegrasyon sütunları isteğe bağlı olarak oluşturur. Belirli bir alan için hiçbir etkinlik veri içermiyorsa, o sütun tablonuzda bulunmaz. Bu alan için veri görünürse, sütun otomatik olarak oluşturulur.

#### Sütun yeniden adlandırmaları

| Eski sütun                   | Yeni sütun         |
| ---------------------------- | ------------------ |
| `EVENT_IMPRESSION_TIMESTAMP` | `EVENT_TIMESTAMP`  |
| `SUBSCRIPTION_LANGUAGE`      | `LANGUAGE`         |
| `MESSAGE_BODY`               | `MESSAGE_CONTENTS` |

### Tip çıkarımı

Yeni entegrasyon otomatik tip çıkarımı kullanır. Bir sütundaki tüm değerler sayısal ise (örneğin, tüm `EXTERNAL_ID` değerleriniz sayı), sütun `NUMBER` olarak tiplenebilir. Daha sonra sayısal olmayan bir değer görünürse, sütun tipi `VARCHAR`'a yükseltilir.

Gerekirse açık dönüştürme kullanın:

```sql theme={null}
WHERE EXTERNAL_ID = '12345'::VARCHAR
```

### Sorguları geçirme

Mevcut sorguları geçirmek için:

1. Eski veritabanına yapılan referansları yeni Snowflake veritabanınızı işaret edecek şekilde güncelleyin
2. Yukarıda listelenen sütun yeniden adlandırmalarını hesaba katın
3. Gerektiğinde açık tip dönüştürme ekleyin

İsteğe bağlı olarak, yeni sütun adlarını eski adlara takma ad veren bir uyumluluk görünümü oluşturun:

```sql theme={null}
CREATE VIEW your_schema.message_events_compat AS
SELECT
  *,
  EVENT_TIMESTAMP AS EVENT_IMPRESSION_TIMESTAMP,
  LANGUAGE AS SUBSCRIPTION_LANGUAGE,
  MESSAGE_CONTENTS AS MESSAGE_BODY
FROM ONESIGNAL_DB.ONESIGNAL_EVENTS_XXXXX.MESSAGE_EVENTS;
```

<Note>
  `ONESIGNAL_DB.ONESIGNAL_EVENTS_XXXXX.MESSAGE_EVENTS` yerine gerçek veritabanı, şema ve tablo adlarınızı yazın.
</Note>

Eski veri paylaşımınızın bağlantısını kesmek için [snowflake-data-sharing@onesignal.com](mailto:snowflake-data-sharing@onesignal.com) ile iletişime geçin.

***

## Giriş kurulumu

Aşağıdakiler için Snowflake'ten OneSignal'e davranışsal etkinlik verileri alın:

* Kullanıcı etkinliğine dayalı Journey'leri tetikleme
* Davranışsal verilere dayalı mesajlaşmayı kişiselleştirme

**Gereksinimler**

* Giden mesaj etkinlikleri için [Event Streams](/docs/en/event-streams)'e erişim (Plan kısıtlamaları ve aşımlar geçerlidir)
* Gelen etkinlik senkronizasyonu için [Custom Events](/docs/en/custom-events)'e erişim (Plan kısıtlamaları ve aşımlar geçerlidir)
* [Güncellenmiş Hesap Planı](https://onesignal.com/pricing) (ücretsiz uygulamalarda mevcut değildir)

- Warehouse erişimi olan **Snowflake hesabı**
- Snowflake tablolarında veya görünümlerinde depolanan **Etkinlik verileri**
- OneSignal'den Snowflake örneğinize **Ağ bağlantısı**
- Uygun izinlere sahip **Kullanıcı kimlik bilgileri**

<Steps>
  <Step title="OneSignal için özel rol oluşturun">
    Snowflake en iyi uygulamalarını izleyerek bir rol hiyerarşisi oluşturun:

    ```sql theme={null}
    -- Create a role for the census user
    CREATE ROLE CENSUS_ROLE;

    -- Ensure the sysadmin role inherits any privileges the census role is granted
    GRANT ROLE CENSUS_ROLE TO ROLE SYSADMIN;
    ```
  </Step>

  <Step title="Özel warehouse oluşturun">
    OneSignal işlemleri için maliyet optimize edilmiş bir warehouse oluşturun:

    ```sql theme={null}
    -- Create a warehouse for the census role, optimizing for cost over performance
    CREATE WAREHOUSE CENSUS_WAREHOUSE WITH
        WAREHOUSE_SIZE = XSMALL
        AUTO_SUSPEND = 60
        AUTO_RESUME = TRUE
        INITIALLY_SUSPENDED = FALSE;

    GRANT USAGE ON WAREHOUSE CENSUS_WAREHOUSE TO ROLE CENSUS_ROLE;
    GRANT OPERATE ON WAREHOUSE CENSUS_WAREHOUSE TO ROLE CENSUS_ROLE;
    GRANT MONITOR ON WAREHOUSE CENSUS_WAREHOUSE TO ROLE CENSUS_ROLE;
    ```
  </Step>

  <Step title="Kullanıcı oluşturun ve izinleri verin">
    OneSignal kullanıcısını oluşturun ve etkinlik verilerinize erişim verin:

    ```sql theme={null}
    -- Create the census user
    CREATE USER CENSUS WITH
        DEFAULT_ROLE = CENSUS_ROLE
        DEFAULT_WAREHOUSE = CENSUS_WAREHOUSE
        PASSWORD = '<strong-unique-password>';

    GRANT ROLE CENSUS_ROLE TO USER CENSUS;

    -- Grant access to your event data (replace with your actual database/schema)
    GRANT USAGE ON DATABASE "<your-database>" TO ROLE CENSUS_ROLE;
    GRANT USAGE ON SCHEMA "<your-database>"."<your-schema>" TO ROLE CENSUS_ROLE;
    GRANT SELECT ON ALL TABLES IN SCHEMA "<your-database>"."<your-schema>" TO ROLE CENSUS_ROLE;
    GRANT SELECT ON FUTURE TABLES IN SCHEMA "<your-database>"."<your-schema>" TO ROLE CENSUS_ROLE;
    GRANT SELECT ON ALL VIEWS IN SCHEMA "<your-database>"."<your-schema>" TO ROLE CENSUS_ROLE;
    GRANT SELECT ON FUTURE VIEWS IN SCHEMA "<your-database>"."<your-schema>" TO ROLE CENSUS_ROLE;
    ```
  </Step>

  <Step title="Defter tutma veritabanı oluşturun (Advanced Sync Engine)">
    OneSignal'in senkronizasyon durumu yönetimi için özel bir veritabanı oluşturun:

    ```sql theme={null}
    -- Create a private bookkeeping database
    CREATE DATABASE "CENSUS";
    GRANT ALL PRIVILEGES ON DATABASE "CENSUS" TO ROLE CENSUS_ROLE;

    CREATE SCHEMA "CENSUS"."CENSUS";
    GRANT ALL PRIVILEGES ON SCHEMA "CENSUS"."CENSUS" TO ROLE CENSUS_ROLE;
    GRANT CREATE STAGE ON SCHEMA "CENSUS"."CENSUS" TO ROLE CENSUS_ROLE;
    ```

    <Warning>
      Basic Sync Engine veya salt okunur modu kullanıyorsanız bu adımı atlayın.
    </Warning>
  </Step>

  <Step title="Kimlik doğrulamayı yapılandırın">
    Gelişmiş güvenlik için anahtar çifti kimlik doğrulaması (önerilir) kurun:

    1. [Snowflake'in belgelerini](https://docs.snowflake.com/en/user-guide/key-pair-auth) takip ederek genel/özel anahtar çifti oluşturun
    2. Snowflake kullanıcınızda genel anahtarı yapılandırın
    3. OneSignal'in bağlantı ayarlarında özel anahtarı kullanın

    Alternatif olarak, parola kimlik doğrulaması kullanabilirsiniz (kullanımdan kaldırıldı - Kasım 2025'te engellenecek).
  </Step>

  <Step title="OneSignal'e bağlanın">
    OneSignal'da, **Veri > Entegrasyonlar**'a gidin ve **Entegrasyon Ekle**'ye tıklayın.

    **Snowflake**'i seçin ve aşağıdaki bağlantı detaylarını sağlayın:

    * **Account Name:** Snowflake hesap tanımlayıcınız (örneğin, `abc123.us-east-1`)
    * **Warehouse:** `CENSUS_WAREHOUSE`
    * **User:** `CENSUS`
    * **Database:** Etkinlik verisi veritabanı adınız
    * **Schema:** Etkinlik verisi şema adınız
    * **Authentication:** Key-pair (özel anahtar ve isteğe bağlı parola sağlayın)
  </Step>
</Steps>

***

### Etkinlik veri eşleştirme

{PLATFORM_0} {DATA_TYPE_0} verilerinizi OneSignal'ın özel etkinlik formatına eşleştirin:

| OneSignal Alanı | {COLUMN_HEADER_0} | Açıklama                       | Gerekli |
| --------------- | ----------------- | ------------------------------ | ------- |
| `name`          | `event_name`      | Etkinlik tanımlayıcı           | Evet    |
| `external_id`   | `user_id`         | Kullanıcı tanımlayıcı          | Evet    |
| `timestamp`     | `event_timestamp` | Etkinliğin gerçekleştiği zaman | Hayır   |
| `properties`    | `event_data`      | {PROPERTIES_DESCRIPTION_0}     | Hayır   |

#### Örnek Etkinlik Tablosu Şeması

```sql theme={null}
-- Example Snowflake event table
CREATE TABLE analytics.user_events (
    event_id STRING,
    event_name STRING NOT NULL,
    user_id STRING NOT NULL,
    event_timestamp TIMESTAMP_TZ DEFAULT CURRENT_TIMESTAMP(),
    event_properties VARIANT,
    session_id STRING,
    device_type STRING
);
```

#### SQL Sorgu Modu

Etkinlik verilerinizi dönüştürmek için özel SQL sorguları yazın:

```sql theme={null}
-- Example: Recent high-value events
SELECT
    event_name,
    user_id,
    event_timestamp,
    event_properties
FROM analytics.user_events
WHERE event_timestamp >= DATEADD(day, -7, CURRENT_TIMESTAMP())
    AND event_properties:value::NUMBER > 100
ORDER BY event_timestamp DESC;
```

### Gelişmiş yapılandırma

#### Warehouse Maliyetlerini Yönetme

* Maliyet optimizasyonu için X-Small warehouse boyutu kullanın
* Otomatik askıya alma (60 saniye) ve otomatik devam ettirmeyi yapılandırın
* Yoğun olmayan saatlerde senkronizasyonları planlayın
* Warehouse'u diğer toplu işleme sistemleriyle paylaşmayı düşünün

#### Canlı Senkronizasyon Desteği

Gerçek zamanlı etkinlik işleme için etkinlik tablolarınızda değişiklik takibini etkinleştirin:

```sql theme={null}
ALTER TABLE "analytics"."user_events" SET CHANGE_TRACKING = TRUE;
```

#### Ağ Güvenliği

Snowflake'in İzin Verilen IP'ler ağ politikasını kullanıyorsanız, OneSignal'in IP adreslerini izin verilenler listesine ekleyin. Mevcut IP aralıkları için OneSignal desteğiyle iletişime geçin.

***

## Sınırlamalar

* Karmaşık analitik sorgular warehouse performansını ve maliyetlerini etkileyebilir
* Kullanıcı/Parola kimlik doğrulaması Kasım 2025'te kullanımdan kaldırılacak
* CENSUS veritabanı yalnızca OneSignal işlemleri için ayrılmıştır

***

## SSS

### Hangi kimlik doğrulama yöntemini kullanmalıyım?

**Anahtar çifti kimlik doğrulaması** kullanın (önerilir). Kullanıcı/Parola kimlik doğrulaması Kasım 2025'ten itibaren Snowflake tarafından engellenecektir.

### Mevcut bir warehouse kullanabilir miyim?

Evet, maliyetleri optimize etmek için dbt veya Fivetran gibi diğer toplu işleme sistemleriyle bir warehouse paylaşabilirsiniz. Warehouse'un etkinlik işleme ihtiyaçlarınız için yeterli kapasiteye sahip olduğundan emin olun.

### Maliyetleri nasıl optimize edebilirim?

* X-Small warehouse boyutu kullanın
* Agresif otomatik askıya alma (60 saniye) yapılandırın
* Yoğun olmayan saatlerde senkronizasyonları planlayın
* Sürekli senkronizasyon yerine saatlik/günlük senkronizasyonlar kullanın

***
