1
begin;
2
3
4
set role_name = 'SET_ROLE_NAME';
5
set user_name = 'SET_USER_NAME';
6
set warehouse_name = 'SET_WAREHOUSE';
7
set database_name = 'SET_DATABASE';
8
set schema_name = $database_name || '.PUBLIC';
9
set network_rule = $schema_name || '.SET_NETWORK_RULE_NAME';
10
set network_policy = 'SET_NETWORK_POLICY_NAME';
11
set profile_table = $schema_name || '.KLAVIYO_PROFILE';
12
set event_table = $schema_name || '.KLAVIYO_EVENT';
13
set metric_table = $schema_name || '.KLAVIYO_METRIC';
14
15
16
use role sysadmin;
17
18
19
create warehouse if not exists identifier($warehouse_name)
20
warehouse_size = xsmall
21
warehouse_type = standard
22
auto_suspend = 60
23
auto_resume = true
24
initially_suspended = true;
25
26
27
create database if not exists identifier($database_name);
28
29
create or replace TABLE identifier($profile_table) (
30
ID VARCHAR(32) NOT NULL,
31
EXTERNAL_ID VARCHAR(255),
32
EMAIL VARCHAR(255),
33
PHONE_NUMBER VARCHAR(255),
34
FIRST_NAME VARCHAR(255),
35
LAST_NAME VARCHAR(255),
36
TITLE VARCHAR(255),
37
ORGANIZATION VARCHAR(255),
38
PROPERTIES OBJECT,
39
IMAGE VARCHAR(255),
40
CREATED TIMESTAMP_NTZ(9),
41
UPDATED TIMESTAMP_NTZ(9),
42
LOCATION_ADDRESS1 VARCHAR(255),
43
LOCATION_ADDRESS2 VARCHAR(255),
44
LOCATION_CITY VARCHAR(255),
45
LOCATION_COUNTRY VARCHAR(255),
46
LOCATION_LATITUDE VARCHAR(255),
47
LOCATION_LONGITUDE VARCHAR(255),
48
LOCATION_REGION VARCHAR(255),
49
LOCATION_ZIP VARCHAR(255),
50
primary key (ID)
51
);
52
create or replace TABLE identifier($event_table) (
53
ID VARCHAR(32) NOT NULL,
54
METRIC_ID VARCHAR(255) NOT NULL,
55
PROFILE_ID VARCHAR(255),
56
EVENT_PROPERTIES OBJECT,
57
DATETIME TIMESTAMP_NTZ(9),
58
UUID VARCHAR(255),
59
primary key (ID)
60
);
61
create or replace TABLE identifier($metric_table) (
62
ID VARCHAR(6) NOT NULL,
63
NAME VARCHAR(255) NOT NULL,
64
INTEGRATION_ID VARCHAR(50) NOT NULL,
65
INTEGRATION_NAME VARCHAR(255) NOT NULL,
66
INTEGRATION_CATEGORY VARCHAR(255) NOT NULL,
67
CREATED TIMESTAMP_NTZ(9),
68
UPDATED TIMESTAMP_NTZ(9),
69
primary key (ID)
70
);
71
72
73
use role securityadmin;
74
75
76
grant usage on database identifier($database_name) to role securityadmin;
77
grant usage, create network rule on schema identifier($schema_name) to role securityadmin;
78
79
80
create network rule if not exists identifier($network_rule)
81
type = IPV4
82
value_list = ('184.72.183.187/32', '52.206.71.52/32', '3.227.146.32/32', '44.198.39.11/32', '35.172.58.121/32', '3.228.37.244/32', '54.88.219.8/32', '3.214.211.176/32')
83
comment = 'Klaviyo IP Ranges as of April 2025';
84
create network policy if not exists identifier($network_policy)
85
allowed_network_rule_list = ($network_rule);
86
87
88
create role if not exists identifier($role_name);
89
grant role identifier($role_name) to role SYSADMIN;
90
91
92
create user if not exists identifier($user_name)
93
type = SERVICE
94
network_policy = $network_policy
95
default_role = $role_name
96
default_warehouse = $warehouse_name
97
rsa_public_key = 'GENERATE_PUBLIC_KEY';
98
grant role identifier($role_name) to user identifier($user_name);
99
100
101
grant usage
102
on warehouse identifier($warehouse_name)
103
to role identifier($role_name);
104
105
106
grant CREATE SCHEMA, MONITOR, USAGE
107
on database identifier($database_name)
108
to role identifier($role_name);
109
grant usage on schema identifier($schema_name) to role identifier($role_name);
110
111
grant SELECT,INSERT,UPDATE,DELETE on table identifier($profile_table) to identifier($role_name);
112
grant SELECT,INSERT,UPDATE,DELETE on table identifier($event_table) to identifier($role_name);
113
grant SELECT,INSERT,UPDATE,DELETE on table identifier($metric_table) to identifier($role_name);
114
115
commit;
116