0

2 つのテーブルを 2 つの異なるデータベースに配置する必要があります。

したがって、本質的に結合クエリを書くことはできません。ここで問題は、内部結合をシミュレートするのに本質的に役立つETLファイルをどのように作成できるかですscriptella

Order table
{OrderID, CustomerID, OrderDate}
Customer Table
{CustomerID, CustomerName}

scriptella で次のクエリをシミュレートしたい:

SELECT Orders.OrderID, Customers.CustomerName, Orders.OrderDate
FROM Orders
INNER JOIN Customers
ON Orders.CustomerID=Customers.CustomerID

ありがとう、ディーパック

4

1 に答える 1

0

内部結合をエミュレートするには、基本的に 2 つのネストされたクエリが必要です。最初のクエリ (Q1) は、1 つのテーブルからすべての行を選択します。Q1 で見つかった行ごとに、2 番目のクエリ (Q2) が実行されます。結果は、Q2 内の内部スクリプト要素に送信されます。

<!DOCTYPE etl SYSTEM "http://scriptella.javaforge.com/dtd/etl.dtd">
<etl>
    <!-- db1 has Customers table -->
    <connection id="db1" url="jdbc:database1" user="user1" password="pwd1" classpath="external.jar"/>

    <!-- db2 has Orders table -->
    <connection id="db2" url="jdbc:database2" user="user2" password="pwd2" classpath="somedriver.jar"/>

    <!-- just for logging -->
    <connection id="log" driver="text"/>

    <query connection-id="db1">
         <!-- SELECT CustomerID/name for all rows from Customer -->
         SELECT CustomerID, CustomerName from Customer

         <!-- For each selected customer row, select matching orders -->
         <query connection-id="db2">
             SELECT OrderID, OrderDate FROM Orders WHERE CustomerID=?CustomerID
             <!-- Log each match. You can also make INSERT to any DB here -->
             <script connection-id="log">
                  Row $rownum: Orders.OrderID=$OrderID, Customers.CustomerName=$CustomerName, Orders.OrderDate=$OrderDate
             </script>
        </query>
    </query>
<etl>
于 2016-01-12T02:13:16.490 に答える