Azure Data Lake Analytics(ADLA)では、テーブルに1つのインデックスしか定義できず、クラスタ化する必要があります。効率の良いためには、異なるキーでのパーティション分割が必要な2種類の分析があります。テーブル作成スクリプトなどを複製して、並列実行する必要があります。U-SQL/ADLA:テーブルで複数のインデックスとパーティションを取得する方法は?
など。単純な注文例
CREATE TABLE dbo.Orders
(
OrderID int,
CustomerID int,
OrderDetailID int,
OrderTotal double,
OrderDate DateTime,
INDEX clx_OrderID_CustomerID CLUSTERED(OrderID, CustomerID ASC) DISTRIBUTED BY HASH(OrderId)
);
これは、クエリがOrderIdの周りをピボット/ピボットするときにうまく動作します。しかし、CustomerIDまたはCustomerIDの範囲に基づくクエリがある場合はどうなりますか?
私が現在やっていることは、実際の解析スクリプトの開発者がこの
CREATE TABLE dbo.Orders_ByCustomerId
(
OrderID int,
CustomerID int,
OrderDetailID int,
OrderTotal double,
OrderDate DateTime,
INDEX clx_CustomerId CLUSTERED(OrderID, CustomerID ASC) DISTRIBUTED BY HASH(CustomerId)
);
のようなものを行う、今
(DAYOFYEARが含まれている計算列ごとのように)他の多くのシナリオに繰り返すことですタスクに合ったパーティショニングスキームを持つテーブルを選択し、追加のパーティショニングシナリオが必要であると判断した場合は、新しいテーブル名でコードを更新してコードを更新する必要があります。
私は希望、そしてそれは、オプティマイザは非常に簡単に利用することができる代のように思えるが、テーブル/インデックスDMLを可能にすることです。この方法で、この
CREATE TABLE dbo.Orders
(
OrderID int,
CustomerID int,
OrderDetailID int,
OrderTotal double,
OrderDate DateTime,
INDEX clx_OrderID_CustomerID CLUSTERED(OrderID, CustomerID ASC) DISTRIBUTED BY HASH(OrderId),
INDEX clx_CustomerID_OrderID CLUSTERED(CustomerID, OrderID ASC) DISTRIBUTED BY HASH(CustomerID)
);
のような複数のインデックスが含まれている、我々は持っていません。 2組のテーブルDDLを維持し、U-SQL開発者はdbo.Ordersとdbo.Orders_ByCustomerIdの間でコードを更新する必要はありません。
例: 今、私たちは、これが
@res = REDUCE dbo.Orders ON CustomerId
PRODUCE CustomerId, CustomerClass int
READONLY CustomerId
USING new Extension.R.Reducer(scriptFile:"CustomerClassifcation.R", rReturnType:"dataframe");
PS並列に実行されることはありませんが、これは
@res = REDUCE dbo.Orders_ByCustomerId ON CustomerId
PRODUCE CustomerId, CustomerClass int
READONLY CustomerId
USING new Extension.R.Reducer(scriptFile:"CustomerClassifcation.R",rReturnType:"dataframe");
平行になるよう、さまざまな表情を行う必要があります。(スクリプトの例わけではありませんテスト済み!)
誰もこの制限を克服するための適切なワークフロー/パターンに関する提案を持っていますか