在使用 Apache Calcite 解析 Google BigQuery 输出时,需要将 schema 名称和字段名中的空格替换为下划线(“_”)。这是因为 Google BigQuery 引擎将 schema 名称和字段名中的空格转义为“\s”。
示例代码:
// 设置解析 Google BigQuery 输出时的配置
final CalciteConnectionConfig config =
new CalciteConnectionPropertyImpl()
.set(CalciteConnectionProperty.LEX, Lex.JAVA)
.set(CalciteConnectionProperty.PARSER_FACTORY,
JSqlParserImpl.FACTORY)
.set(CalciteConnectionProperty.TYPE_SYSTEM,
JdbcTypeFactoryImpl.INSTANCE)
.set(CalciteConnectionProperty.CONFORMANCE,
SqlConformanceEnum.BIG_QUERY)
.set(CalciteConnectionProperty.QUOTING,
Quoting.DOUBLE_QUOTE)
.set(CalciteConnectionProperty.UNQUOTED_CASING,
UnquotedCasing.TO_UPPER);
// 替换 schema 名称和字段名中的空格为下划线
final SqlNode parsed =
CalciteParser.create(config)
.parseQuery(query.replace("`", "\"")
.replaceAll("FROM `_`.`", "FROM `_")
.replaceAll("JOIN `_`.`", "JOIN `_")
.replaceAll("ON `_`.`", "ON `_")
.replace(" AS ", "_AS_")
.replace(".", "_"));