схема добавления кальцита Не может оценить org.apache.calcite.sql.SqlJoin.toString()

#apache-calcite

Вопрос:

Я использую cacite JDBC для динамического подключения улья и добавления схемы. Я хочу получить метаданные столбца SQL напрямую без выполнения SQL. SQL может проверять и выполнять для получения результатов, но я не могу получить узел sqljoin

             Class.forName("org.apache.calcite.jdbc.Driver");
            String driver = "org.apache.hive.jdbc.HiveDriver";
            Class.forName(driver);
            String url = "jdbc:hive2://192.168.8.225:10000/default";
            Properties info = new Properties();
            info.setProperty("caseSensitive", "false");
            info.put("lex", "BIG_QUERY");
            DataSource dataSource = JdbcSchema.dataSource(url, driver, null, null);
            Connection conn = DriverManager.getConnection("jdbc:calcite:", info);
            CalciteConnection calciteConnection = conn.unwrap(CalciteConnection.class);
            calciteConnection.setSchema("fdc");
            SchemaPlus rootSchema = calciteConnection.getRootSchema();
            Connection dataSourceConnection = dataSource.getConnection();
            DatabaseMetaData metaData = dataSourceConnection.getMetaData();
            ResultSet schemas = metaData.getSchemas();
            while(schemas.next()) {
                String schemasString = schemas.getString("TABLE_SCHEM");
                //just set caseSensitive = false; unquotedCasing = Casing.UNCHANGED; quotedCasing = Casing.UNCHANGED;
                HiveJdbcSchema hiveJdbcSchema = HiveJdbcSchema.create(rootSchema, schemasString, dataSource, null, schemasString);
                rootSchema.add(schemasString, hiveJdbcSchema);
            }

            SqlParser.Config builder = SqlParser.config().withQuotedCasing(Casing.TO_UPPER)
                    .withUnquotedCasing(Casing.TO_UPPER).withCaseSensitive(false)
                    .withQuoting(Quoting.BACK_TICK).withUnquotedCasing(Casing.UNCHANGED);

            final List<RelTraitDef> traitDefs = new ArrayList<RelTraitDef>();
            traitDefs.add(ConventionTraitDef.INSTANCE);
            traitDefs.add(RelCollationTraitDef.INSTANCE);

            final FrameworkConfig config = Frameworks.newConfigBuilder()
                    .defaultSchema(rootSchema.getSubSchema("default"))
                    .parserConfig(builder)
                    .operatorTable(SqlStdOperatorTable.instance())
                    .traitDefs(traitDefs)
                    .context(Contexts.EMPTY_CONTEXT)
                    .typeSystem(RelDataTypeSystem.DEFAULT)
                    .build();

            Planner planner = Frameworks.getPlanner(config);

            String sql = "select t1.* from fdc.t_fdc_base_visit_detail t1 join dim.t_dim3_cms_basic_doctor t2 on t1.doctor_id = t2.doctor_id limit 5";
            SqlNode originSqlNode = planner.parse(sql);
            Pair<SqlNode, RelDataType> sqlNodeRelDataTypePair = planner.validateAndGetType(originSqlNode);
            SqlNode sqlNode = sqlNodeRelDataTypePair.getKey();
            //Cannot evaluate org.apache.calcite.sql.SqlJoin.toString()
            SqlSelect sqlSelect = (SqlSelect) sqlNode;
            //SqlNode from = sqlSelect.getFrom();