亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Apache Calcite官方文檔中文版-概覽-1.背景

發布時間:2020-09-12 22:30:02 來源:網絡 閱讀:10444 作者:Lynn_Yuan 欄目:大數據

第一部分 概覽

1. 背景

??Apache Calcite是一個動態數據管理框架。它包含了許多組成典型數據管理系統的經典模塊,但省略了一些關鍵性的功能: 數據存儲,數據處理算法和元數據存儲庫。
??Calcite有意地遠離了存儲和處理數據的任務。如我們所見,這使得它成為在應用程序和一個或多個數據存儲位置和數據處理引擎之間的最佳中間層選擇。它同樣也是構建數據庫的完美基礎選擇: 只需要在它的基礎上添加數據。
??下面為了展示說明,我們建立了一個空的Calcite實例并查詢數據。

public static class HrSchema {
  public final Employee[] emps = 0;
  public final Department[] depts = 0;
}
Class.forName("org.apache.calcite.jdbc.Driver");
Properties info = new Properties();
info.setProperty("lex", "JAVA");
Connection connection = DriverManager.getConnection("jdbc:calcite:", info);
CalciteConnection calciteConnection = connection.unwrap(CalciteConnection.class);
SchemaPlus rootSchema = calciteConnection.getRootSchema();
Schema schema = ReflectiveSchema.create(calciteConnection,
rootSchema, "hr", new HrSchema());
rootSchema.add("hr", schema);
Statement statement = calciteConnection.createStatement();
ResultSet resultSet = statement.executeQuery(
    "select d.deptno, min(e.empid)\n"
    + "from hr.emps as e\n"
    + "join hr.depts as d\n"
    + "  on e.deptno = d.deptno\n"
    + "group by d.deptno\n"
    + "having count(*) > 1");
print(resultSet);
resultSet.close();
statement.close();
connection.close();

??大家可能對上面的代碼比較疑惑,數據庫在哪里?這里沒有數據庫。在我們調用ReflectiveSchema.create將一個java object注冊為schema,以及這個集合的成員emps和depts作為表之前,connection都是空的。
??Calcite并不想管理數據,它甚至沒有標準的數據格式。上面的例子使用了內存數據集,并且使用linq4j libaray的groupBy和join操作來對他們進行處理,但Calcite同樣也支持以其他標準數據格式對數據進行處理,例如JDBC。在上面的例子中,將下面的代碼

Schema schema = ReflectiveSchema.create(calciteConnection, rootSchema, "hr", new HrSchema());

替換成:

Class.forName("com.mysql.jdbc.Driver");
BasicDataSource dataSource = new BasicDataSource();
dataSource.setUrl("jdbc:mysql://localhost");
dataSource.setUsername("username");
dataSource.setPassword("password");
Schema schema = JdbcSchema.create(rootSchema, "hr", dataSource,
    null, "name");

??Calcite就可以通過JDBC來執行同樣的查詢了。對應用來說,數據和API不會產生任何變化,但底層的實現卻差異巨大。Calcite使用優化規則來將JOIN和GROUP BY操作下推到源數據庫中進行執行。
  基于內存和基于JDBC只是兩個大家較為熟悉的例子。Calcite可以處理任意一種數據源和數據格式。如果想要增加數據源,我們需要編寫一個適配器來告訴Calcite,它應該將數據源中的什么樣的集合視為“table”來進行操作。
  如果想要進一步更智能地集成,我們可以編寫自己的優化器規則。優化器規則允許Calcite來處理新格式的數據,并注冊新的算子(如更優化的join算法),同時還允許Calcite來對查詢轉化為算子的過程進行優化。Calcite會結合用戶提供的規則和算子與系統內建規則和算子,執行基于成本的優化,生成高效的執行計劃。

編寫適配器Adapter

??Calcite在example/csv子項目下提供了CSV的適配器。它能很好地支持應用程序的功能需求,同時如果正在編寫自己的適配器,它也能作為一個足夠簡單的例子來作為參考模板。
  具體使用CSV 適配器和編寫其他適配器的方法請查看下一章節2教程。
  幫助(HOWTO)章節提供了更多使用其他適配器的信息,和常用的使用場景。

功能狀態

??Calcite提供了以下特性:
1) 查詢解析器、驗證器和優化器
2) 以JSON格式讀取模型
3) 標準函數以及標準聚合函數
4) 針對Linq4j和JDBC后端的JDBC查詢
5) Linq4j front-end
6) SQL特性:SELECT, FROM (包括JOIN語法), WHERE, GROUP BY (包括GROUPING SETS), 聚合函數 (包括COUNT(DISTINCT...) 和FILTER),HAVING, ORDER BY(包括NULLS FIRST/LAST), 集合操作 (UNION, INTERSECT, MINUS), 子查詢(包括相關子查詢), 窗口聚合函數,LIMIT (Postgres語法); SQL reference章節中提供了更詳細的信息
7) 本地和遠程JDBC驅動器,詳情參考Avatica章節
8) 多種適配器

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

华蓥市| 哈密市| 壤塘县| 揭阳市| 泊头市| 卫辉市| 金沙县| 乐山市| 琼中| 大余县| 惠水县| 鸡西市| 浦县| 贺兰县| 寿阳县| 衡南县| 桂阳县| 潼关县| 手机| 西盟| 甘泉县| 格尔木市| 雅安市| 河源市| 即墨市| 嵊泗县| 清徐县| 新巴尔虎右旗| 彰化县| 郑州市| 晋江市| 红桥区| 自治县| 临沧市| 林口县| 阿勒泰市| 新丰县| 化德县| 大足县| 交口县| 南宁市|