This is an automated email from the ASF dual-hosted git repository. alamb pushed a commit to branch main in repository https://gitbox.apache.org/repos/asf/datafusion.git
The following commit(s) were added to refs/heads/main by this push:
new a3e1c3d055 Implement TPCH substrait integration teset, support tpch_3
(#11298)
a3e1c3d055 is described below
commit a3e1c3d055a2f4b6d63824ba021ea532d9c83558
Author: Lordworms <[email protected]>
AuthorDate: Sat Jul 6 04:37:09 2024 -0700
Implement TPCH substrait integration teset, support tpch_3 (#11298)
---
.../substrait/tests/cases/consumer_integration.rs | 55 +-
.../substrait/tests/testdata/tpch/customer.csv | 2 +
.../substrait/tests/testdata/tpch/orders.csv | 2 +
.../testdata/tpch_substrait_plans/query_3.json | 851 +++++++++++++++++++++
4 files changed, 903 insertions(+), 7 deletions(-)
diff --git a/datafusion/substrait/tests/cases/consumer_integration.rs
b/datafusion/substrait/tests/cases/consumer_integration.rs
index 58f2fc9009..a8bbeb444a 100644
--- a/datafusion/substrait/tests/cases/consumer_integration.rs
+++ b/datafusion/substrait/tests/cases/consumer_integration.rs
@@ -41,6 +41,17 @@ mod tests {
.await
}
+ async fn create_context_tpch1() -> Result<SessionContext> {
+ let ctx = SessionContext::new();
+ register_csv(
+ &ctx,
+ "FILENAME_PLACEHOLDER_0",
+ "tests/testdata/tpch/lineitem.csv",
+ )
+ .await?;
+ Ok(ctx)
+ }
+
async fn create_context_tpch2() -> Result<SessionContext> {
let ctx = SessionContext::new();
@@ -63,14 +74,19 @@ mod tests {
Ok(ctx)
}
- async fn create_context_tpch1() -> Result<SessionContext> {
+ async fn create_context_tpch3() -> Result<SessionContext> {
let ctx = SessionContext::new();
- register_csv(
- &ctx,
- "FILENAME_PLACEHOLDER_0",
- "tests/testdata/tpch/lineitem.csv",
- )
- .await?;
+
+ let registrations = vec![
+ ("FILENAME_PLACEHOLDER_0", "tests/testdata/tpch/customer.csv"),
+ ("FILENAME_PLACEHOLDER_1", "tests/testdata/tpch/orders.csv"),
+ ("FILENAME_PLACEHOLDER_2", "tests/testdata/tpch/lineitem.csv"),
+ ];
+
+ for (table_name, file_path) in registrations {
+ register_csv(&ctx, table_name, file_path).await?;
+ }
+
Ok(ctx)
}
@@ -139,4 +155,29 @@ mod tests {
);
Ok(())
}
+
+ #[tokio::test]
+ async fn tpch_test_3() -> Result<()> {
+ let ctx = create_context_tpch3().await?;
+ let path = "tests/testdata/tpch_substrait_plans/query_3.json";
+ let proto = serde_json::from_reader::<_, Plan>(BufReader::new(
+ File::open(path).expect("file not found"),
+ ))
+ .expect("failed to parse json");
+
+ let plan = from_substrait_plan(&ctx, &proto).await?;
+ let plan_str = format!("{:?}", plan);
+ assert_eq!(plan_str, "Projection: FILENAME_PLACEHOLDER_2.l_orderkey AS
L_ORDERKEY, sum(FILENAME_PLACEHOLDER_2.l_extendedprice * Int32(1) -
FILENAME_PLACEHOLDER_2.l_discount) AS REVENUE,
FILENAME_PLACEHOLDER_1.o_orderdate AS O_ORDERDATE,
FILENAME_PLACEHOLDER_1.o_shippriority AS O_SHIPPRIORITY\
+ \n Limit: skip=0, fetch=10\
+ \n Sort: sum(FILENAME_PLACEHOLDER_2.l_extendedprice * Int32(1) -
FILENAME_PLACEHOLDER_2.l_discount) DESC NULLS FIRST,
FILENAME_PLACEHOLDER_1.o_orderdate ASC NULLS LAST\
+ \n Projection: FILENAME_PLACEHOLDER_2.l_orderkey,
sum(FILENAME_PLACEHOLDER_2.l_extendedprice * Int32(1) -
FILENAME_PLACEHOLDER_2.l_discount), FILENAME_PLACEHOLDER_1.o_orderdate,
FILENAME_PLACEHOLDER_1.o_shippriority\
+ \n Aggregate: groupBy=[[FILENAME_PLACEHOLDER_2.l_orderkey,
FILENAME_PLACEHOLDER_1.o_orderdate, FILENAME_PLACEHOLDER_1.o_shippriority]],
aggr=[[sum(FILENAME_PLACEHOLDER_2.l_extendedprice * Int32(1) -
FILENAME_PLACEHOLDER_2.l_discount)]]\
+ \n Projection: FILENAME_PLACEHOLDER_2.l_orderkey,
FILENAME_PLACEHOLDER_1.o_orderdate, FILENAME_PLACEHOLDER_1.o_shippriority,
FILENAME_PLACEHOLDER_2.l_extendedprice * (CAST(Int32(1) AS Decimal128(19, 0)) -
FILENAME_PLACEHOLDER_2.l_discount)\
+ \n Filter: FILENAME_PLACEHOLDER_0.c_mktsegment =
CAST(Utf8(\"HOUSEHOLD\") AS Utf8) AND FILENAME_PLACEHOLDER_0.c_custkey =
FILENAME_PLACEHOLDER_1.o_custkey AND FILENAME_PLACEHOLDER_2.l_orderkey =
FILENAME_PLACEHOLDER_1.o_orderkey AND FILENAME_PLACEHOLDER_1.o_orderdate <
Date32(\"1995-03-25\") AND FILENAME_PLACEHOLDER_2.l_shipdate >
Date32(\"1995-03-25\")\
+ \n Inner Join: Filter: Boolean(true)\
+ \n Inner Join: Filter: Boolean(true)\
+ \n TableScan: FILENAME_PLACEHOLDER_0
projection=[c_custkey, c_name, c_address, c_nationkey, c_phone, c_acctbal,
c_mktsegment, c_comment]\
+ \n TableScan: FILENAME_PLACEHOLDER_1
projection=[o_orderkey, o_custkey, o_orderstatus, o_totalprice, o_orderdate,
o_orderpriority, o_clerk, o_shippriority, o_comment]\n
TableScan: FILENAME_PLACEHOLDER_2 projection=[l_orderkey, l_partkey, l_suppkey,
l_linenumber, l_quantity, l_extendedprice, l_discount, l_tax, l_returnflag,
l_linestatus, l_shipdate, l_commitdate, l_receiptdate, l_shipinstruct,
l_shipmode, l_comment]");
+ Ok(())
+ }
}
diff --git a/datafusion/substrait/tests/testdata/tpch/customer.csv
b/datafusion/substrait/tests/testdata/tpch/customer.csv
new file mode 100644
index 0000000000..ed15da17d4
--- /dev/null
+++ b/datafusion/substrait/tests/testdata/tpch/customer.csv
@@ -0,0 +1,2 @@
+c_custkey,c_name,c_address,c_nationkey,c_phone,c_acctbal,c_mktsegment,c_comment
+1,Customer#000000001,Address1,1,123-456-7890,5000.00,BUILDING,No comment
\ No newline at end of file
diff --git a/datafusion/substrait/tests/testdata/tpch/orders.csv
b/datafusion/substrait/tests/testdata/tpch/orders.csv
new file mode 100644
index 0000000000..b9abea3cbb
--- /dev/null
+++ b/datafusion/substrait/tests/testdata/tpch/orders.csv
@@ -0,0 +1,2 @@
+o_orderkey,o_custkey,o_orderstatus,o_totalprice,o_orderdate,o_orderpriority,o_clerk,o_shippriority,o_comment
+1,1,O,1000.00,2023-01-01,5-LOW,Clerk#000000001,0,No comment
\ No newline at end of file
diff --git
a/datafusion/substrait/tests/testdata/tpch_substrait_plans/query_3.json
b/datafusion/substrait/tests/testdata/tpch_substrait_plans/query_3.json
new file mode 100644
index 0000000000..4ca074d2e8
--- /dev/null
+++ b/datafusion/substrait/tests/testdata/tpch_substrait_plans/query_3.json
@@ -0,0 +1,851 @@
+{
+ "extensionUris": [{
+ "extensionUriAnchor": 1,
+ "uri": "/functions_boolean.yaml"
+ }, {
+ "extensionUriAnchor": 4,
+ "uri": "/functions_arithmetic_decimal.yaml"
+ }, {
+ "extensionUriAnchor": 3,
+ "uri": "/functions_datetime.yaml"
+ }, {
+ "extensionUriAnchor": 2,
+ "uri": "/functions_comparison.yaml"
+ }],
+ "extensions": [{
+ "extensionFunction": {
+ "extensionUriReference": 1,
+ "functionAnchor": 0,
+ "name": "and:bool"
+ }
+ }, {
+ "extensionFunction": {
+ "extensionUriReference": 2,
+ "functionAnchor": 1,
+ "name": "equal:any1_any1"
+ }
+ }, {
+ "extensionFunction": {
+ "extensionUriReference": 3,
+ "functionAnchor": 2,
+ "name": "lt:date_date"
+ }
+ }, {
+ "extensionFunction": {
+ "extensionUriReference": 3,
+ "functionAnchor": 3,
+ "name": "gt:date_date"
+ }
+ }, {
+ "extensionFunction": {
+ "extensionUriReference": 4,
+ "functionAnchor": 4,
+ "name": "multiply:opt_decimal_decimal"
+ }
+ }, {
+ "extensionFunction": {
+ "extensionUriReference": 4,
+ "functionAnchor": 5,
+ "name": "subtract:opt_decimal_decimal"
+ }
+ }, {
+ "extensionFunction": {
+ "extensionUriReference": 4,
+ "functionAnchor": 6,
+ "name": "sum:opt_decimal"
+ }
+ }],
+ "relations": [{
+ "root": {
+ "input": {
+ "fetch": {
+ "common": {
+ "direct": {
+ }
+ },
+ "input": {
+ "sort": {
+ "common": {
+ "direct": {
+ }
+ },
+ "input": {
+ "project": {
+ "common": {
+ "emit": {
+ "outputMapping": [4, 5, 6, 7]
+ }
+ },
+ "input": {
+ "aggregate": {
+ "common": {
+ "direct": {
+ }
+ },
+ "input": {
+ "project": {
+ "common": {
+ "emit": {
+ "outputMapping": [33, 34, 35, 36]
+ }
+ },
+ "input": {
+ "filter": {
+ "common": {
+ "direct": {
+ }
+ },
+ "input": {
+ "join": {
+ "common": {
+ "direct": {
+ }
+ },
+ "left": {
+ "join": {
+ "common": {
+ "direct": {
+ }
+ },
+ "left": {
+ "read": {
+ "common": {
+ "direct": {
+ }
+ },
+ "baseSchema": {
+ "names": ["C_CUSTKEY", "C_NAME",
"C_ADDRESS", "C_NATIONKEY", "C_PHONE", "C_ACCTBAL", "C_MKTSEGMENT",
"C_COMMENT"],
+ "struct": {
+ "types": [{
+ "i64": {
+ "typeVariationReference": 0,
+ "nullability":
"NULLABILITY_REQUIRED"
+ }
+ }, {
+ "varchar": {
+ "length": 25,
+ "typeVariationReference": 0,
+ "nullability":
"NULLABILITY_NULLABLE"
+ }
+ }, {
+ "varchar": {
+ "length": 40,
+ "typeVariationReference": 0,
+ "nullability":
"NULLABILITY_NULLABLE"
+ }
+ }, {
+ "i64": {
+ "typeVariationReference": 0,
+ "nullability":
"NULLABILITY_REQUIRED"
+ }
+ }, {
+ "fixedChar": {
+ "length": 15,
+ "typeVariationReference": 0,
+ "nullability":
"NULLABILITY_NULLABLE"
+ }
+ }, {
+ "decimal": {
+ "scale": 0,
+ "precision": 19,
+ "typeVariationReference": 0,
+ "nullability":
"NULLABILITY_NULLABLE"
+ }
+ }, {
+ "fixedChar": {
+ "length": 10,
+ "typeVariationReference": 0,
+ "nullability":
"NULLABILITY_NULLABLE"
+ }
+ }, {
+ "varchar": {
+ "length": 117,
+ "typeVariationReference": 0,
+ "nullability":
"NULLABILITY_NULLABLE"
+ }
+ }],
+ "typeVariationReference": 0,
+ "nullability":
"NULLABILITY_REQUIRED"
+ }
+ },
+ "local_files": {
+ "items": [
+ {
+ "uri_file":
"file://FILENAME_PLACEHOLDER_0",
+ "parquet": {}
+ }
+ ]
+ }
+ }
+ },
+ "right": {
+ "read": {
+ "common": {
+ "direct": {
+ }
+ },
+ "baseSchema": {
+ "names": ["O_ORDERKEY",
"O_CUSTKEY", "O_ORDERSTATUS", "O_TOTALPRICE", "O_ORDERDATE", "O_ORDERPRIORITY",
"O_CLERK", "O_SHIPPRIORITY", "O_COMMENT"],
+ "struct": {
+ "types": [{
+ "i64": {
+ "typeVariationReference": 0,
+ "nullability":
"NULLABILITY_REQUIRED"
+ }
+ }, {
+ "i64": {
+ "typeVariationReference": 0,
+ "nullability":
"NULLABILITY_REQUIRED"
+ }
+ }, {
+ "fixedChar": {
+ "length": 1,
+ "typeVariationReference": 0,
+ "nullability":
"NULLABILITY_NULLABLE"
+ }
+ }, {
+ "decimal": {
+ "scale": 0,
+ "precision": 19,
+ "typeVariationReference": 0,
+ "nullability":
"NULLABILITY_NULLABLE"
+ }
+ }, {
+ "date": {
+ "typeVariationReference": 0,
+ "nullability":
"NULLABILITY_NULLABLE"
+ }
+ }, {
+ "fixedChar": {
+ "length": 15,
+ "typeVariationReference": 0,
+ "nullability":
"NULLABILITY_NULLABLE"
+ }
+ }, {
+ "fixedChar": {
+ "length": 15,
+ "typeVariationReference": 0,
+ "nullability":
"NULLABILITY_NULLABLE"
+ }
+ }, {
+ "i32": {
+ "typeVariationReference": 0,
+ "nullability":
"NULLABILITY_NULLABLE"
+ }
+ }, {
+ "varchar": {
+ "length": 79,
+ "typeVariationReference": 0,
+ "nullability":
"NULLABILITY_NULLABLE"
+ }
+ }],
+ "typeVariationReference": 0,
+ "nullability":
"NULLABILITY_REQUIRED"
+ }
+ },
+ "local_files": {
+ "items": [
+ {
+ "uri_file":
"file://FILENAME_PLACEHOLDER_1",
+ "parquet": {}
+ }
+ ]
+ }
+ }
+ },
+ "expression": {
+ "literal": {
+ "boolean": true,
+ "nullable": false,
+ "typeVariationReference": 0
+ }
+ },
+ "type": "JOIN_TYPE_INNER"
+ }
+ },
+ "right": {
+ "read": {
+ "common": {
+ "direct": {
+ }
+ },
+ "baseSchema": {
+ "names": ["L_ORDERKEY", "L_PARTKEY",
"L_SUPPKEY", "L_LINENUMBER", "L_QUANTITY", "L_EXTENDEDPRICE", "L_DISCOUNT",
"L_TAX", "L_RETURNFLAG", "L_LINESTATUS", "L_SHIPDATE", "L_COMMITDATE",
"L_RECEIPTDATE", "L_SHIPINSTRUCT", "L_SHIPMODE", "L_COMMENT"],
+ "struct": {
+ "types": [{
+ "i64": {
+ "typeVariationReference": 0,
+ "nullability":
"NULLABILITY_REQUIRED"
+ }
+ }, {
+ "i64": {
+ "typeVariationReference": 0,
+ "nullability":
"NULLABILITY_REQUIRED"
+ }
+ }, {
+ "i64": {
+ "typeVariationReference": 0,
+ "nullability":
"NULLABILITY_REQUIRED"
+ }
+ }, {
+ "i32": {
+ "typeVariationReference": 0,
+ "nullability":
"NULLABILITY_NULLABLE"
+ }
+ }, {
+ "decimal": {
+ "scale": 0,
+ "precision": 19,
+ "typeVariationReference": 0,
+ "nullability":
"NULLABILITY_NULLABLE"
+ }
+ }, {
+ "decimal": {
+ "scale": 0,
+ "precision": 19,
+ "typeVariationReference": 0,
+ "nullability":
"NULLABILITY_NULLABLE"
+ }
+ }, {
+ "decimal": {
+ "scale": 0,
+ "precision": 19,
+ "typeVariationReference": 0,
+ "nullability":
"NULLABILITY_NULLABLE"
+ }
+ }, {
+ "decimal": {
+ "scale": 0,
+ "precision": 19,
+ "typeVariationReference": 0,
+ "nullability":
"NULLABILITY_NULLABLE"
+ }
+ }, {
+ "fixedChar": {
+ "length": 1,
+ "typeVariationReference": 0,
+ "nullability":
"NULLABILITY_NULLABLE"
+ }
+ }, {
+ "fixedChar": {
+ "length": 1,
+ "typeVariationReference": 0,
+ "nullability":
"NULLABILITY_NULLABLE"
+ }
+ }, {
+ "date": {
+ "typeVariationReference": 0,
+ "nullability":
"NULLABILITY_NULLABLE"
+ }
+ }, {
+ "date": {
+ "typeVariationReference": 0,
+ "nullability":
"NULLABILITY_NULLABLE"
+ }
+ }, {
+ "date": {
+ "typeVariationReference": 0,
+ "nullability":
"NULLABILITY_NULLABLE"
+ }
+ }, {
+ "fixedChar": {
+ "length": 25,
+ "typeVariationReference": 0,
+ "nullability":
"NULLABILITY_NULLABLE"
+ }
+ }, {
+ "fixedChar": {
+ "length": 10,
+ "typeVariationReference": 0,
+ "nullability":
"NULLABILITY_NULLABLE"
+ }
+ }, {
+ "varchar": {
+ "length": 44,
+ "typeVariationReference": 0,
+ "nullability":
"NULLABILITY_NULLABLE"
+ }
+ }],
+ "typeVariationReference": 0,
+ "nullability": "NULLABILITY_REQUIRED"
+ }
+ },
+ "local_files": {
+ "items": [
+ {
+ "uri_file":
"file://FILENAME_PLACEHOLDER_2",
+ "parquet": {}
+ }
+ ]
+ }
+ }
+ },
+ "expression": {
+ "literal": {
+ "boolean": true,
+ "nullable": false,
+ "typeVariationReference": 0
+ }
+ },
+ "type": "JOIN_TYPE_INNER"
+ }
+ },
+ "condition": {
+ "scalarFunction": {
+ "functionReference": 0,
+ "args": [],
+ "outputType": {
+ "bool": {
+ "typeVariationReference": 0,
+ "nullability": "NULLABILITY_NULLABLE"
+ }
+ },
+ "arguments": [{
+ "value": {
+ "scalarFunction": {
+ "functionReference": 1,
+ "args": [],
+ "outputType": {
+ "bool": {
+ "typeVariationReference": 0,
+ "nullability":
"NULLABILITY_NULLABLE"
+ }
+ },
+ "arguments": [{
+ "value": {
+ "selection": {
+ "directReference": {
+ "structField": {
+ "field": 6
+ }
+ },
+ "rootReference": {
+ }
+ }
+ }
+ }, {
+ "value": {
+ "cast": {
+ "type": {
+ "fixedChar": {
+ "length": 10,
+ "typeVariationReference": 0,
+ "nullability":
"NULLABILITY_REQUIRED"
+ }
+ },
+ "input": {
+ "literal": {
+ "fixedChar": "HOUSEHOLD",
+ "nullable": false,
+ "typeVariationReference": 0
+ }
+ },
+ "failureBehavior":
"FAILURE_BEHAVIOR_UNSPECIFIED"
+ }
+ }
+ }]
+ }
+ }
+ }, {
+ "value": {
+ "scalarFunction": {
+ "functionReference": 1,
+ "args": [],
+ "outputType": {
+ "bool": {
+ "typeVariationReference": 0,
+ "nullability":
"NULLABILITY_REQUIRED"
+ }
+ },
+ "arguments": [{
+ "value": {
+ "selection": {
+ "directReference": {
+ "structField": {
+ "field": 0
+ }
+ },
+ "rootReference": {
+ }
+ }
+ }
+ }, {
+ "value": {
+ "selection": {
+ "directReference": {
+ "structField": {
+ "field": 9
+ }
+ },
+ "rootReference": {
+ }
+ }
+ }
+ }]
+ }
+ }
+ }, {
+ "value": {
+ "scalarFunction": {
+ "functionReference": 1,
+ "args": [],
+ "outputType": {
+ "bool": {
+ "typeVariationReference": 0,
+ "nullability":
"NULLABILITY_REQUIRED"
+ }
+ },
+ "arguments": [{
+ "value": {
+ "selection": {
+ "directReference": {
+ "structField": {
+ "field": 17
+ }
+ },
+ "rootReference": {
+ }
+ }
+ }
+ }, {
+ "value": {
+ "selection": {
+ "directReference": {
+ "structField": {
+ "field": 8
+ }
+ },
+ "rootReference": {
+ }
+ }
+ }
+ }]
+ }
+ }
+ }, {
+ "value": {
+ "scalarFunction": {
+ "functionReference": 2,
+ "args": [],
+ "outputType": {
+ "bool": {
+ "typeVariationReference": 0,
+ "nullability":
"NULLABILITY_NULLABLE"
+ }
+ },
+ "arguments": [{
+ "value": {
+ "selection": {
+ "directReference": {
+ "structField": {
+ "field": 12
+ }
+ },
+ "rootReference": {
+ }
+ }
+ }
+ }, {
+ "value": {
+ "literal": {
+ "date": 9214,
+ "nullable": false,
+ "typeVariationReference": 0
+ }
+ }
+ }]
+ }
+ }
+ }, {
+ "value": {
+ "scalarFunction": {
+ "functionReference": 3,
+ "args": [],
+ "outputType": {
+ "bool": {
+ "typeVariationReference": 0,
+ "nullability":
"NULLABILITY_NULLABLE"
+ }
+ },
+ "arguments": [{
+ "value": {
+ "selection": {
+ "directReference": {
+ "structField": {
+ "field": 27
+ }
+ },
+ "rootReference": {
+ }
+ }
+ }
+ }, {
+ "value": {
+ "literal": {
+ "date": 9214,
+ "nullable": false,
+ "typeVariationReference": 0
+ }
+ }
+ }]
+ }
+ }
+ }]
+ }
+ }
+ }
+ },
+ "expressions": [{
+ "selection": {
+ "directReference": {
+ "structField": {
+ "field": 17
+ }
+ },
+ "rootReference": {
+ }
+ }
+ }, {
+ "selection": {
+ "directReference": {
+ "structField": {
+ "field": 12
+ }
+ },
+ "rootReference": {
+ }
+ }
+ }, {
+ "selection": {
+ "directReference": {
+ "structField": {
+ "field": 15
+ }
+ },
+ "rootReference": {
+ }
+ }
+ }, {
+ "scalarFunction": {
+ "functionReference": 4,
+ "args": [],
+ "outputType": {
+ "decimal": {
+ "scale": 0,
+ "precision": 19,
+ "typeVariationReference": 0,
+ "nullability": "NULLABILITY_NULLABLE"
+ }
+ },
+ "arguments": [{
+ "value": {
+ "selection": {
+ "directReference": {
+ "structField": {
+ "field": 22
+ }
+ },
+ "rootReference": {
+ }
+ }
+ }
+ }, {
+ "value": {
+ "scalarFunction": {
+ "functionReference": 5,
+ "args": [],
+ "outputType": {
+ "decimal": {
+ "scale": 0,
+ "precision": 19,
+ "typeVariationReference": 0,
+ "nullability": "NULLABILITY_NULLABLE"
+ }
+ },
+ "arguments": [{
+ "value": {
+ "cast": {
+ "type": {
+ "decimal": {
+ "scale": 0,
+ "precision": 19,
+ "typeVariationReference": 0,
+ "nullability":
"NULLABILITY_NULLABLE"
+ }
+ },
+ "input": {
+ "literal": {
+ "i32": 1,
+ "nullable": false,
+ "typeVariationReference": 0
+ }
+ },
+ "failureBehavior":
"FAILURE_BEHAVIOR_UNSPECIFIED"
+ }
+ }
+ }, {
+ "value": {
+ "selection": {
+ "directReference": {
+ "structField": {
+ "field": 23
+ }
+ },
+ "rootReference": {
+ }
+ }
+ }
+ }]
+ }
+ }
+ }]
+ }
+ }]
+ }
+ },
+ "groupings": [{
+ "groupingExpressions": [{
+ "selection": {
+ "directReference": {
+ "structField": {
+ "field": 0
+ }
+ },
+ "rootReference": {
+ }
+ }
+ }, {
+ "selection": {
+ "directReference": {
+ "structField": {
+ "field": 1
+ }
+ },
+ "rootReference": {
+ }
+ }
+ }, {
+ "selection": {
+ "directReference": {
+ "structField": {
+ "field": 2
+ }
+ },
+ "rootReference": {
+ }
+ }
+ }]
+ }],
+ "measures": [{
+ "measure": {
+ "functionReference": 6,
+ "args": [],
+ "sorts": [],
+ "phase": "AGGREGATION_PHASE_INITIAL_TO_RESULT",
+ "outputType": {
+ "decimal": {
+ "scale": 0,
+ "precision": 19,
+ "typeVariationReference": 0,
+ "nullability": "NULLABILITY_NULLABLE"
+ }
+ },
+ "invocation": "AGGREGATION_INVOCATION_ALL",
+ "arguments": [{
+ "value": {
+ "selection": {
+ "directReference": {
+ "structField": {
+ "field": 3
+ }
+ },
+ "rootReference": {
+ }
+ }
+ }
+ }]
+ }
+ }]
+ }
+ },
+ "expressions": [{
+ "selection": {
+ "directReference": {
+ "structField": {
+ "field": 0
+ }
+ },
+ "rootReference": {
+ }
+ }
+ }, {
+ "selection": {
+ "directReference": {
+ "structField": {
+ "field": 3
+ }
+ },
+ "rootReference": {
+ }
+ }
+ }, {
+ "selection": {
+ "directReference": {
+ "structField": {
+ "field": 1
+ }
+ },
+ "rootReference": {
+ }
+ }
+ }, {
+ "selection": {
+ "directReference": {
+ "structField": {
+ "field": 2
+ }
+ },
+ "rootReference": {
+ }
+ }
+ }]
+ }
+ },
+ "sorts": [{
+ "expr": {
+ "selection": {
+ "directReference": {
+ "structField": {
+ "field": 1
+ }
+ },
+ "rootReference": {
+ }
+ }
+ },
+ "direction": "SORT_DIRECTION_DESC_NULLS_FIRST"
+ }, {
+ "expr": {
+ "selection": {
+ "directReference": {
+ "structField": {
+ "field": 2
+ }
+ },
+ "rootReference": {
+ }
+ }
+ },
+ "direction": "SORT_DIRECTION_ASC_NULLS_LAST"
+ }]
+ }
+ },
+ "offset": "0",
+ "count": "10"
+ }
+ },
+ "names": ["L_ORDERKEY", "REVENUE", "O_ORDERDATE", "O_SHIPPRIORITY"]
+ }
+ }],
+ "expectedTypeUrls": []
+}
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]
