<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ??碼云GVP開源項目 12k star Uniapp+ElementUI 功能強大 支持多語言、二開方便! 廣告
                # Storm SQL 內部實現 本頁描述了 Storm SQL 的設計和實現. ## 概覽 SQL是一個很好使用但又復雜的標準. 包括 Drill,Hive,Phoenix 和 Spark 在內的幾個項目都在其 SQL 層面上投入了大量資金. StormSQL 的主要設計目標之一是利用這些項目的現有資源. StormSQL 利用[Apache Calcite](///calcite.apache.org) 來實現 SQL 標準. StormSQL 專注于將 SQL 語句編譯成Storm / Trident 拓撲,以便它們可以在 Storm 集群中執行. 圖1描述了在 StormSQL 中執行 SQL 查詢的工作流程. 首先,用戶提供了一系列 SQL 語句. StormSQL 解析 SQL 語句并將其轉換為 Calcite 邏輯計劃. 邏輯計劃由一系列 SQL 邏輯運算符組成,描述如何執行查詢而不考慮底層執行引擎. 邏輯運算符的一些示例包括 `TableScan`, `Filter`, `Projection` 和`GroupBy`. ![](https://img.kancloud.cn/e3/ec/e3ecacd4d4c884d8e0e3d71c85cf30bb_1373x383.jpg "Workflow of StormSQL") 圖 1: StormSQL 工作流. 下一步是將邏輯執行計劃編譯為物理執行計劃. 物理計劃由物理運算符組成,描述如何在 _StormSQL_ 中執行 SQL 查詢. 物理運算符如`Filter`, `Projection`, 和 `GroupBy` 直接映射到 Trident 拓撲中的操作. StormSQL 還將 SQL 語句中的表達式編譯為 Java 代碼塊, 并將它們插入 Trident 函數, 這些函數將在運行時被編譯一次并執行. 最后,StormSQL 將創建的 Trident 拓撲與空的打包 JAR 提交到 Storm 集群. Storm 計劃并以與執行其他 Storm 拓撲相同的方式執行 Trident 拓撲. 以下代碼塊顯示了一個示例查詢,用于過濾和投影來自 Kafka 流的結果. ``` CREATE EXTERNAL TABLE ORDERS (ID INT PRIMARY KEY, UNIT_PRICE INT, QUANTITY INT) LOCATION 'kafka://localhost:2181/brokers?topic=orders' ... CREATE EXTERNAL TABLE LARGE_ORDERS (ID INT PRIMARY KEY, TOTAL INT) LOCATION 'kafka://localhost:2181/brokers?topic=large_orders' ... INSERT INTO LARGE_ORDERS SELECT ID, UNIT_PRICE * QUANTITY AS TOTAL FROM ORDERS WHERE UNIT_PRICE * QUANTITY > 50 ``` 前兩個 SQL 語句定義外部數據的輸入和輸出. 圖2描述了StormSQL 如何獲取最后一個 `SELECT` 查詢并將其編譯為 Trident 拓撲的過程. ![](https://img.kancloud.cn/3e/2f/3e2f4f06afd238079a7d4e6ce19e886b_1498x422.jpg "Compiling the example query to Trident topology") 圖 2: 將示例查詢編譯為 Trident 拓撲. ## 查詢 streaming tables 的限制 查詢代表實時數據流的表時有幾個局限: * `ORDER BY` 子句不能應用于流 * `GROUP BY` 子句中至少有一個單調字段允許 StormSQL 限制緩沖區的大小 更多細節請參考 [http://calcite.apache.org/docs/stream.html](http://calcite.apache.org/docs/stream.html). ## 依賴 Storm 除了 `EXTERNAL TABLE` 使用的數據源 JAR 外,還要注意 Storm SQL 的必須的依賴. 您可以使用 `storm sql` 的 `--jars` 或 `--artifacts`,以便數據源 JAR 可以包含在 Storm SQL Runner 中,也可以包含在 Trident 拓撲運行時 classpath 中. (如果您的數據源 JAR 在 Maven 存儲庫中可用,則使用 `--artifacts`,因為它處理傳遞依賴關系) 請參考 [Storm SQL集成](storm-sql.html).
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看