【问题标题】:Utilizing Apache Calcite without connecting to DB在不连接数据库的情况下使用 Apache Calcite
【发布时间】:2021-12-01 15:22:13
【问题描述】:

我正在尝试从 Calcite 中的关系代数生成 SQL 查询而不连接到数据库

我在 Calcite 网站上看到了一个示例,其中 JDBC 适配器第一次使用 DB 连接,所有后续调用都从缓存中获取数据。我正在寻找的根本不是连接到数据库,而是从关系到 SQL 的转换。

非常感谢任何提示。

【问题讨论】:

    标签: apache-calcite


    【解决方案1】:

    一个可用的示例in this notebook。我在下面包含了相关代码。您需要创建一个模式实例才能使其工作。在这种情况下,我刚刚使用了 Calcite 的一种测试模式。

    import org.apache.calcite.jdbc.CalciteSchema;
    import org.apache.calcite.rel.RelNode;
    import org.apache.calcite.rel.RelWriter;
    import org.apache.calcite.rel.externalize.RelWriterImpl;
    import org.apache.calcite.rel.core.JoinRelType;
    import org.apache.calcite.schema.SchemaPlus;
    import org.apache.calcite.test.CalciteAssert;
    import org.apache.calcite.tools.Frameworks;
    import org.apache.calcite.tools.FrameworkConfig;
    import org.apache.calcite.tools.RelBuilder;
    
    SchemaPlus rootSchema = CalciteSchema.createRootSchema(true).plus();
    FrameworkConfig config = Frameworks.newConfigBuilder()
        .defaultSchema(
            CalciteAssert.addSchema(rootSchema, CalciteAssert.SchemaSpec.HR))
        .build();
    RelBuilder builder = RelBuilder.create(config);
    
    RelNode opTree = builder.scan("emps")
        .scan("depts")
        .join(JoinRelType.INNER, "deptno")
        .filter(builder.equals(builder.field("empid"), builder.literal(100)))
        .build();
    

    通过构造RelToSqlConverter 的实例并在RelNode 对象上调用它的visit 方法,转换为SQL 的另一个步骤相当简单。

    【讨论】:

      【解决方案2】:

      您可以使用新的 Quidem 测试来运行,这会更容易

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-07-11
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多