2017-06-26 11 views
0

テーブル内の列全体をクリーンアップして、デジタルマーケティングキャンペーンに関するレポートのための明確な帰属/参照を作成しようとしています。目標は、文字列の一部を保持し、他のすべてを削除することです。マーケティングキャンペーン内のすべての文字列には、各部分文字列を区切る記号があります。サブストリングを列全体で削除する

添付されているのは、現在のテーブルと目的のテーブルの写真です。

Current and desired table

私は基本的に文字列のみの構造の一部に保ち、他のすべてのサブ文字列を削除しようとしています。私はすでに別のスレッドから与えられた次の公式を適用することで、これをうまく成功させました。

これは完全に機能しましたが、私はこれを完全に理解していません。このフォーラムでこれまで明確な答えが見つかっていません。

これを今後の行にどのように適用すればよいですか?広告グループとマッチタイプはこの目的で使用できます。

多くのありがとうございます。

+0

https://www.postgresql.org/docs/9.3/static/functions-matching.html# –

答えて

0

最初のもの:ソースデータを変更してください。代わりにETLを実行し、最終段階に変換します。それを定期的に行い、新しいデータを世話してください。

あなただけはそれで2つの警告がすべての新しいデータのための作業が、そこにあるべきでトリガーを作成することができます。データが欠落し、あなたがそれをQAにできないにつながる

  1. 失敗。
  2. 誤ってソースデータを誤って変更した場合は、バックアップを取らない限り元に戻すことはできません。バックアップしないと元に戻すことはできません。

代わりにTalendやPentaho KettleのようなETLツールを見てください。独自のETLスクリプトを作成したり、何でも作成できます。ジェンキンスを使用してこれを定期的にスケジュールしてください。

今、変換自体について。

for '#' 

#"この場合の正規引用として扱われることを意味し、#エスケープ記号であろうことを示しています。

substring(campaign from '%-%-#"%#"' for '#') 

このように、パターン内の引用符間のすべてを選択します。 %はワイルドカードで、LIKEの比較で使用されているものと同じです。最後のグループのすべてが返されます。私はこのような新しいテーブルを作成します^(.*?)\s*\}

類似した - これは、より良い正規表現正規表現は ^(.*?)\s*\{
そして三番目のためになる第二のカラムについては

substring(campaign from '.*?-.*?-(.*)') 

で行うことができます ​​

しかし、あなたはアップデートを行う必要がある場合、これはどのように次のようになります。

UPDATE adwords SET 
    campaign = substring(campaign FROM '^\w{2}-\w+-(.*)$'), 
    ad_group = substring(ad_group FROM '^(\w+)\s*\{\w+\}$'), 
    match_type = substring(match_type FROM '^(\w+)\s*\}$') 
WHERE campaign ~ '^\w{2}-\w+-(.*)$' 
+0

を探してください。こんにちはアレクサンダー、私はトリガーを作成する方法を理解していると思いますが、私は完全にはわかりません。ソースデータを直接使用しているわけではなく、実際にデータがあるテーブルから別のテーブルに挿入されているため、実際にはリスクはありません。最後の2行のクエリ全体を作成することは可能でしょうか?本当にありがとう。 –

+0

普通のキーボードに行くときはやります。 MacBookは私と付き合っていない。そこに数分待ってください。 – AlexanderMP

+0

ありがとうアレクサンダー。 –

関連する問題