You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@beam.apache.org by "Anton Kedin (JIRA)" <ji...@apache.org> on 2018/01/26 23:58:00 UTC
[jira] [Created] (BEAM-3548) [SQL][Java] Fluid query builder
Anton Kedin created BEAM-3548:
---------------------------------
Summary: [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
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
(v7.6.3#76005)