2 using System.Collections.Generic;
13 [Trait(
"Category",
"Integration")]
19 private string SetupNumericTable(
TestContext ctx,
int numRecords)
24 ctx.
Kinetica.
executeSql($
"CREATE TABLE {tableName} (id INT NOT NULL, value DOUBLE, category VARCHAR(16), score INT, PRIMARY KEY (id))");
27 for (
int i = 0; i < numRecords; i++)
29 var category = (i % 3)
switch 37 ctx.
Kinetica.
executeSql($
"INSERT INTO {tableName} (id, value, category, score) VALUES ({i}, {value}, '{category}', {score})");
50 using var ctx =
new TestContext(
"agg_unique_basic");
51 var tableName = SetupNumericTable(ctx, 30);
54 var resp = ctx.Kinetica.aggregateUnique(tableName,
"category", 0, -9999,
new Dictionary<string, string>());
57 Assert.Equal(3, resp.data.Count);
64 var tableName = SetupNumericTable(ctx, 30);
67 var resp = ctx.Kinetica.aggregateUnique(tableName,
"score", 0, -9999,
new Dictionary<string, string>());
70 Assert.Equal(10, resp.data.Count);
76 using var ctx =
new TestContext(
"agg_unique_limit");
77 var tableName = SetupNumericTable(ctx, 30);
80 var resp = ctx.Kinetica.aggregateUnique(tableName,
"category", 0, 2,
new Dictionary<string, string>());
83 Assert.Equal(2, resp.data.Count);
89 using var ctx =
new TestContext(
"agg_unique_empty");
90 var tableName = SetupNumericTable(ctx, 0);
92 var resp = ctx.Kinetica.aggregateUnique(tableName,
"category", 0, -9999,
new Dictionary<string, string>());
95 Assert.Empty(resp.data);
105 using var ctx =
new TestContext(
"agg_minmax_basic");
106 var tableName = SetupNumericTable(ctx, 100);
108 var resp = ctx.Kinetica.aggregateMinMax(tableName,
"id",
new Dictionary<string, string>());
110 Assert.Equal(0.0, resp.min);
111 Assert.Equal(99.0, resp.max);
117 using var ctx =
new TestContext(
"agg_minmax_double");
118 var tableName = SetupNumericTable(ctx, 100);
120 var resp = ctx.Kinetica.aggregateMinMax(tableName,
"value",
new Dictionary<string, string>());
123 Assert.Equal(0.0, resp.min);
124 Assert.Equal(148.5, resp.max);
130 using var ctx =
new TestContext(
"agg_minmax_single");
131 var tableName = SetupNumericTable(ctx, 1);
133 var resp = ctx.Kinetica.aggregateMinMax(tableName,
"id",
new Dictionary<string, string>());
135 Assert.Equal(0.0, resp.min);
136 Assert.Equal(0.0, resp.max);
147 var tableName = SetupNumericTable(ctx, 100);
150 var resp = ctx.Kinetica.aggregateHistogram(tableName,
"id", 0.0, 100.0, 10.0,
new Dictionary<string, string>());
152 Assert.Equal(10, resp.counts.Count);
154 foreach (var count
in resp.counts)
156 Assert.True(count >= 9.0 && count <= 11.0);
163 using var ctx =
new TestContext(
"agg_hist_uneven");
164 var tableName = SetupNumericTable(ctx, 50);
167 var resp = ctx.Kinetica.aggregateHistogram(tableName,
"score", 0.0, 10.0, 2.0,
new Dictionary<string, string>());
169 Assert.Equal(5, resp.counts.Count);
170 Assert.Equal(0.0, resp.start);
171 Assert.Equal(10.0, resp.end);
178 var tableName = SetupNumericTable(ctx, 0);
180 var resp = ctx.Kinetica.aggregateHistogram(tableName,
"id", 0.0, 100.0, 10.0,
new Dictionary<string, string>());
183 foreach (var count
in resp.counts)
185 Assert.Equal(0.0, count);
192 using var ctx =
new TestContext(
"agg_hist_single");
193 var tableName = SetupNumericTable(ctx, 100);
196 var resp = ctx.Kinetica.aggregateHistogram(tableName,
"id", 0.0, 100.0, 100.0,
new Dictionary<string, string>());
198 Assert.Single(resp.counts);
199 Assert.Equal(100.0, resp.counts[0]);
209 using var ctx =
new TestContext(
"agg_stats_basic");
210 var tableName = SetupNumericTable(ctx, 100);
212 var resp = ctx.Kinetica.aggregateStatistics(tableName,
"id",
"mean,stdv,count",
new Dictionary<string, string>());
215 Assert.True(Math.Abs(resp.stats[
"mean"] - 49.5) < 0.1);
216 Assert.Equal(100.0, resp.stats[
"count"]);
217 Assert.True(resp.stats.ContainsKey(
"stdv"));
224 var tableName = SetupNumericTable(ctx, 100);
226 var resp = ctx.Kinetica.aggregateStatistics(tableName,
"value",
"mean,stdv,variance,skew,kurtosis,sum",
new Dictionary<string, string>());
228 Assert.True(resp.stats.ContainsKey(
"mean"));
229 Assert.True(resp.stats.ContainsKey(
"stdv"));
230 Assert.True(resp.stats.ContainsKey(
"variance"));
231 Assert.True(resp.stats.ContainsKey(
"sum"));
237 using var ctx =
new TestContext(
"agg_stats_empty");
238 var tableName = SetupNumericTable(ctx, 0);
240 var resp = ctx.Kinetica.aggregateStatistics(tableName,
"id",
"mean,count",
new Dictionary<string, string>());
242 Assert.Equal(0.0, resp.stats[
"count"]);
252 using var ctx =
new TestContext(
"agg_groupby_count");
253 var tableName = SetupNumericTable(ctx, 30);
256 var resp = ctx.Kinetica.aggregateGroupBy(tableName,
new List<string> {
"category" }, 0, -9999,
new Dictionary<string, string>());
259 Assert.Equal(3, resp.total_number_of_records);
260 Assert.Equal(3, resp.data.Count);
266 using var ctx =
new TestContext(
"agg_groupby_agg");
267 var tableName = SetupNumericTable(ctx, 30);
270 var resp = ctx.Kinetica.aggregateGroupBy(tableName,
new List<string> {
"category" }, 0, -9999,
new Dictionary<string, string>());
273 Assert.Equal(3, resp.data.Count);
279 using var ctx =
new TestContext(
"agg_groupby_multi");
282 var tableName = ctx.QualifiedTable(
"multi_group_table");
283 ctx.Kinetica.executeSql($
"CREATE TABLE {tableName} (id INT NOT NULL, cat1 VARCHAR(16), cat2 VARCHAR(16), value DOUBLE, PRIMARY KEY (id))");
286 for (
int i = 0; i < 20; i++)
288 var cat1 = i < 10 ?
"X" :
"Y";
289 var cat2 = (i % 2) == 0 ?
"P" :
"Q";
290 ctx.Kinetica.executeSql($
"INSERT INTO {tableName} (id, cat1, cat2, value) VALUES ({i}, '{cat1}', '{cat2}', {(double)i})");
294 var resp = ctx.Kinetica.aggregateGroupBy(tableName,
new List<string> {
"cat1",
"cat2" }, 0, -9999,
new Dictionary<string, string>());
297 Assert.Equal(4, resp.data.Count);
303 using var ctx =
new TestContext(
"agg_groupby_empty");
304 var tableName = SetupNumericTable(ctx, 0);
306 var resp = ctx.Kinetica.aggregateGroupBy(tableName,
new List<string> {
"category" }, 0, -9999,
new Dictionary<string, string>());
309 Assert.Empty(resp.data);
315 using var ctx =
new TestContext(
"agg_groupby_limit");
316 var tableName = SetupNumericTable(ctx, 30);
319 var resp = ctx.Kinetica.aggregateGroupBy(tableName,
new List<string> {
"category" }, 0, 2,
new Dictionary<string, string>());
322 Assert.Equal(2, resp.data.Count);
void TestAggregateGroupByEmptyTable()
void TestAggregateMinMaxDoubleColumn()
void TestAggregateGroupByCount()
void TestAggregateMinMaxSingleValue()
void TestAggregateUniqueNumeric()
void TestAggregateGroupByWithAggregates()
ExecuteSqlResponse executeSql(ExecuteSqlRequest request_)
Execute a SQL statement (query, DML, or DDL).
void TestAggregateUniqueWithLimit()
void TestAggregateStatisticsEmptyTable()
void TestAggregateUniqueEmptyTable()
void TestAggregateUniqueBasic()
kinetica.Kinetica Kinetica
Test context that manages schema and cleanup for integration tests.
void TestAggregateHistogramSingleBin()
void TestAggregateGroupByWithLimit()
void TestAggregateStatisticsBasic()
void TestAggregateMinMaxBasic()
void TestAggregateHistogramBasic()
void TestAggregateGroupByMultipleColumns()
void TestAggregateHistogramUnevenDistribution()
Tests for aggregate endpoints.
string QualifiedTable(string tableName)
Get a qualified table name (schema.table).
void TestAggregateHistogramEmptyTable()
void TestAggregateStatisticsAllStats()