2 using System.Collections.Generic;
3 using System.Threading.Tasks;
14 [Trait(
"Category",
"Integration")]
15 [Trait(
"Category",
"Async")]
21 private async Task<string> SetupNumericTableAsync(
TestContext ctx,
int numRecords)
26 await ctx.
Kinetica.ExecuteSqlAsync($
"CREATE TABLE {tableName} (id INT NOT NULL, value DOUBLE, category VARCHAR(16), score INT, PRIMARY KEY (id))");
29 for (
int i = 0; i < numRecords; i++)
31 var category = (i % 3)
switch 39 await ctx.
Kinetica.ExecuteSqlAsync($
"INSERT INTO {tableName} (id, value, category, score) VALUES ({i}, {value}, '{category}', {score})");
52 using var ctx =
new TestContext(
"async_agg_unique_basic");
53 var tableName = await SetupNumericTableAsync(ctx, 30);
56 var resp = await ctx.Kinetica.AggregateUniqueAsync(tableName,
"category", 0, -9999,
new Dictionary<string, string>());
59 Assert.Equal(3, resp.data.Count);
65 using var ctx =
new TestContext(
"async_agg_unique_num");
66 var tableName = await SetupNumericTableAsync(ctx, 30);
69 var resp = await ctx.Kinetica.AggregateUniqueAsync(tableName,
"score", 0, -9999,
new Dictionary<string, string>());
72 Assert.Equal(10, resp.data.Count);
78 using var ctx =
new TestContext(
"async_agg_unique_limit");
79 var tableName = await SetupNumericTableAsync(ctx, 30);
82 var resp = await ctx.Kinetica.AggregateUniqueAsync(tableName,
"category", 0, 2,
new Dictionary<string, string>());
85 Assert.Equal(2, resp.data.Count);
91 using var ctx =
new TestContext(
"async_agg_unique_empty");
92 var tableName = await SetupNumericTableAsync(ctx, 0);
94 var resp = await ctx.Kinetica.AggregateUniqueAsync(tableName,
"category", 0, -9999,
new Dictionary<string, string>());
97 Assert.Empty(resp.data);
107 using var ctx =
new TestContext(
"async_agg_minmax_basic");
108 var tableName = await SetupNumericTableAsync(ctx, 100);
110 var resp = await ctx.Kinetica.AggregateMinMaxAsync(tableName,
"id",
new Dictionary<string, string>());
112 Assert.Equal(0.0, resp.min);
113 Assert.Equal(99.0, resp.max);
119 using var ctx =
new TestContext(
"async_agg_minmax_double");
120 var tableName = await SetupNumericTableAsync(ctx, 100);
122 var resp = await ctx.Kinetica.AggregateMinMaxAsync(tableName,
"value",
new Dictionary<string, string>());
125 Assert.Equal(0.0, resp.min);
126 Assert.Equal(148.5, resp.max);
132 using var ctx =
new TestContext(
"async_agg_minmax_single");
133 var tableName = await SetupNumericTableAsync(ctx, 1);
135 var resp = await ctx.Kinetica.AggregateMinMaxAsync(tableName,
"id",
new Dictionary<string, string>());
137 Assert.Equal(0.0, resp.min);
138 Assert.Equal(0.0, resp.max);
148 using var ctx =
new TestContext(
"async_agg_hist_basic");
149 var tableName = await SetupNumericTableAsync(ctx, 100);
152 var resp = await ctx.Kinetica.AggregateHistogramAsync(tableName,
"id", 0.0, 100.0, 10.0,
new Dictionary<string, string>());
154 Assert.Equal(10, resp.counts.Count);
156 foreach (var count
in resp.counts)
158 Assert.True(count >= 9.0 && count <= 11.0);
165 using var ctx =
new TestContext(
"async_agg_hist_uneven");
166 var tableName = await SetupNumericTableAsync(ctx, 50);
169 var resp = await ctx.Kinetica.AggregateHistogramAsync(tableName,
"score", 0.0, 10.0, 2.0,
new Dictionary<string, string>());
171 Assert.Equal(5, resp.counts.Count);
172 Assert.Equal(0.0, resp.start);
173 Assert.Equal(10.0, resp.end);
179 using var ctx =
new TestContext(
"async_agg_hist_empty");
180 var tableName = await SetupNumericTableAsync(ctx, 0);
182 var resp = await ctx.Kinetica.AggregateHistogramAsync(tableName,
"id", 0.0, 100.0, 10.0,
new Dictionary<string, string>());
185 foreach (var count
in resp.counts)
187 Assert.Equal(0.0, count);
194 using var ctx =
new TestContext(
"async_agg_hist_single");
195 var tableName = await SetupNumericTableAsync(ctx, 100);
198 var resp = await ctx.Kinetica.AggregateHistogramAsync(tableName,
"id", 0.0, 100.0, 100.0,
new Dictionary<string, string>());
200 Assert.Single(resp.counts);
201 Assert.Equal(100.0, resp.counts[0]);
211 using var ctx =
new TestContext(
"async_agg_stats_basic");
212 var tableName = await SetupNumericTableAsync(ctx, 100);
214 var resp = await ctx.Kinetica.AggregateStatisticsAsync(tableName,
"id",
"mean,stdv,count",
new Dictionary<string, string>());
217 Assert.True(Math.Abs(resp.stats[
"mean"] - 49.5) < 0.1);
218 Assert.Equal(100.0, resp.stats[
"count"]);
219 Assert.True(resp.stats.ContainsKey(
"stdv"));
225 using var ctx =
new TestContext(
"async_agg_stats_all");
226 var tableName = await SetupNumericTableAsync(ctx, 100);
228 var resp = await ctx.Kinetica.AggregateStatisticsAsync(tableName,
"value",
"mean,stdv,variance,skew,kurtosis,sum",
new Dictionary<string, string>());
230 Assert.True(resp.stats.ContainsKey(
"mean"));
231 Assert.True(resp.stats.ContainsKey(
"stdv"));
232 Assert.True(resp.stats.ContainsKey(
"variance"));
233 Assert.True(resp.stats.ContainsKey(
"sum"));
239 using var ctx =
new TestContext(
"async_agg_stats_empty");
240 var tableName = await SetupNumericTableAsync(ctx, 0);
242 var resp = await ctx.Kinetica.AggregateStatisticsAsync(tableName,
"id",
"mean,count",
new Dictionary<string, string>());
244 Assert.Equal(0.0, resp.stats[
"count"]);
254 using var ctx =
new TestContext(
"async_agg_groupby_count");
255 var tableName = await SetupNumericTableAsync(ctx, 30);
258 var resp = await ctx.Kinetica.AggregateGroupByAsync(tableName,
new List<string> {
"category" }, 0, -9999,
new Dictionary<string, string>());
261 Assert.Equal(3, resp.total_number_of_records);
262 Assert.Equal(3, resp.data.Count);
268 using var ctx =
new TestContext(
"async_agg_groupby_agg");
269 var tableName = await SetupNumericTableAsync(ctx, 30);
272 var resp = await ctx.Kinetica.AggregateGroupByAsync(tableName,
new List<string> {
"category" }, 0, -9999,
new Dictionary<string, string>());
275 Assert.Equal(3, resp.data.Count);
281 using var ctx =
new TestContext(
"async_agg_groupby_multi");
284 var tableName = ctx.QualifiedTable(
"multi_group_table");
285 await ctx.Kinetica.ExecuteSqlAsync($
"CREATE TABLE {tableName} (id INT NOT NULL, cat1 VARCHAR(16), cat2 VARCHAR(16), value DOUBLE, PRIMARY KEY (id))");
288 for (
int i = 0; i < 20; i++)
290 var cat1 = i < 10 ?
"X" :
"Y";
291 var cat2 = (i % 2) == 0 ?
"P" :
"Q";
292 await ctx.Kinetica.ExecuteSqlAsync($
"INSERT INTO {tableName} (id, cat1, cat2, value) VALUES ({i}, '{cat1}', '{cat2}', {(double)i})");
296 var resp = await ctx.Kinetica.AggregateGroupByAsync(tableName,
new List<string> {
"cat1",
"cat2" }, 0, -9999,
new Dictionary<string, string>());
299 Assert.Equal(4, resp.data.Count);
305 using var ctx =
new TestContext(
"async_agg_groupby_empty");
306 var tableName = await SetupNumericTableAsync(ctx, 0);
308 var resp = await ctx.Kinetica.AggregateGroupByAsync(tableName,
new List<string> {
"category" }, 0, -9999,
new Dictionary<string, string>());
311 Assert.Empty(resp.data);
317 using var ctx =
new TestContext(
"async_agg_groupby_limit");
318 var tableName = await SetupNumericTableAsync(ctx, 30);
321 var resp = await ctx.Kinetica.AggregateGroupByAsync(tableName,
new List<string> {
"category" }, 0, 2,
new Dictionary<string, string>());
324 Assert.Equal(2, resp.data.Count);
async Task TestAggregateHistogramUnevenDistributionAsync()
async Task TestAggregateMinMaxSingleValueAsync()
Test context that manages schema and cleanup for integration tests.
async Task TestAggregateHistogramEmptyTableAsync()
kinetica.Kinetica Kinetica
async Task TestAggregateUniqueBasicAsync()
async Task TestAggregateMinMaxBasicAsync()
async Task TestAggregateUniqueEmptyTableAsync()
async Task TestAggregateStatisticsAllStatsAsync()
Async tests for aggregate endpoints.
async Task TestAggregateUniqueNumericAsync()
async Task TestAggregateMinMaxDoubleColumnAsync()
string QualifiedTable(string tableName)
Get a qualified table name (schema.table).
async Task TestAggregateStatisticsBasicAsync()
async Task TestAggregateUniqueWithLimitAsync()
async Task TestAggregateGroupByWithAggregatesAsync()
async Task TestAggregateHistogramSingleBinAsync()
async Task TestAggregateGroupByCountAsync()
async Task TestAggregateHistogramBasicAsync()
async Task TestAggregateGroupByWithLimitAsync()
async Task TestAggregateGroupByEmptyTableAsync()
async Task TestAggregateStatisticsEmptyTableAsync()
async Task TestAggregateGroupByMultipleColumnsAsync()