DirectScan, fallback modes, and EXPLAIN
=======================================

Postgres
Lakehouseは、クエリ全体をDataFusion、可能な場合にクエリを処理するために使用されるベクトル化クエリに「プッシュダウン」できる場合に最速です。将来的には、部分的なプッシュダウンのサポートを追加するため、これはより細かくなります。

Postgres Lakehouseは、2つのモードでクエリを実行できます。最初に、Seafowl
DataFusionに基づいた専用の列型データベースを使用してクエリ全体を実行しようとします。
たとえば、JSONのようなPostgreSQL固有の操作を使用するためにSeafowlがクエリ全体を実行できない場合、Postgres
LakehouseはPostgreSQLエグゼキュータの使用にフォールバックし、Seafowlは完全なテーブルコンテンツをストリーミングします。

クエリが非常に遅い場合、それが起こっている可能性があります。

クエリーで\ ``EXPLAIN``
を実行し、最上位のクエリーノードが\ ``DirectScan``
であることを確認することにより、使用されているモードを確認できます。例

::

   explain select count from (select count(*) from tpch_sf_1.lineitem);
                                                                                                                                  QUERY PLAN
   - -----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
    Aggregate  (cost=167.52..167.55 rows=1 width=8)
      ->  Append  (cost=0.00..165.01 rows=1001 width=0)
            ->  CompatScan on "16529" lineitem_2  (cost=100.00..150.00 rows=1000 width=0)
                  SeafowlPlan: logical_plan
                    TableScan:  tpch_sf_1.lineitem projection=[l_orderkey, l_partkey, l_suppkey, l_linenumber, l_quantity, l_extendedprice, l_discount, l_tax, l_returnflag, l_linestatus, l_shipdate, l_commitdate, l_receiptdate, l_shipinstruct, l_shipmode, l_comment]
   (6 rows)

この場合、クエリーはPostgreSQLによって実行され、Seafowlはテーブルをスキャンする場合にのみ関係します下部の\ ``CompatScan``
を参照してください。 この場合の修正は、内側の\ ``COUNT( *)``
列に明示的に名前を付けることです。Seafowlは暗黙の名前\ ``count(* )``
を付けるのに対し、PostgreSQLは\ ``count`` と呼ぶためです。

.. code:: console

   edb_admin=> explain select count from (select count(*) as count from tpch_sf_1.lineitem);
                                QUERY PLAN
   - -------------------------------------------------------------------
    DirectScan: logical_plan
      Projection:  COUNT(*) AS count
        Aggregate:  groupBy=[[]], aggr=[[COUNT(UInt8(1)) AS COUNT(*)]]
          TableScan:  tpch_sf_1.lineitem projection=[]
   (4 rows)

ここでは、上部に\ ``DirectScan``
が表示されます。これは、Seafowlがクエリ全体を実行していることを意味します。

Seafowlで完全に実行できるようにクエリを変更するのに問題がある場合は、サポートチケットをオープンしてください。
