2017-08-28 12 views
1

私はusqlスクリプトを動的に生成して、テーブルスキーマを読み込みます。私は既存のtsvファイルをデータ・レイク・ストアに置いており、新しいデータをそれらの既存のtsvファイルに追加する必要があります。 しかし、usqlスクリプトを生成すると、テーブルスキーマが変更され、追加のカラムが追加されることがあります。デフォルト値の列 - usql

私の知る限り、tsvファイルのusqlスクリプトと同じ数の列を持つ必要があります。 これらの新しく追加された列をいくつかのデフォルト値にすることは可能ですか?例えば、

@Result = EXTRACT id string,    
firstname string,    
lastname string,    
department string = "", 

emp_id int = 0 
    FROM @inputfile 
    USING Extractors.Tsv(); 

ご覧のとおり、departmentとemp_idの列が新しく追加されました。出力ファイルにいくつかのデフォルト値を挿入したいと思います。 列がすでにtsvに存在する場合は、列の値を取得し、それ以外の場合はデフォルト値を挿入します。

ありがとうございました。

答えて

1

現在、デフォルトの列を抽出ステートメントスキーマの一部として指定することはできません。現在の推奨パターンは以下のとおりです。

  1. は、あなたのTSVのバージョンの右の列を抽出する(あなたは簡単に存在する列を知っているので、それらを組織していることを確認してください)、その後、労働組合への行セットをUNION ALL BY NAMEを使用しています。これにより、列が欠落している行セットにNULL /デフォルト値の列が追加されます。

  2. 引数としてSqlMapをとり、指定されたデフォルトで不足している列を埋め込むカスタム抽出を記述します。

+0

削除列シナリオを処理する方法はありますか? 既存のtsvファイルには5つの列があり、新しいtsvには4つの列があります。現在、既存のtsvファイルにデータを追加するとき、結果のファイルには4つの列しかないはずです。 – Lokesh

+0

新しい質問としてこれを聞かれますか?これにより、後で簡単に見つけることができます。 –

+1

私はそれに対する回避策を得ました。両方のファイルの結果セットを別々の変数とOUTER UNIONで取得します。最終結果変数に必要な列だけを出力して出力します。 – Lokesh

関連する問題