dwh 0.1.0 → 0.1.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (50) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +5 -4
  3. data/Rakefile +1 -1
  4. data/docs/DWH/Adapters/Adapter.html +33 -27
  5. data/docs/DWH/Adapters/Athena.html +25 -21
  6. data/docs/DWH/Adapters/Boolean.html +1 -1
  7. data/docs/DWH/Adapters/Druid.html +18 -12
  8. data/docs/DWH/Adapters/DuckDb.html +29 -27
  9. data/docs/DWH/Adapters/MySql.html +25 -19
  10. data/docs/DWH/Adapters/OpenAuthorizable/ClassMethods.html +3 -6
  11. data/docs/DWH/Adapters/OpenAuthorizable.html +5 -10
  12. data/docs/DWH/Adapters/Postgres.html +27 -23
  13. data/docs/DWH/Adapters/Snowflake.html +39 -24
  14. data/docs/DWH/Adapters/SqlServer.html +27 -25
  15. data/docs/DWH/Adapters/Trino.html +30 -30
  16. data/docs/DWH/Adapters.html +1 -1
  17. data/docs/DWH/AuthenticationError.html +1 -1
  18. data/docs/DWH/Behaviors.html +6 -11
  19. data/docs/DWH/Capabilities.html +10 -26
  20. data/docs/DWH/Column.html +7 -15
  21. data/docs/DWH/ConfigError.html +1 -1
  22. data/docs/DWH/ConnectionError.html +1 -1
  23. data/docs/DWH/DWHError.html +1 -1
  24. data/docs/DWH/ExecutionError.html +1 -1
  25. data/docs/DWH/Factory.html +1 -1
  26. data/docs/DWH/Functions/Arrays.html +8 -8
  27. data/docs/DWH/Functions/Dates.html +5 -7
  28. data/docs/DWH/Functions/ExtractDatePart.html +13 -25
  29. data/docs/DWH/Functions/Nulls.html +3 -3
  30. data/docs/DWH/Functions.html +6 -9
  31. data/docs/DWH/Logger.html +3 -5
  32. data/docs/DWH/OAuthError.html +1 -1
  33. data/docs/DWH/Settings.html +6 -9
  34. data/docs/DWH/StreamingStats.html +2 -3
  35. data/docs/DWH/Table.html +14 -26
  36. data/docs/DWH/TableStats.html +1 -1
  37. data/docs/DWH/TokenExpiredError.html +1 -1
  38. data/docs/DWH/UnsupportedCapability.html +1 -1
  39. data/docs/DWH.html +1 -1
  40. data/docs/_index.html +1 -1
  41. data/docs/file.README.html +43 -48
  42. data/docs/file.adapters.html +318 -343
  43. data/docs/file.creating-adapters.html +347 -357
  44. data/docs/file.getting-started.html +143 -151
  45. data/docs/file.usage.html +257 -278
  46. data/docs/index.html +43 -48
  47. data/docs/top-level-namespace.html +1 -1
  48. data/lib/dwh/adapters.rb +2 -2
  49. data/lib/dwh/version.rb +1 -1
  50. metadata +2 -2
@@ -67,64 +67,61 @@
67
67
 
68
68
  <h3 id="basic-configuration">Basic Configuration</h3>
69
69
 
70
- <p><code>ruby
71
- postgres = DWH.create(:postgres, {
72
- host: 'localhost',
73
- port: 5432, # Default: 5432
74
- database: 'mydb',
75
- schema: 'public', # Default: 'public'
76
- username: 'user',
77
- password: 'password',
78
- client_name: 'My Application' # Default: 'DWH Ruby Gem'
79
- })
80
- </code></p>
70
+ <pre class="code ruby"><code class="ruby"><span class='id identifier rubyid_postgres'>postgres</span> <span class='op'>=</span> <span class='const'><span class='object_link'><a href="DWH.html" title="DWH (module)">DWH</a></span></span><span class='period'>.</span><span class='id identifier rubyid_create'><span class='object_link'><a href="DWH/Factory.html#create-instance_method" title="DWH::Factory#create (method)">create</a></span></span><span class='lparen'>(</span><span class='symbol'>:postgres</span><span class='comma'>,</span> <span class='lbrace'>{</span>
71
+ <span class='label'>host:</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>localhost</span><span class='tstring_end'>&#39;</span></span><span class='comma'>,</span>
72
+ <span class='label'>port:</span> <span class='int'>5432</span><span class='comma'>,</span> <span class='comment'># Default: 5432
73
+ </span> <span class='label'>database:</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>mydb</span><span class='tstring_end'>&#39;</span></span><span class='comma'>,</span>
74
+ <span class='label'>schema:</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>public</span><span class='tstring_end'>&#39;</span></span><span class='comma'>,</span> <span class='comment'># Default: &#39;public&#39;
75
+ </span> <span class='label'>username:</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>user</span><span class='tstring_end'>&#39;</span></span><span class='comma'>,</span>
76
+ <span class='label'>password:</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>password</span><span class='tstring_end'>&#39;</span></span><span class='comma'>,</span>
77
+ <span class='label'>client_name:</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>My Application</span><span class='tstring_end'>&#39;</span></span> <span class='comment'># Default: &#39;DWH Ruby Gem&#39;
78
+ </span><span class='rbrace'>}</span><span class='rparen'>)</span>
79
+ </code></pre>
81
80
 
82
81
  <h3 id="ssl-configuration">SSL Configuration</h3>
83
82
 
84
- <p>```ruby
85
- # Basic SSL
86
- postgres = DWH.create(:postgres, {
87
- host: ‘localhost’,
88
- database: ‘mydb’,
89
- username: ‘user’,
90
- password: ‘password’,
91
- ssl: true,
92
- extra_connection_params: {
93
- sslmode: ‘require’ # disable, prefer, require, verify-ca, verify-full
94
- }
95
- })</p>
96
-
97
- <h1 id="certificate-based-ssl">Certificate-based SSL</h1>
98
- <p>postgres = DWH.create(:postgres, {
99
- host: ‘localhost’,
100
- database: ‘mydb’,
101
- username: ‘user’,
102
- ssl: true,
103
- extra_connection_params: {
104
- sslmode: ‘verify-full’,
105
- sslrootcert: ‘/path/to/ca-cert.pem’,
106
- sslcert: ‘/path/to/client-cert.pem’,
107
- sslkey: ‘/path/to/client-key.pem’
108
- }
109
- })
110
- ```</p>
83
+ <pre class="code ruby"><code class="ruby"><span class='comment'># Basic SSL
84
+ </span><span class='id identifier rubyid_postgres'>postgres</span> <span class='op'>=</span> <span class='const'><span class='object_link'><a href="DWH.html" title="DWH (module)">DWH</a></span></span><span class='period'>.</span><span class='id identifier rubyid_create'><span class='object_link'><a href="DWH/Factory.html#create-instance_method" title="DWH::Factory#create (method)">create</a></span></span><span class='lparen'>(</span><span class='symbol'>:postgres</span><span class='comma'>,</span> <span class='lbrace'>{</span>
85
+ <span class='label'>host:</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>localhost</span><span class='tstring_end'>&#39;</span></span><span class='comma'>,</span>
86
+ <span class='label'>database:</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>mydb</span><span class='tstring_end'>&#39;</span></span><span class='comma'>,</span>
87
+ <span class='label'>username:</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>user</span><span class='tstring_end'>&#39;</span></span><span class='comma'>,</span>
88
+ <span class='label'>password:</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>password</span><span class='tstring_end'>&#39;</span></span><span class='comma'>,</span>
89
+ <span class='label'>ssl:</span> <span class='kw'>true</span><span class='comma'>,</span>
90
+ <span class='label'>extra_connection_params:</span> <span class='lbrace'>{</span>
91
+ <span class='label'>sslmode:</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>require</span><span class='tstring_end'>&#39;</span></span> <span class='comment'># disable, prefer, require, verify-ca, verify-full
92
+ </span> <span class='rbrace'>}</span>
93
+ <span class='rbrace'>}</span><span class='rparen'>)</span>
94
+
95
+ <span class='comment'># Certificate-based SSL
96
+ </span><span class='id identifier rubyid_postgres'>postgres</span> <span class='op'>=</span> <span class='const'><span class='object_link'><a href="DWH.html" title="DWH (module)">DWH</a></span></span><span class='period'>.</span><span class='id identifier rubyid_create'><span class='object_link'><a href="DWH/Factory.html#create-instance_method" title="DWH::Factory#create (method)">create</a></span></span><span class='lparen'>(</span><span class='symbol'>:postgres</span><span class='comma'>,</span> <span class='lbrace'>{</span>
97
+ <span class='label'>host:</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>localhost</span><span class='tstring_end'>&#39;</span></span><span class='comma'>,</span>
98
+ <span class='label'>database:</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>mydb</span><span class='tstring_end'>&#39;</span></span><span class='comma'>,</span>
99
+ <span class='label'>username:</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>user</span><span class='tstring_end'>&#39;</span></span><span class='comma'>,</span>
100
+ <span class='label'>ssl:</span> <span class='kw'>true</span><span class='comma'>,</span>
101
+ <span class='label'>extra_connection_params:</span> <span class='lbrace'>{</span>
102
+ <span class='label'>sslmode:</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>verify-full</span><span class='tstring_end'>&#39;</span></span><span class='comma'>,</span>
103
+ <span class='label'>sslrootcert:</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>/path/to/ca-cert.pem</span><span class='tstring_end'>&#39;</span></span><span class='comma'>,</span>
104
+ <span class='label'>sslcert:</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>/path/to/client-cert.pem</span><span class='tstring_end'>&#39;</span></span><span class='comma'>,</span>
105
+ <span class='label'>sslkey:</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>/path/to/client-key.pem</span><span class='tstring_end'>&#39;</span></span>
106
+ <span class='rbrace'>}</span>
107
+ <span class='rbrace'>}</span><span class='rparen'>)</span>
108
+ </code></pre>
111
109
 
112
110
  <h3 id="advanced-configuration">Advanced Configuration</h3>
113
111
 
114
- <p><code>ruby
115
- postgres = DWH.create(:postgres, {
116
- host: 'localhost',
117
- database: 'mydb',
118
- username: 'user',
119
- password: 'password',
120
- query_timeout: 3600, # seconds, default: 3600
121
- extra_connection_params: {
122
- application_name: 'Data Analysis Tool',
123
- connect_timeout: 10,
124
- options: '-c maintenance_work_mem=256MB'
125
- }
126
- })
127
- </code></p>
112
+ <pre class="code ruby"><code class="ruby"><span class='id identifier rubyid_postgres'>postgres</span> <span class='op'>=</span> <span class='const'><span class='object_link'><a href="DWH.html" title="DWH (module)">DWH</a></span></span><span class='period'>.</span><span class='id identifier rubyid_create'><span class='object_link'><a href="DWH/Factory.html#create-instance_method" title="DWH::Factory#create (method)">create</a></span></span><span class='lparen'>(</span><span class='symbol'>:postgres</span><span class='comma'>,</span> <span class='lbrace'>{</span>
113
+ <span class='label'>host:</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>localhost</span><span class='tstring_end'>&#39;</span></span><span class='comma'>,</span>
114
+ <span class='label'>database:</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>mydb</span><span class='tstring_end'>&#39;</span></span><span class='comma'>,</span>
115
+ <span class='label'>username:</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>user</span><span class='tstring_end'>&#39;</span></span><span class='comma'>,</span>
116
+ <span class='label'>password:</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>password</span><span class='tstring_end'>&#39;</span></span><span class='comma'>,</span>
117
+ <span class='label'>query_timeout:</span> <span class='int'>3600</span><span class='comma'>,</span> <span class='comment'># seconds, default: 3600
118
+ </span> <span class='label'>extra_connection_params:</span> <span class='lbrace'>{</span>
119
+ <span class='label'>application_name:</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>Data Analysis Tool</span><span class='tstring_end'>&#39;</span></span><span class='comma'>,</span>
120
+ <span class='label'>connect_timeout:</span> <span class='int'>10</span><span class='comma'>,</span>
121
+ <span class='label'>options:</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>-c maintenance_work_mem=256MB</span><span class='tstring_end'>&#39;</span></span>
122
+ <span class='rbrace'>}</span>
123
+ <span class='rbrace'>}</span><span class='rparen'>)</span>
124
+ </code></pre>
128
125
 
129
126
  <h2 id="snowflake">Snowflake</h2>
130
127
 
@@ -133,358 +130,337 @@ authentication methods: Personal Access Token, Key Pair, and OAuth.</p>
133
130
 
134
131
  <h3 id="basic-connection-with-personal-access-token">Basic connection with Personal Access Token</h3>
135
132
 
136
- <p>```ruby
137
- DWH.create(:snowflake, {
138
- auth_mode: ‘pat’,
139
- account_identifier: ‘myorg-myaccount’,
140
- personal_access_token: ‘your-token-here’,
141
- warehouse: ‘COMPUTE_WH’,
142
- database: ‘ANALYTICS’,
143
- schema: ‘PUBLIC’
144
- })</p>
133
+ <pre class="code ruby"><code class="ruby"><span class='const'><span class='object_link'><a href="DWH.html" title="DWH (module)">DWH</a></span></span><span class='period'>.</span><span class='id identifier rubyid_create'><span class='object_link'><a href="DWH/Factory.html#create-instance_method" title="DWH::Factory#create (method)">create</a></span></span><span class='lparen'>(</span><span class='symbol'>:snowflake</span><span class='comma'>,</span> <span class='lbrace'>{</span>
134
+ <span class='label'>auth_mode:</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>pat</span><span class='tstring_end'>&#39;</span></span><span class='comma'>,</span>
135
+ <span class='label'>account_identifier:</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>myorg-myaccount</span><span class='tstring_end'>&#39;</span></span><span class='comma'>,</span>
136
+ <span class='label'>personal_access_token:</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>your-token-here</span><span class='tstring_end'>&#39;</span></span><span class='comma'>,</span>
137
+ <span class='label'>warehouse:</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>COMPUTE_WH</span><span class='tstring_end'>&#39;</span></span><span class='comma'>,</span>
138
+ <span class='label'>database:</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>ANALYTICS</span><span class='tstring_end'>&#39;</span></span><span class='comma'>,</span>
139
+ <span class='label'>schema:</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>PUBLIC</span><span class='tstring_end'>&#39;</span></span>
140
+ <span class='rbrace'>}</span><span class='rparen'>)</span>
145
141
 
146
- <p>```</p>
142
+ </code></pre>
147
143
 
148
144
  <h3 id="connection-with-key-pair-authentication">Connection with Key Pair Authentication</h3>
149
145
 
150
- <p>```ruby
151
- DWH.create(:snowflake, {
152
- auth_mode: ‘kp’,
153
- account_identifier: ‘myorg-myaccount.us-east-1’,
154
- username: ‘john_doe’,
155
- private_key: ‘/path/to/private_key.pem’,
156
- warehouse: ‘COMPUTE_WH’,
157
- database: ‘ANALYTICS’
158
- })</p>
146
+ <pre class="code ruby"><code class="ruby"> <span class='const'><span class='object_link'><a href="DWH.html" title="DWH (module)">DWH</a></span></span><span class='period'>.</span><span class='id identifier rubyid_create'><span class='object_link'><a href="DWH/Factory.html#create-instance_method" title="DWH::Factory#create (method)">create</a></span></span><span class='lparen'>(</span><span class='symbol'>:snowflake</span><span class='comma'>,</span> <span class='lbrace'>{</span>
147
+ <span class='label'>auth_mode:</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>kp</span><span class='tstring_end'>&#39;</span></span><span class='comma'>,</span>
148
+ <span class='label'>account_identifier:</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>myorg-myaccount.us-east-1</span><span class='tstring_end'>&#39;</span></span><span class='comma'>,</span>
149
+ <span class='label'>username:</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>john_doe</span><span class='tstring_end'>&#39;</span></span><span class='comma'>,</span>
150
+ <span class='label'>private_key:</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>/path/to/private_key.pem</span><span class='tstring_end'>&#39;</span></span><span class='comma'>,</span>
151
+ <span class='label'>warehouse:</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>COMPUTE_WH</span><span class='tstring_end'>&#39;</span></span><span class='comma'>,</span>
152
+ <span class='label'>database:</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>ANALYTICS</span><span class='tstring_end'>&#39;</span></span>
153
+ <span class='rbrace'>}</span><span class='rparen'>)</span>
159
154
 
160
- <p>```</p>
155
+ </code></pre>
161
156
 
162
157
  <h3 id="connecting-with-oauth">Connecting with OAuth</h3>
163
158
 
164
159
  <p>This is the Snowflake OAuth mechanism. Not the External one. You must first create an OAuth security integration and apply to the releveant roles.
165
160
  Follow this <a href="https://docs.snowflake.com/en/user-guide/oauth-custom">document</a> for more.</p>
166
161
 
167
- <p><code>ruby
168
- adapter = DWH.create(:snowflake, {
169
- auth_mode: 'oauth',
170
- account_identifier: 'myorg-myaccount.us-east-1',
171
- oauth_client_id: '&lt;YOUR_CLIENT_ID&gt;',
172
- oauth_client_secret: '&lt;YOUR_CLIENT_SECRET&gt;',
173
- oauth_redirect_url: 'https://localhost:3030/some/path',
174
- database: 'ANALYTICS',
175
- client_name: 'myapp' # sent as user agent header value
176
- })
177
- </code></p>
162
+ <pre class="code ruby"><code class="ruby"><span class='id identifier rubyid_adapter'>adapter</span> <span class='op'>=</span> <span class='const'><span class='object_link'><a href="DWH.html" title="DWH (module)">DWH</a></span></span><span class='period'>.</span><span class='id identifier rubyid_create'><span class='object_link'><a href="DWH/Factory.html#create-instance_method" title="DWH::Factory#create (method)">create</a></span></span><span class='lparen'>(</span><span class='symbol'>:snowflake</span><span class='comma'>,</span> <span class='lbrace'>{</span>
163
+ <span class='label'>auth_mode:</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>oauth</span><span class='tstring_end'>&#39;</span></span><span class='comma'>,</span>
164
+ <span class='label'>account_identifier:</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>myorg-myaccount.us-east-1</span><span class='tstring_end'>&#39;</span></span><span class='comma'>,</span>
165
+ <span class='label'>oauth_client_id:</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>&lt;YOUR_CLIENT_ID&gt;</span><span class='tstring_end'>&#39;</span></span><span class='comma'>,</span>
166
+ <span class='label'>oauth_client_secret:</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>&lt;YOUR_CLIENT_SECRET&gt;</span><span class='tstring_end'>&#39;</span></span><span class='comma'>,</span>
167
+ <span class='label'>oauth_redirect_url:</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>https://localhost:3030/some/path</span><span class='tstring_end'>&#39;</span></span><span class='comma'>,</span>
168
+ <span class='label'>database:</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>ANALYTICS</span><span class='tstring_end'>&#39;</span></span><span class='comma'>,</span>
169
+ <span class='label'>client_name:</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>myapp</span><span class='tstring_end'>&#39;</span></span> <span class='comment'># sent as user agent header value
170
+ </span><span class='rbrace'>}</span><span class='rparen'>)</span>
171
+ </code></pre>
178
172
 
179
173
  <p>To successfully use OAuth you have to pass the adapter valid access and refresh tokens. Or, it can generate them from a valid authorization code.</p>
180
174
 
181
175
  <p>The typical flow is like so:</p>
182
176
 
183
177
  <ol>
184
- <li>Generate an authorization code by visiting the url generated by <code>adapter.authorization_url.</code> This will redirect to the configured <code>oauth_redirect_url.</code> You must be able to retrieve the <code>code</code> from there.</li>
185
- <li>Take the code from above and generate new access tokens: <code>adapter.generate_oauth_tokens(code)</code>. This will return Hash with access_token and refresh_token. You can cache and reuse this until the refresh_token gets expired. This method will also apply the token to the current adapter instance.</li>
186
- <li>You can apply an existing set of tokens like so:<code>adapter.apply_oauth_tokens(access_token: token, refresh_token: token, expires_at: Time.now)</code></li>
178
+ <li>Generate an authorization code by visiting the url generated by <code>adapter.authorization_url.</code> This will redirect to the configured <code>oauth_redirect_url.</code> You must be able to retrieve the <code>code</code> from there.</li>
179
+ <li>Take the code from above and generate new access tokens: <code>adapter.generate_oauth_tokens(code)</code>. This will return Hash with access_token and refresh_token. You can cache and reuse this until the refresh_token gets expired. This method will also apply the token to the current adapter instance.</li>
180
+ <li>You can apply an existing set of tokens like so:<code>adapter.apply_oauth_tokens(access_token: token, refresh_token: token, expires_at: Time.now)</code></li>
187
181
  </ol>
188
182
 
189
183
  <h2 id="mysql-adapter">MySQL Adapter</h2>
190
184
 
191
- <p>The MySQL adapter uses the <code>mysql2</code> gem. Note that MySQLs concept of database maps to schema in DWH.</p>
192
-
193
- <h3 id="basic-configuration-1">Basic Configuration</h3>
194
-
195
- <p><code>ruby
196
- mysql = DWH.create(:mysql, {
197
- host: '127.0.0.1', # Use 127.0.0.1 for local Docker instances
198
- port: 3306, # Default: 3306
199
- database: 'mydb',
200
- username: 'user',
201
- password: 'password',
202
- client_name: 'My Application' # Default: 'DWH Ruby Gem'
203
- })
204
- </code></p>
205
-
206
- <h3 id="ssl-configuration-1">SSL Configuration</h3>
207
-
208
- <p><code>ruby
209
- # Basic SSL
210
- mysql = DWH.create(:mysql, {
211
- host: '127.0.0.1',
212
- database: 'mydb',
213
- username: 'user',
214
- password: 'password',
215
- ssl: true, # Defaults ssl_mode to 'required'
216
- extra_connection_params: {
217
- ssl_mode: 'verify_identity', # disabled, preferred, required, verify_ca, verify_identity
218
- sslca: '/path/to/ca-cert.pem',
219
- sslcert: '/path/to/client-cert.pem',
220
- sslkey: '/path/to/client-key.pem'
221
- }
222
- })
223
- </code></p>
224
-
225
- <h3 id="advanced-configuration-1">Advanced Configuration</h3>
226
-
227
- <p><code>ruby
228
- mysql = DWH.create(:mysql, {
229
- host: 'mysql.example.com',
230
- database: 'analytics',
231
- username: 'analyst',
232
- password: 'password',
233
- client_name: "My App", # defaults to 'DWH Ruby Gem'
234
- query_timeout: 1800, # seconds, default: 3600
235
- extra_connection_params: {
236
- encoding: 'utf8mb4',
237
- read_timeout: 60,
238
- write_timeout: 60,
239
- connect_timeout: 10
240
- }
241
- })
242
- </code></p>
185
+ <p>The MySQL adapter uses the <code>mysql2</code> gem. Note that MySQL&#39;s concept of &quot;database&quot; maps to &quot;schema&quot; in DWH.</p>
186
+
187
+ <h3 id="basic-configuration">Basic Configuration</h3>
188
+
189
+ <pre class="code ruby"><code class="ruby"><span class='id identifier rubyid_mysql'>mysql</span> <span class='op'>=</span> <span class='const'><span class='object_link'><a href="DWH.html" title="DWH (module)">DWH</a></span></span><span class='period'>.</span><span class='id identifier rubyid_create'><span class='object_link'><a href="DWH/Factory.html#create-instance_method" title="DWH::Factory#create (method)">create</a></span></span><span class='lparen'>(</span><span class='symbol'>:mysql</span><span class='comma'>,</span> <span class='lbrace'>{</span>
190
+ <span class='label'>host:</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>127.0.0.1</span><span class='tstring_end'>&#39;</span></span><span class='comma'>,</span> <span class='comment'># Use 127.0.0.1 for local Docker instances
191
+ </span> <span class='label'>port:</span> <span class='int'>3306</span><span class='comma'>,</span> <span class='comment'># Default: 3306
192
+ </span> <span class='label'>database:</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>mydb</span><span class='tstring_end'>&#39;</span></span><span class='comma'>,</span>
193
+ <span class='label'>username:</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>user</span><span class='tstring_end'>&#39;</span></span><span class='comma'>,</span>
194
+ <span class='label'>password:</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>password</span><span class='tstring_end'>&#39;</span></span><span class='comma'>,</span>
195
+ <span class='label'>client_name:</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>My Application</span><span class='tstring_end'>&#39;</span></span> <span class='comment'># Default: &#39;DWH Ruby Gem&#39;
196
+ </span><span class='rbrace'>}</span><span class='rparen'>)</span>
197
+ </code></pre>
198
+
199
+ <h3 id="ssl-configuration">SSL Configuration</h3>
200
+
201
+ <pre class="code ruby"><code class="ruby"><span class='comment'># Basic SSL
202
+ </span><span class='id identifier rubyid_mysql'>mysql</span> <span class='op'>=</span> <span class='const'><span class='object_link'><a href="DWH.html" title="DWH (module)">DWH</a></span></span><span class='period'>.</span><span class='id identifier rubyid_create'><span class='object_link'><a href="DWH/Factory.html#create-instance_method" title="DWH::Factory#create (method)">create</a></span></span><span class='lparen'>(</span><span class='symbol'>:mysql</span><span class='comma'>,</span> <span class='lbrace'>{</span>
203
+ <span class='label'>host:</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>127.0.0.1</span><span class='tstring_end'>&#39;</span></span><span class='comma'>,</span>
204
+ <span class='label'>database:</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>mydb</span><span class='tstring_end'>&#39;</span></span><span class='comma'>,</span>
205
+ <span class='label'>username:</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>user</span><span class='tstring_end'>&#39;</span></span><span class='comma'>,</span>
206
+ <span class='label'>password:</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>password</span><span class='tstring_end'>&#39;</span></span><span class='comma'>,</span>
207
+ <span class='label'>ssl:</span> <span class='kw'>true</span><span class='comma'>,</span> <span class='comment'># Defaults ssl_mode to &#39;required&#39;
208
+ </span> <span class='label'>extra_connection_params:</span> <span class='lbrace'>{</span>
209
+ <span class='label'>ssl_mode:</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>verify_identity</span><span class='tstring_end'>&#39;</span></span><span class='comma'>,</span> <span class='comment'># disabled, preferred, required, verify_ca, verify_identity
210
+ </span> <span class='label'>sslca:</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>/path/to/ca-cert.pem</span><span class='tstring_end'>&#39;</span></span><span class='comma'>,</span>
211
+ <span class='label'>sslcert:</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>/path/to/client-cert.pem</span><span class='tstring_end'>&#39;</span></span><span class='comma'>,</span>
212
+ <span class='label'>sslkey:</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>/path/to/client-key.pem</span><span class='tstring_end'>&#39;</span></span>
213
+ <span class='rbrace'>}</span>
214
+ <span class='rbrace'>}</span><span class='rparen'>)</span>
215
+ </code></pre>
216
+
217
+ <h3 id="advanced-configuration">Advanced Configuration</h3>
218
+
219
+ <pre class="code ruby"><code class="ruby"><span class='id identifier rubyid_mysql'>mysql</span> <span class='op'>=</span> <span class='const'><span class='object_link'><a href="DWH.html" title="DWH (module)">DWH</a></span></span><span class='period'>.</span><span class='id identifier rubyid_create'><span class='object_link'><a href="DWH/Factory.html#create-instance_method" title="DWH::Factory#create (method)">create</a></span></span><span class='lparen'>(</span><span class='symbol'>:mysql</span><span class='comma'>,</span> <span class='lbrace'>{</span>
220
+ <span class='label'>host:</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>mysql.example.com</span><span class='tstring_end'>&#39;</span></span><span class='comma'>,</span>
221
+ <span class='label'>database:</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>analytics</span><span class='tstring_end'>&#39;</span></span><span class='comma'>,</span>
222
+ <span class='label'>username:</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>analyst</span><span class='tstring_end'>&#39;</span></span><span class='comma'>,</span>
223
+ <span class='label'>password:</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>password</span><span class='tstring_end'>&#39;</span></span><span class='comma'>,</span>
224
+ <span class='label'>client_name:</span> <span class='tstring'><span class='tstring_beg'>&quot;</span><span class='tstring_content'>My App</span><span class='tstring_end'>&quot;</span></span><span class='comma'>,</span> <span class='comment'># defaults to &#39;DWH Ruby Gem&#39;
225
+ </span> <span class='label'>query_timeout:</span> <span class='int'>1800</span><span class='comma'>,</span> <span class='comment'># seconds, default: 3600
226
+ </span> <span class='label'>extra_connection_params:</span> <span class='lbrace'>{</span>
227
+ <span class='label'>encoding:</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>utf8mb4</span><span class='tstring_end'>&#39;</span></span><span class='comma'>,</span>
228
+ <span class='label'>read_timeout:</span> <span class='int'>60</span><span class='comma'>,</span>
229
+ <span class='label'>write_timeout:</span> <span class='int'>60</span><span class='comma'>,</span>
230
+ <span class='label'>connect_timeout:</span> <span class='int'>10</span>
231
+ <span class='rbrace'>}</span>
232
+ <span class='rbrace'>}</span><span class='rparen'>)</span>
233
+ </code></pre>
243
234
 
244
235
  <h2 id="sql-server-adapter">SQL Server Adapter</h2>
245
236
 
246
237
  <p>The SQL Server adapter uses the <code>tiny_tds</code> gem and supports both on-premises and Azure SQL Server.</p>
247
238
 
248
- <h3 id="basic-configuration-2">Basic Configuration</h3>
239
+ <h3 id="basic-configuration">Basic Configuration</h3>
249
240
 
250
- <p><code>ruby
251
- sqlserver = DWH.create(:sqlserver, {
252
- host: 'localhost',
253
- port: 1433, # Default: 1433
254
- database: 'mydb',
255
- username: 'sa',
256
- password: 'password',
257
- client_name: 'My Application' # Default: 'DWH Ruby Gem'
258
- })
259
- </code></p>
241
+ <pre class="code ruby"><code class="ruby"><span class='id identifier rubyid_sqlserver'>sqlserver</span> <span class='op'>=</span> <span class='const'><span class='object_link'><a href="DWH.html" title="DWH (module)">DWH</a></span></span><span class='period'>.</span><span class='id identifier rubyid_create'><span class='object_link'><a href="DWH/Factory.html#create-instance_method" title="DWH::Factory#create (method)">create</a></span></span><span class='lparen'>(</span><span class='symbol'>:sqlserver</span><span class='comma'>,</span> <span class='lbrace'>{</span>
242
+ <span class='label'>host:</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>localhost</span><span class='tstring_end'>&#39;</span></span><span class='comma'>,</span>
243
+ <span class='label'>port:</span> <span class='int'>1433</span><span class='comma'>,</span> <span class='comment'># Default: 1433
244
+ </span> <span class='label'>database:</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>mydb</span><span class='tstring_end'>&#39;</span></span><span class='comma'>,</span>
245
+ <span class='label'>username:</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>sa</span><span class='tstring_end'>&#39;</span></span><span class='comma'>,</span>
246
+ <span class='label'>password:</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>password</span><span class='tstring_end'>&#39;</span></span><span class='comma'>,</span>
247
+ <span class='label'>client_name:</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>My Application</span><span class='tstring_end'>&#39;</span></span> <span class='comment'># Default: &#39;DWH Ruby Gem&#39;
248
+ </span><span class='rbrace'>}</span><span class='rparen'>)</span>
249
+ </code></pre>
260
250
 
261
251
  <h3 id="azure-sql-server">Azure SQL Server</h3>
262
252
 
263
- <p><code>ruby
264
- azure_sql = DWH.create(:sqlserver, {
265
- host: 'myserver.database.windows.net',
266
- database: 'mydb',
267
- username: 'myuser@myserver',
268
- password: 'password',
269
- azure: true,
270
- client_name: 'My Application'
271
- })
272
- </code></p>
273
-
274
- <h3 id="advanced-configuration-2">Advanced Configuration</h3>
275
-
276
- <p><code>ruby
277
- sqlserver = DWH.create(:sqlserver, {
278
- host: 'sql.example.com',
279
- database: 'analytics',
280
- username: 'analyst',
281
- password: 'password',
282
- query_timeout: 1800, # seconds, default: 3600
283
- extra_connection_params: {
284
- container: true, # For SQL Server running in containers
285
- use_utf16: false, # Character encoding options
286
- timeout: 60, # Connection timeout
287
- login_timeout: 60 # Login timeout
288
- }
289
- })
290
- </code></p>
253
+ <pre class="code ruby"><code class="ruby"><span class='id identifier rubyid_azure_sql'>azure_sql</span> <span class='op'>=</span> <span class='const'><span class='object_link'><a href="DWH.html" title="DWH (module)">DWH</a></span></span><span class='period'>.</span><span class='id identifier rubyid_create'><span class='object_link'><a href="DWH/Factory.html#create-instance_method" title="DWH::Factory#create (method)">create</a></span></span><span class='lparen'>(</span><span class='symbol'>:sqlserver</span><span class='comma'>,</span> <span class='lbrace'>{</span>
254
+ <span class='label'>host:</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>myserver.database.windows.net</span><span class='tstring_end'>&#39;</span></span><span class='comma'>,</span>
255
+ <span class='label'>database:</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>mydb</span><span class='tstring_end'>&#39;</span></span><span class='comma'>,</span>
256
+ <span class='label'>username:</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>myuser@myserver</span><span class='tstring_end'>&#39;</span></span><span class='comma'>,</span>
257
+ <span class='label'>password:</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>password</span><span class='tstring_end'>&#39;</span></span><span class='comma'>,</span>
258
+ <span class='label'>azure:</span> <span class='kw'>true</span><span class='comma'>,</span>
259
+ <span class='label'>client_name:</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>My Application</span><span class='tstring_end'>&#39;</span></span>
260
+ <span class='rbrace'>}</span><span class='rparen'>)</span>
261
+ </code></pre>
262
+
263
+ <h3 id="advanced-configuration">Advanced Configuration</h3>
264
+
265
+ <pre class="code ruby"><code class="ruby"><span class='id identifier rubyid_sqlserver'>sqlserver</span> <span class='op'>=</span> <span class='const'><span class='object_link'><a href="DWH.html" title="DWH (module)">DWH</a></span></span><span class='period'>.</span><span class='id identifier rubyid_create'><span class='object_link'><a href="DWH/Factory.html#create-instance_method" title="DWH::Factory#create (method)">create</a></span></span><span class='lparen'>(</span><span class='symbol'>:sqlserver</span><span class='comma'>,</span> <span class='lbrace'>{</span>
266
+ <span class='label'>host:</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>sql.example.com</span><span class='tstring_end'>&#39;</span></span><span class='comma'>,</span>
267
+ <span class='label'>database:</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>analytics</span><span class='tstring_end'>&#39;</span></span><span class='comma'>,</span>
268
+ <span class='label'>username:</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>analyst</span><span class='tstring_end'>&#39;</span></span><span class='comma'>,</span>
269
+ <span class='label'>password:</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>password</span><span class='tstring_end'>&#39;</span></span><span class='comma'>,</span>
270
+ <span class='label'>query_timeout:</span> <span class='int'>1800</span><span class='comma'>,</span> <span class='comment'># seconds, default: 3600
271
+ </span> <span class='label'>extra_connection_params:</span> <span class='lbrace'>{</span>
272
+ <span class='label'>container:</span> <span class='kw'>true</span><span class='comma'>,</span> <span class='comment'># For SQL Server running in containers
273
+ </span> <span class='label'>use_utf16:</span> <span class='kw'>false</span><span class='comma'>,</span> <span class='comment'># Character encoding options
274
+ </span> <span class='label'>timeout:</span> <span class='int'>60</span><span class='comma'>,</span> <span class='comment'># Connection timeout
275
+ </span> <span class='label'>login_timeout:</span> <span class='int'>60</span> <span class='comment'># Login timeout
276
+ </span> <span class='rbrace'>}</span>
277
+ <span class='rbrace'>}</span><span class='rparen'>)</span>
278
+ </code></pre>
291
279
 
292
280
  <h3 id="multi-database-operations">Multi-Database Operations</h3>
293
281
 
294
- <p>```ruby
295
- # List tables in another database
296
- tables = sqlserver.tables(catalog: ‘other_database’)</p>
282
+ <pre class="code ruby"><code class="ruby"><span class='comment'># List tables in another database
283
+ </span><span class='id identifier rubyid_tables'>tables</span> <span class='op'>=</span> <span class='id identifier rubyid_sqlserver'>sqlserver</span><span class='period'>.</span><span class='id identifier rubyid_tables'>tables</span><span class='lparen'>(</span><span class='label'>catalog:</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>other_database</span><span class='tstring_end'>&#39;</span></span><span class='rparen'>)</span>
297
284
 
298
- <h1 id="get-metadata-for-table-in-another-database">Get metadata for table in another database</h1>
299
- <p>metadata = sqlserver.metadata(other_database.dbo.my_table)
300
- # OR
301
- metadata = sqlserver.metadata(my_table’, catalog: other_database)
302
- ```</p>
285
+ <span class='comment'># Get metadata for table in another database
286
+ </span><span class='id identifier rubyid_metadata'>metadata</span> <span class='op'>=</span> <span class='id identifier rubyid_sqlserver'>sqlserver</span><span class='period'>.</span><span class='id identifier rubyid_metadata'>metadata</span><span class='lparen'>(</span><span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>other_database.dbo.my_table</span><span class='tstring_end'>&#39;</span></span><span class='rparen'>)</span>
287
+ <span class='comment'># OR
288
+ </span><span class='id identifier rubyid_metadata'>metadata</span> <span class='op'>=</span> <span class='id identifier rubyid_sqlserver'>sqlserver</span><span class='period'>.</span><span class='id identifier rubyid_metadata'>metadata</span><span class='lparen'>(</span><span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>my_table</span><span class='tstring_end'>&#39;</span></span><span class='comma'>,</span> <span class='label'>catalog:</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>other_database</span><span class='tstring_end'>&#39;</span></span><span class='rparen'>)</span>
289
+ </code></pre>
303
290
 
304
291
  <h2 id="duckdb-adapter">DuckDB Adapter</h2>
305
292
 
306
293
  <p>The DuckDB adapter uses the <code>ruby-duckdb</code> gem for in-process analytical queries. This requires DuckDB header files and library to already be installed.</p>
307
294
 
308
- <h3 id="basic-configuration-3">Basic Configuration</h3>
295
+ <h3 id="basic-configuration">Basic Configuration</h3>
309
296
 
310
- <p>```ruby
311
- # File-based database
312
- duckdb = DWH.create(:duckdb, {
313
- file: ‘/path/to/my/database.duckdb’,
314
- schema: ‘main’ # Default: ‘main’
315
- })</p>
297
+ <pre class="code ruby"><code class="ruby"><span class='comment'># File-based database
298
+ </span><span class='id identifier rubyid_duckdb'>duckdb</span> <span class='op'>=</span> <span class='const'><span class='object_link'><a href="DWH.html" title="DWH (module)">DWH</a></span></span><span class='period'>.</span><span class='id identifier rubyid_create'><span class='object_link'><a href="DWH/Factory.html#create-instance_method" title="DWH::Factory#create (method)">create</a></span></span><span class='lparen'>(</span><span class='symbol'>:duckdb</span><span class='comma'>,</span> <span class='lbrace'>{</span>
299
+ <span class='label'>file:</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>/path/to/my/database.duckdb</span><span class='tstring_end'>&#39;</span></span><span class='comma'>,</span>
300
+ <span class='label'>schema:</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>main</span><span class='tstring_end'>&#39;</span></span> <span class='comment'># Default: &#39;main&#39;
301
+ </span><span class='rbrace'>}</span><span class='rparen'>)</span>
316
302
 
317
- <h1 id="in-memory-database">In-memory database</h1>
318
- <p>duckdb = DWH.create(:duckdb, {
319
- file: ‘:memory:’
320
- })
321
- ```</p>
303
+ <span class='comment'># In-memory database
304
+ </span><span class='id identifier rubyid_duckdb'>duckdb</span> <span class='op'>=</span> <span class='const'><span class='object_link'><a href="DWH.html" title="DWH (module)">DWH</a></span></span><span class='period'>.</span><span class='id identifier rubyid_create'><span class='object_link'><a href="DWH/Factory.html#create-instance_method" title="DWH::Factory#create (method)">create</a></span></span><span class='lparen'>(</span><span class='symbol'>:duckdb</span><span class='comma'>,</span> <span class='lbrace'>{</span>
305
+ <span class='label'>file:</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>:memory:</span><span class='tstring_end'>&#39;</span></span>
306
+ <span class='rbrace'>}</span><span class='rparen'>)</span>
307
+ </code></pre>
322
308
 
323
309
  <h3 id="read-only-mode">Read-Only Mode</h3>
324
310
 
325
- <p><code>ruby
326
- duckdb = DWH.create(:duckdb, {
327
- file: '/path/to/readonly/database.duckdb',
328
- duck_config: {
329
- access_mode: 'READ_ONLY'
330
- }
331
- })
332
- </code></p>
333
-
334
- <h3 id="advanced-configuration-3">Advanced Configuration</h3>
335
-
336
- <p><code>ruby
337
- duckdb = DWH.create(:duckdb, {
338
- file: '/path/to/my/database.duckdb',
339
- duck_config: {
340
- access_mode: 'READ_WRITE',
341
- max_memory: '2GB',
342
- threads: 4,
343
- temp_directory: '/tmp/duckdb'
344
- }
345
- })
346
- </code></p>
311
+ <pre class="code ruby"><code class="ruby"><span class='id identifier rubyid_duckdb'>duckdb</span> <span class='op'>=</span> <span class='const'><span class='object_link'><a href="DWH.html" title="DWH (module)">DWH</a></span></span><span class='period'>.</span><span class='id identifier rubyid_create'><span class='object_link'><a href="DWH/Factory.html#create-instance_method" title="DWH::Factory#create (method)">create</a></span></span><span class='lparen'>(</span><span class='symbol'>:duckdb</span><span class='comma'>,</span> <span class='lbrace'>{</span>
312
+ <span class='label'>file:</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>/path/to/readonly/database.duckdb</span><span class='tstring_end'>&#39;</span></span><span class='comma'>,</span>
313
+ <span class='label'>duck_config:</span> <span class='lbrace'>{</span>
314
+ <span class='label'>access_mode:</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>READ_ONLY</span><span class='tstring_end'>&#39;</span></span>
315
+ <span class='rbrace'>}</span>
316
+ <span class='rbrace'>}</span><span class='rparen'>)</span>
317
+ </code></pre>
318
+
319
+ <h3 id="advanced-configuration">Advanced Configuration</h3>
320
+
321
+ <pre class="code ruby"><code class="ruby"><span class='id identifier rubyid_duckdb'>duckdb</span> <span class='op'>=</span> <span class='const'><span class='object_link'><a href="DWH.html" title="DWH (module)">DWH</a></span></span><span class='period'>.</span><span class='id identifier rubyid_create'><span class='object_link'><a href="DWH/Factory.html#create-instance_method" title="DWH::Factory#create (method)">create</a></span></span><span class='lparen'>(</span><span class='symbol'>:duckdb</span><span class='comma'>,</span> <span class='lbrace'>{</span>
322
+ <span class='label'>file:</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>/path/to/my/database.duckdb</span><span class='tstring_end'>&#39;</span></span><span class='comma'>,</span>
323
+ <span class='label'>duck_config:</span> <span class='lbrace'>{</span>
324
+ <span class='label'>access_mode:</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>READ_WRITE</span><span class='tstring_end'>&#39;</span></span><span class='comma'>,</span>
325
+ <span class='label'>max_memory:</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>2GB</span><span class='tstring_end'>&#39;</span></span><span class='comma'>,</span>
326
+ <span class='label'>threads:</span> <span class='int'>4</span><span class='comma'>,</span>
327
+ <span class='label'>temp_directory:</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>/tmp/duckdb</span><span class='tstring_end'>&#39;</span></span>
328
+ <span class='rbrace'>}</span>
329
+ <span class='rbrace'>}</span><span class='rparen'>)</span>
330
+ </code></pre>
347
331
 
348
332
  <h2 id="trino-adapter">Trino Adapter</h2>
349
333
 
350
334
  <p>The Trino adapter requires the <code>trino-client-ruby</code> gem and works with both Trino and Presto.</p>
351
335
 
352
- <h3 id="basic-configuration-4">Basic Configuration</h3>
353
-
354
- <p><code>ruby
355
- trino = DWH.create(:trino, {
356
- host: 'localhost',
357
- port: 8080, # Default: 8080
358
- catalog: 'hive', # Required
359
- schema: 'default', # Optional
360
- username: 'analyst',
361
- password: 'password', # Optional
362
- client_name: 'My Application' # Default: 'DWH Ruby Gem'
363
- })
364
- </code></p>
365
-
366
- <h3 id="ssl-configuration-2">SSL Configuration</h3>
367
-
368
- <p><code>ruby
369
- trino = DWH.create(:trino, {
370
- host: 'trino.example.com',
371
- port: 443,
372
- ssl: true, # will set {ssl: {verify: false}}
373
- catalog: 'hive',
374
- username: 'analyst',
375
- password: 'password',
376
- client_name: "My App"
377
- })
378
- </code></p>
336
+ <h3 id="basic-configuration">Basic Configuration</h3>
337
+
338
+ <pre class="code ruby"><code class="ruby"><span class='id identifier rubyid_trino'>trino</span> <span class='op'>=</span> <span class='const'><span class='object_link'><a href="DWH.html" title="DWH (module)">DWH</a></span></span><span class='period'>.</span><span class='id identifier rubyid_create'><span class='object_link'><a href="DWH/Factory.html#create-instance_method" title="DWH::Factory#create (method)">create</a></span></span><span class='lparen'>(</span><span class='symbol'>:trino</span><span class='comma'>,</span> <span class='lbrace'>{</span>
339
+ <span class='label'>host:</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>localhost</span><span class='tstring_end'>&#39;</span></span><span class='comma'>,</span>
340
+ <span class='label'>port:</span> <span class='int'>8080</span><span class='comma'>,</span> <span class='comment'># Default: 8080
341
+ </span> <span class='label'>catalog:</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>hive</span><span class='tstring_end'>&#39;</span></span><span class='comma'>,</span> <span class='comment'># Required
342
+ </span> <span class='label'>schema:</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>default</span><span class='tstring_end'>&#39;</span></span><span class='comma'>,</span> <span class='comment'># Optional
343
+ </span> <span class='label'>username:</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>analyst</span><span class='tstring_end'>&#39;</span></span><span class='comma'>,</span>
344
+ <span class='label'>password:</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>password</span><span class='tstring_end'>&#39;</span></span><span class='comma'>,</span> <span class='comment'># Optional
345
+ </span> <span class='label'>client_name:</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>My Application</span><span class='tstring_end'>&#39;</span></span> <span class='comment'># Default: &#39;DWH Ruby Gem&#39;
346
+ </span><span class='rbrace'>}</span><span class='rparen'>)</span>
347
+ </code></pre>
348
+
349
+ <h3 id="ssl-configuration">SSL Configuration</h3>
350
+
351
+ <pre class="code ruby"><code class="ruby"><span class='id identifier rubyid_trino'>trino</span> <span class='op'>=</span> <span class='const'><span class='object_link'><a href="DWH.html" title="DWH (module)">DWH</a></span></span><span class='period'>.</span><span class='id identifier rubyid_create'><span class='object_link'><a href="DWH/Factory.html#create-instance_method" title="DWH::Factory#create (method)">create</a></span></span><span class='lparen'>(</span><span class='symbol'>:trino</span><span class='comma'>,</span> <span class='lbrace'>{</span>
352
+ <span class='label'>host:</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>trino.example.com</span><span class='tstring_end'>&#39;</span></span><span class='comma'>,</span>
353
+ <span class='label'>port:</span> <span class='int'>443</span><span class='comma'>,</span>
354
+ <span class='label'>ssl:</span> <span class='kw'>true</span><span class='comma'>,</span> <span class='comment'># will set {ssl: {verify: false}}
355
+ </span> <span class='label'>catalog:</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>hive</span><span class='tstring_end'>&#39;</span></span><span class='comma'>,</span>
356
+ <span class='label'>username:</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>analyst</span><span class='tstring_end'>&#39;</span></span><span class='comma'>,</span>
357
+ <span class='label'>password:</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>password</span><span class='tstring_end'>&#39;</span></span><span class='comma'>,</span>
358
+ <span class='label'>client_name:</span> <span class='tstring'><span class='tstring_beg'>&quot;</span><span class='tstring_content'>My App</span><span class='tstring_end'>&quot;</span></span>
359
+ <span class='rbrace'>}</span><span class='rparen'>)</span>
360
+ </code></pre>
379
361
 
380
362
  <h3 id="advanced-configuration-with-headers">Advanced Configuration with Headers</h3>
381
363
 
382
- <p><code>ruby
383
- trino = DWH.create(:trino, {
384
- host: 'trino.example.com',
385
- port: 8080,
386
- catalog: 'delta_lake',
387
- schema: 'analytics',
388
- username: 'analyst',
389
- query_timeout: 1800, # seconds, default: 3600
390
- extra_connection_params: {
391
- http_headers: {
392
- 'X-Trino-User' =&gt; 'Real User Name',
393
- 'X-Trino-Source' =&gt; 'Analytics Dashboard',
394
- 'X-Forwarded-Request' =&gt; 'client-request-id'
395
- },
396
- ssl: {
397
- verify: true,
398
- }
399
- }
400
- })
401
- </code></p>
364
+ <pre class="code ruby"><code class="ruby"><span class='id identifier rubyid_trino'>trino</span> <span class='op'>=</span> <span class='const'><span class='object_link'><a href="DWH.html" title="DWH (module)">DWH</a></span></span><span class='period'>.</span><span class='id identifier rubyid_create'><span class='object_link'><a href="DWH/Factory.html#create-instance_method" title="DWH::Factory#create (method)">create</a></span></span><span class='lparen'>(</span><span class='symbol'>:trino</span><span class='comma'>,</span> <span class='lbrace'>{</span>
365
+ <span class='label'>host:</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>trino.example.com</span><span class='tstring_end'>&#39;</span></span><span class='comma'>,</span>
366
+ <span class='label'>port:</span> <span class='int'>8080</span><span class='comma'>,</span>
367
+ <span class='label'>catalog:</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>delta_lake</span><span class='tstring_end'>&#39;</span></span><span class='comma'>,</span>
368
+ <span class='label'>schema:</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>analytics</span><span class='tstring_end'>&#39;</span></span><span class='comma'>,</span>
369
+ <span class='label'>username:</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>analyst</span><span class='tstring_end'>&#39;</span></span><span class='comma'>,</span>
370
+ <span class='label'>query_timeout:</span> <span class='int'>1800</span><span class='comma'>,</span> <span class='comment'># seconds, default: 3600
371
+ </span> <span class='label'>extra_connection_params:</span> <span class='lbrace'>{</span>
372
+ <span class='label'>http_headers:</span> <span class='lbrace'>{</span>
373
+ <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>X-Trino-User</span><span class='tstring_end'>&#39;</span></span> <span class='op'>=&gt;</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>Real User Name</span><span class='tstring_end'>&#39;</span></span><span class='comma'>,</span>
374
+ <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>X-Trino-Source</span><span class='tstring_end'>&#39;</span></span> <span class='op'>=&gt;</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>Analytics Dashboard</span><span class='tstring_end'>&#39;</span></span><span class='comma'>,</span>
375
+ <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>X-Forwarded-Request</span><span class='tstring_end'>&#39;</span></span> <span class='op'>=&gt;</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>client-request-id</span><span class='tstring_end'>&#39;</span></span>
376
+ <span class='rbrace'>}</span><span class='comma'>,</span>
377
+ <span class='label'>ssl:</span> <span class='lbrace'>{</span>
378
+ <span class='label'>verify:</span> <span class='kw'>true</span><span class='comma'>,</span>
379
+ <span class='rbrace'>}</span>
380
+ <span class='rbrace'>}</span>
381
+ <span class='rbrace'>}</span><span class='rparen'>)</span>
382
+ </code></pre>
402
383
 
403
384
  <h2 id="apache-druid-adapter">Apache Druid Adapter</h2>
404
385
 
405
386
  <p>The Druid adapter uses HTTP API calls via the <code>faraday</code> gem for real-time analytics.</p>
406
387
 
407
- <h3 id="basic-configuration-5">Basic Configuration</h3>
388
+ <h3 id="basic-configuration">Basic Configuration</h3>
408
389
 
409
- <p><code>ruby
410
- druid = DWH.create(:druid, {
411
- protocol: 'http', # 'http' or 'https'
412
- host: 'localhost',
413
- port: 8080, # Default: 8081
414
- client_name: 'My Application' # Default: 'DWH Ruby Gem'
415
- })
416
- </code></p>
390
+ <pre class="code ruby"><code class="ruby"><span class='id identifier rubyid_druid'>druid</span> <span class='op'>=</span> <span class='const'><span class='object_link'><a href="DWH.html" title="DWH (module)">DWH</a></span></span><span class='period'>.</span><span class='id identifier rubyid_create'><span class='object_link'><a href="DWH/Factory.html#create-instance_method" title="DWH::Factory#create (method)">create</a></span></span><span class='lparen'>(</span><span class='symbol'>:druid</span><span class='comma'>,</span> <span class='lbrace'>{</span>
391
+ <span class='label'>protocol:</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>http</span><span class='tstring_end'>&#39;</span></span><span class='comma'>,</span> <span class='comment'># &#39;http&#39; or &#39;https&#39;
392
+ </span> <span class='label'>host:</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>localhost</span><span class='tstring_end'>&#39;</span></span><span class='comma'>,</span>
393
+ <span class='label'>port:</span> <span class='int'>8080</span><span class='comma'>,</span> <span class='comment'># Default: 8081
394
+ </span> <span class='label'>client_name:</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>My Application</span><span class='tstring_end'>&#39;</span></span> <span class='comment'># Default: &#39;DWH Ruby Gem&#39;
395
+ </span><span class='rbrace'>}</span><span class='rparen'>)</span>
396
+ </code></pre>
417
397
 
418
398
  <h3 id="https-with-basic-authentication">HTTPS with Basic Authentication</h3>
419
399
 
420
- <p><code>ruby
421
- druid = DWH.create(:druid, {
422
- protocol: 'https',
423
- host: 'druid.example.com',
424
- port: 443,
425
- basic_auth: 'base64_encoded_credentials', # Base64 encoded username:password
426
- query_timeout: 600, # seconds, default: 600
427
- open_timeout: 30 # connection timeout, default: nil
428
- })
429
- </code></p>
400
+ <pre class="code ruby"><code class="ruby"><span class='id identifier rubyid_druid'>druid</span> <span class='op'>=</span> <span class='const'><span class='object_link'><a href="DWH.html" title="DWH (module)">DWH</a></span></span><span class='period'>.</span><span class='id identifier rubyid_create'><span class='object_link'><a href="DWH/Factory.html#create-instance_method" title="DWH::Factory#create (method)">create</a></span></span><span class='lparen'>(</span><span class='symbol'>:druid</span><span class='comma'>,</span> <span class='lbrace'>{</span>
401
+ <span class='label'>protocol:</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>https</span><span class='tstring_end'>&#39;</span></span><span class='comma'>,</span>
402
+ <span class='label'>host:</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>druid.example.com</span><span class='tstring_end'>&#39;</span></span><span class='comma'>,</span>
403
+ <span class='label'>port:</span> <span class='int'>443</span><span class='comma'>,</span>
404
+ <span class='label'>basic_auth:</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>base64_encoded_credentials</span><span class='tstring_end'>&#39;</span></span><span class='comma'>,</span> <span class='comment'># Base64 encoded username:password
405
+ </span> <span class='label'>query_timeout:</span> <span class='int'>600</span><span class='comma'>,</span> <span class='comment'># seconds, default: 600
406
+ </span> <span class='label'>open_timeout:</span> <span class='int'>30</span> <span class='comment'># connection timeout, default: nil
407
+ </span><span class='rbrace'>}</span><span class='rparen'>)</span>
408
+ </code></pre>
430
409
 
431
410
  <h3 id="advanced-configuration-with-context">Advanced Configuration with Context</h3>
432
411
 
433
- <p><code>ruby
434
- druid = DWH.create(:druid, {
435
- protocol: 'https',
436
- host: 'druid.example.com',
437
- port: 8080,
438
- basic_auth: 'dXNlcjpwYXNz', # base64 for 'user:pass'
439
- extra_connection_params: {
440
- context: {
441
- user: 'analyst_name',
442
- team: 'data_engineering',
443
- priority: 10,
444
- useCache: true
445
- }
446
- }
447
- })
448
- </code></p>
412
+ <pre class="code ruby"><code class="ruby"><span class='id identifier rubyid_druid'>druid</span> <span class='op'>=</span> <span class='const'><span class='object_link'><a href="DWH.html" title="DWH (module)">DWH</a></span></span><span class='period'>.</span><span class='id identifier rubyid_create'><span class='object_link'><a href="DWH/Factory.html#create-instance_method" title="DWH::Factory#create (method)">create</a></span></span><span class='lparen'>(</span><span class='symbol'>:druid</span><span class='comma'>,</span> <span class='lbrace'>{</span>
413
+ <span class='label'>protocol:</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>https</span><span class='tstring_end'>&#39;</span></span><span class='comma'>,</span>
414
+ <span class='label'>host:</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>druid.example.com</span><span class='tstring_end'>&#39;</span></span><span class='comma'>,</span>
415
+ <span class='label'>port:</span> <span class='int'>8080</span><span class='comma'>,</span>
416
+ <span class='label'>basic_auth:</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>dXNlcjpwYXNz</span><span class='tstring_end'>&#39;</span></span><span class='comma'>,</span> <span class='comment'># base64 for &#39;user:pass&#39;
417
+ </span> <span class='label'>extra_connection_params:</span> <span class='lbrace'>{</span>
418
+ <span class='label'>context:</span> <span class='lbrace'>{</span>
419
+ <span class='label'>user:</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>analyst_name</span><span class='tstring_end'>&#39;</span></span><span class='comma'>,</span>
420
+ <span class='label'>team:</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>data_engineering</span><span class='tstring_end'>&#39;</span></span><span class='comma'>,</span>
421
+ <span class='label'>priority:</span> <span class='int'>10</span><span class='comma'>,</span>
422
+ <span class='label'>useCache:</span> <span class='kw'>true</span>
423
+ <span class='rbrace'>}</span>
424
+ <span class='rbrace'>}</span>
425
+ <span class='rbrace'>}</span><span class='rparen'>)</span>
426
+ </code></pre>
449
427
 
450
428
  <h2 id="aws-athena-adapter">AWS Athena Adapter</h2>
451
429
 
452
430
  <p>The Athean adapter requires the <code>aws-athena-sdk</code> gem and works with both Trino and Presto.</p>
453
431
 
454
- <h3 id="basic-configuration-6">Basic Configuration</h3>
455
-
456
- <p><code>ruby
457
- athena = DWH.create(:athena, {
458
- region: 'us-east-1',
459
- database: 'default',
460
- s3_output_location: 's3://my-athena-results-bucket/queries/',
461
- access_key_id: 'AKIAIOSFODNN7EXAMPLE',
462
- secret_access_key: 'wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY',
463
- catalog: 'hive', # optional will default to awsdatacatalog
464
- database: 'default', # Optional. Db or schema
465
- workgroup: 'my-dept-strata' # optional workgroup
466
- })
467
- </code></p>
468
-
469
- <h3 id="ssl-configuration-3">SSL Configuration</h3>
470
-
471
- <p><code>ruby
472
- athena = DWH.create(:athena, {
473
- region: 'us-east-1',
474
- database: 'default',
475
- s3_output_location: 's3://my-athena-results-bucket/queries/',
476
- access_key_id: 'AKIAIOSFODNN7EXAMPLE',
477
- secret_access_key: 'wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY',
478
- catalog: 'hive', # optional will default to awsdatacatalog
479
- database: 'default', # Optional. Db or schema
480
- workgroup: 'my-dept-strata', # optional workgroup
481
- extra_connection_params: {
482
- ssl_ca_directory: 'path/to/certs/'
483
- }
484
- })
485
- </code></p>
486
-
487
- <h3 id="advanced-configuration-with-headers-1">Advanced Configuration with Headers</h3>
432
+ <h3 id="basic-configuration">Basic Configuration</h3>
433
+
434
+ <pre class="code ruby"><code class="ruby"><span class='id identifier rubyid_athena'>athena</span> <span class='op'>=</span> <span class='const'><span class='object_link'><a href="DWH.html" title="DWH (module)">DWH</a></span></span><span class='period'>.</span><span class='id identifier rubyid_create'><span class='object_link'><a href="DWH/Factory.html#create-instance_method" title="DWH::Factory#create (method)">create</a></span></span><span class='lparen'>(</span><span class='symbol'>:athena</span><span class='comma'>,</span> <span class='lbrace'>{</span>
435
+ <span class='label'>region:</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>us-east-1</span><span class='tstring_end'>&#39;</span></span><span class='comma'>,</span>
436
+ <span class='label'>database:</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>default</span><span class='tstring_end'>&#39;</span></span><span class='comma'>,</span>
437
+ <span class='label'>s3_output_location:</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>s3://my-athena-results-bucket/queries/</span><span class='tstring_end'>&#39;</span></span><span class='comma'>,</span>
438
+ <span class='label'>access_key_id:</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>AKIAIOSFODNN7EXAMPLE</span><span class='tstring_end'>&#39;</span></span><span class='comma'>,</span>
439
+ <span class='label'>secret_access_key:</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY</span><span class='tstring_end'>&#39;</span></span><span class='comma'>,</span>
440
+ <span class='label'>catalog:</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>hive</span><span class='tstring_end'>&#39;</span></span><span class='comma'>,</span> <span class='comment'># optional will default to awsdatacatalog
441
+ </span> <span class='label'>database:</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>default</span><span class='tstring_end'>&#39;</span></span><span class='comma'>,</span> <span class='comment'># Optional. Db or schema
442
+ </span> <span class='label'>workgroup:</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>my-dept-strata</span><span class='tstring_end'>&#39;</span></span> <span class='comment'># optional workgroup
443
+ </span><span class='rbrace'>}</span><span class='rparen'>)</span>
444
+ </code></pre>
445
+
446
+ <h3 id="ssl-configuration">SSL Configuration</h3>
447
+
448
+ <pre class="code ruby"><code class="ruby"><span class='id identifier rubyid_athena'>athena</span> <span class='op'>=</span> <span class='const'><span class='object_link'><a href="DWH.html" title="DWH (module)">DWH</a></span></span><span class='period'>.</span><span class='id identifier rubyid_create'><span class='object_link'><a href="DWH/Factory.html#create-instance_method" title="DWH::Factory#create (method)">create</a></span></span><span class='lparen'>(</span><span class='symbol'>:athena</span><span class='comma'>,</span> <span class='lbrace'>{</span>
449
+ <span class='label'>region:</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>us-east-1</span><span class='tstring_end'>&#39;</span></span><span class='comma'>,</span>
450
+ <span class='label'>database:</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>default</span><span class='tstring_end'>&#39;</span></span><span class='comma'>,</span>
451
+ <span class='label'>s3_output_location:</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>s3://my-athena-results-bucket/queries/</span><span class='tstring_end'>&#39;</span></span><span class='comma'>,</span>
452
+ <span class='label'>access_key_id:</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>AKIAIOSFODNN7EXAMPLE</span><span class='tstring_end'>&#39;</span></span><span class='comma'>,</span>
453
+ <span class='label'>secret_access_key:</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY</span><span class='tstring_end'>&#39;</span></span><span class='comma'>,</span>
454
+ <span class='label'>catalog:</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>hive</span><span class='tstring_end'>&#39;</span></span><span class='comma'>,</span> <span class='comment'># optional will default to awsdatacatalog
455
+ </span> <span class='label'>database:</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>default</span><span class='tstring_end'>&#39;</span></span><span class='comma'>,</span> <span class='comment'># Optional. Db or schema
456
+ </span> <span class='label'>workgroup:</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>my-dept-strata</span><span class='tstring_end'>&#39;</span></span><span class='comma'>,</span> <span class='comment'># optional workgroup
457
+ </span> <span class='label'>extra_connection_params:</span> <span class='lbrace'>{</span>
458
+ <span class='label'>ssl_ca_directory:</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>path/to/certs/</span><span class='tstring_end'>&#39;</span></span>
459
+ <span class='rbrace'>}</span>
460
+ <span class='rbrace'>}</span><span class='rparen'>)</span>
461
+ </code></pre>
462
+
463
+ <h3 id="advanced-configuration-with-headers">Advanced Configuration with Headers</h3>
488
464
 
489
465
  <p>See full list of config options here: <a href="https://docs.aws.amazon.com/sdk-for-ruby/v2/api/Aws/Athena/Client.html#initialize-instance_method">athena-api</a></p>
490
466
 
@@ -492,19 +468,18 @@ athena = DWH.create(:athena, {
492
468
 
493
469
  <p>DWH validates configuration parameters at creation time:</p>
494
470
 
495
- <p><code>ruby
496
- begin
497
- adapter = DWH.create(:postgres, { host: 'localhost' }) # Missing required database
498
- rescue DWH::ConfigError =&gt; e
499
- puts "Configuration error: #{e.message}"
500
- end
501
- </code></p>
471
+ <pre class="code ruby"><code class="ruby"><span class='kw'>begin</span>
472
+ <span class='id identifier rubyid_adapter'>adapter</span> <span class='op'>=</span> <span class='const'><span class='object_link'><a href="DWH.html" title="DWH (module)">DWH</a></span></span><span class='period'>.</span><span class='id identifier rubyid_create'><span class='object_link'><a href="DWH/Factory.html#create-instance_method" title="DWH::Factory#create (method)">create</a></span></span><span class='lparen'>(</span><span class='symbol'>:postgres</span><span class='comma'>,</span> <span class='lbrace'>{</span> <span class='label'>host:</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>localhost</span><span class='tstring_end'>&#39;</span></span> <span class='rbrace'>}</span><span class='rparen'>)</span> <span class='comment'># Missing required database
473
+ </span><span class='kw'>rescue</span> <span class='const'><span class='object_link'><a href="DWH.html" title="DWH (module)">DWH</a></span></span><span class='op'>::</span><span class='const'><span class='object_link'><a href="DWH/ConfigError.html" title="DWH::ConfigError (class)">ConfigError</a></span></span> <span class='op'>=&gt;</span> <span class='id identifier rubyid_e'>e</span>
474
+ <span class='id identifier rubyid_puts'>puts</span> <span class='tstring'><span class='tstring_beg'>&quot;</span><span class='tstring_content'>Configuration error: </span><span class='embexpr_beg'>#{</span><span class='id identifier rubyid_e'>e</span><span class='period'>.</span><span class='id identifier rubyid_message'>message</span><span class='embexpr_end'>}</span><span class='tstring_end'>&quot;</span></span>
475
+ <span class='kw'>end</span>
476
+ </code></pre>
502
477
 
503
478
  <p>Each adapter defines required and optional parameters with validation rules. Check the adapter-specific sections above for the complete list of supported parameters.</p>
504
479
  </div></div>
505
480
 
506
481
  <div id="footer">
507
- Generated on Fri Aug 22 08:31:21 2025 by
482
+ Generated on Mon Aug 25 10:59:27 2025 by
508
483
  <a href="https://yardoc.org" title="Yay! A Ruby Documentation Tool" target="_parent">yard</a>
509
484
  0.9.37 (ruby-3.4.4).
510
485
  </div>