2017-02-02 21 views

答えて

2

あなたのdevボックスでC#コードを実行し、U-SQLスクリプトに値を渡したい、あるいはU-SQLスクリプト内でC#コードを実行しますか?あなたの説明ははっきりしていません。あなたの質問のタイトルに基づいて、私はあなたの最初の質問に答えます。

C#プログラムのパラメータとして値を渡す:Azure Data Factoryとは異なり、ADLA SDKはまだU-SQLスクリプトのパラメータモデルを提供していません(http://aka.ms/adlfeedbackでリクエストしてください。すでに、外部の顧客需要を有することが優先順位付けに役立つ)。

しかし、スクリプトの冒頭に次のようなDECLARE文を追加して、パラメータ値を追加してスクリプトに変数として参照させることは、かなり簡単です。

DECLARE @param = new SqlArray<int>(1, 2, 3, 4); // 1,2,3,4 were calculated in your C# code (I assume you have int partition keys). 

次に、述語(例えば、@param.Contains(partition_col))で配列を使用することができなければなりません。それは(しかし、我々はそれのための作業項目を持っている)パーティションの削除をトリガーしません。

パーティションを削除する場合は、固定値のパラメータ値を持つ必要があり、IN句でその値を使用する必要があります。例えば、あなたは3ヶ月までチェックしたい、あなたはとしてクエリ述語を記述します。

WHERE partition_col IN (@p1, @p2, @p3); 

そして、あなたはおそらく、あなたが必要としないパラメータの値を複製、@p1, @p2@p3の定義を付加します。

+0

したがって、すべてのパラメータ値を事前にハードコードする必要がありますか? –

+0

私はData Lake Storeデータベースをクエリする文字列パーティションキーのリストを生成するC#関数(getKeys)を持っています。これらのパーティションキー(つまり、ハードコードされていない)をU-SQLでデータベースにクエリする方法はありますか?パーティションを削除しないコードは次のとおりです。 @results = SELECT RowKey FROM Schema.TableName WHERE USQLApp.queryHelper.getKeys()。Contains(PartitionKey) –

+0

現在のところ、値が一定の場合の単純比較述部(例えば、コンパイル時に知られている)をパーティション除去に使用することができる。 パラメータ値のハードコーディングは、すべてのスクリプトが提出時にコンパイルされるため、大きな問題ではありません。したがって、提出時にパラメータ値を追加することは、ほとんどの場合有効です。 –

関連する問題