[
https://issues.apache.org/jira/browse/BEAM-3548?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17546818#comment-17546818
]
Kenneth Knowles commented on BEAM-3548:
---------------------------------------
This issue has been migrated to https://github.com/apache/beam/issues/18648
> [SQL][Java] Fluid query builder
> -------------------------------
>
> Key: BEAM-3548
> URL: https://issues.apache.org/jira/browse/BEAM-3548
> Project: Beam
> Issue Type: New Feature
> Components: dsl-sql
> Reporter: Anton Kedin
> Priority: P3
>
> Create a fluid query builder.
>
> *Problem*:
> SQL queries as java strings are very hard to read and debug. See examples
> below.
>
> *Solution*:
> Fluid query builder, along the lines of:
> {code:java}
> QueryTransform query =
> QueryBuilder
> .from(pcollection)
> .where(e -> e.id == 3)
> .groupBy(e -> e.name)
> .select();{code}
>
> *Examples:*
> {code:java|title=BeamSqlAggregationTest.java}
> String sql = "select f_int2, count(*) as getFieldCount, "
> + "sum(f_long) as sum1, avg(f_long) as avg1, max(f_long) as max1,
> min(f_long) as min1, "
> + "sum(f_short) as sum2, avg(f_short) as avg2, max(f_short) as max2,
> min(f_short) as min2, "
> + "sum(f_byte) as sum3, avg(f_byte) as avg3, max(f_byte) as max3,
> min(f_byte) as min3, "
> + "sum(f_float) as sum4, avg(f_float) as avg4, max(f_float) as max4,
> min(f_float) as min4, "
> + "sum(f_double) as sum5, avg(f_double) as avg5, "
> + "max(f_double) as max5, min(f_double) as min5, "
> + "max(f_timestamp) as max6, min(f_timestamp) as min6, "
> + "var_pop(f_double) as varpop1, var_samp(f_double) as varsamp1, "
> + "var_pop(f_int) as varpop2, var_samp(f_int) as varsamp2 "
> + "FROM TABLE_A group by f_int2";
> {code}
> or
> {code:java|title=BeamSetOperatorRelBaseTest.java}
> String sql = "SELECT "
> + " order_id, site_id, count(*) as cnt "
> + "FROM ORDER_DETAILS GROUP BY order_id, site_id"
> + ", TUMBLE(order_time, INTERVAL '1' HOUR) "
> + " UNION SELECT "
> + " order_id, site_id, count(*) as cnt "
> + "FROM ORDER_DETAILS GROUP BY order_id, site_id"
> + ", TUMBLE(order_time, INTERVAL '2' HOUR) ";
> {code}
> or
> {code:java|title=BeamSqlCliTest.java}
> cli.execute(
> "create table person (\n"
> + "id int COMMENT 'id', \n"
> + "name varchar(31) COMMENT 'name', \n"
> + "age int COMMENT 'age') \n"
> + "TYPE 'text' \n"
> + "COMMENT '' LOCATION 'text://home/admin/orders'"
> );
> {code}
--
This message was sent by Atlassian Jira
(v8.20.7#820007)