[英]Parse Bigquery string (offline) using Apache calcite in Java
我需要一些關於使用方解石解析 Bigquery 字符串的幫助,我是 Apache 方解石的新手,所以請耐心等待我做任何愚蠢的事情。
我的目標是解析 Bigquery SQL 字符串(即 Bigquery 表達式或 Bigquery SQL)。 如果語法有問題,應該通過錯誤。 但是下面的表達式是有效的,字符串我收到錯誤。
到目前為止,我做了以下事情:
創建 maven 項目后,我在 pom 中添加了以下依賴項:
<dependency>
<groupId>org.apache.calcite</groupId>
<artifactId>calcite-core</artifactId>
<version>1.32.0</version>
</dependency>
這是我的代碼:
public static void main(String[] args){
String expr = "ROUND(((DATE_DIFF(cust360_customer_demographics.acct_eff_dt,todays_dt,DAY))/30),1)";
String sql = "select avg(a) as \"avg_a\",b from csv.test group by b";
System.out.println(validateExprCalcite(expr));
//System.out.println(validateQueryCalcite(sql));
}
/* public static String validateQueryCalcite(String sql) {
try {
SqlParser expParser = getCalciteConfig(sql);
SqlNode sqlNode = expParser.parseQuery();
log.info("Validating Query - {}. After Query {}",sql,sqlNode.toSqlString(BigQuerySqlDialect.DEFAULT));
} catch (Exception e) {
return e.getCause().getMessage();
}
return "Query Successfully validated.";
}
*/
public static String validateExprCalcite(String sql) {
try {
SqlParser expParser = getCalciteConfig(sql);
SqlNode sqlNode = expParser.parseExpression();
log.info("Validating Query - {}. After Query {}",sql,sqlNode.toSqlString(BigQuerySqlDialect.DEFAULT));
} catch (Exception e) {
return e.getCause().getMessage();
}
return "Query Successfully validated.";
}
public static SqlParser getCalciteConfig(String sql){
SqlParser.Config config = SqlParser.Config.DEFAULT
.withLex(Lex.BIG_QUERY)
.withConformance(SqlConformanceEnum.BIG_QUERY)
.withParserFactory(SqlParserImpl.FACTORY)
.withQuoting(Quoting.DOUBLE_QUOTE)
.withUnquotedCasing(Casing.TO_UPPER)
.withLex(Lex.BIG_QUERY);
return SqlParser.create(sql, config);
}
我Incorrect syntax near the keyword 'DAY' at line 1, column 71.
錯誤。盡管這是有效的 Big Query 表達式。
我還檢查了一些這樣的表達式,盡管它們是有效的 BQ 表達式,但它使用相同的表達式失敗了。
我錯過了什么嗎? 我在這里做錯了什么?
任何幫助將不勝感激。 謝謝!
我猜方解石中還沒有對DATE_DIFF
的支持。 參見CALCITE-5180
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.